如何用Tcpdump捕获ack或者syn数据包?

如何用Tcpdump捕获ack或者syn数据包?

我想使用过滤规则来仅捕获 ack 或 syn 数据包。我该怎么做?

答案1

pcap 过滤器语法用于 tcpdump 的工作方式应该与 wireshark 捕获过滤器的工作方式完全相同。

使用 tcpdump 时我会使用这样的过滤器。

tcpdump "tcp[tcpflags] & (tcp-syn|tcp-ack) != 0"

查看tcpdump 手册页,并密切关注 tcpflags。

请务必查看 Wireshark Wiki 中有关捕获和显示过滤器的部分。遗憾的是,这两种过滤器使用完全不同的语法,并且对同一事物使用不同的名称。

如果您想要显示过滤器而不是捕获过滤器,您可能需要构建一个结合 tcp.flags.ack 和 tcp.flags.syn 的表达式。不过,我对捕获过滤器更熟悉,所以您必须自己解决这个问题。

答案2

虽然@Zoredache的答案很好也很完整,但请注意,该语法将产生任何设置了 TCP SYN 或 TCP ACK 标志的数据包,包括严格来说不是普通的“TCP SYN”或“TCP ACK”数据包,因为它们已设置其他标志。这可能不是您(或未来的读者)想要的。例如,该语法还将捕获 TCP SYN-ACK 数据包、TCP FIN-ACK 等。如果您想要仅有的TCP SYN 或 TCP ACK 数据包(即仅设置其中一个标志),正确的捕获过滤器语法是:

'tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack'

等价地:

'tcp[13] == 2 or tcp[13] == 16'

干杯!

答案3

tcpdump 'tcp[13] = 3'

http://danielmiessler.com/study/tcpdump/

先进的

您还可以根据数据包的特定部分进行过滤,以及将多个条件组合成组。例如,前者在仅查找SYNs 或RSTs 时很有用,而后者则可用于更高级的流量隔离。

UAP RSF

[提示:TCP 标志的字谜:不熟练的攻击者会骚扰真正的安全人员]

您的备忘录:...

显示所有紧急(URG)数据包...

tcpdump 'tcp[13] & 32 != 0'

显示所有 ACKNOWLEDGE(ACK)数据包...

tcpdump 'tcp[13] & 16 != 0'

显示所有 PUSH ( PSH) 数据包...

tcpdump 'tcp[13] & 8 != 0'

显示所有 RESET(RST)数据包...

tcpdump 'tcp[13] & 4 != 0'

显示所有 SYNCHRONIZE(SYN)数据包...

tcpdump 'tcp[13] & 2 != 0'

显示所有 FINISH ( FIN) 数据包...

tcpdump 'tcp[13] & 1 != 0'

显示所有 SYNCHRONIZE/ACKNOWLEDGE(SYNACK)数据包...

tcpdump 'tcp[13] = 18'

[笔记:tcpdump 的标志字段输出中仅显示PSH、、和标志。显示s 和,但它们显示在输出中的其他地方RST,而不是标志字段中]SYNFINURGACK

答案4

我只想自己获取 SYN 数据包,因此我使用了以下命令:

tcpdump -i eth7 'tcp[13] & 2 != 0'

这应该会立即对你起作用。

相关内容