我有以下内容tcpdump -i eth0 -n tcp port 5000
来过滤两台主机之间流动的每个数据包。然而,其中一台主机总是发送 ACK。
我如何隐藏这个ACK?
答案1
tcpdump -i eth0 -n 'tcp port 5000 and (tcp[tcpflags] & tcp-ack == 0)'
应该做你想做的事。确实如此按位和TCP 标志和仅 ACK 位掩码之间的值,因此如果没有 ACK,结果应等于 0。
答案2
您可以通过将命令传递给 grep 来隐藏它:
tcpdump -i eth0 -n tcp port 5000 | grep -e ACK -v
-e option is to select a pattern (ACK in your case)
-v (to invert the grep function : grep all except the defined pattern)
答案3
我直接从 man tcpdump 过滤器示例中复制了此内容:
打印所有进出端口 80 的 IPv4 HTTP 数据包,即仅打印包含数据的数据包,而不是例如 SYN 和 FIN 数据包以及仅 ACK 数据包。 (IPv6 留给读者作为练习。)
tcpdump 'tcp 端口 80 和 (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'