我需要分析networking上的stream量转储,以检查所有PC是否启用了tcp keep-livefunction。 我正在使用tcpdump来达到这个目的。
我需要知道的是,如果有可能只过滤保活包。
在Windows上,我看到wireshark可以做到这一点,但在我的linux系统,它只有控制台模式,我不知道如何过滤这种数据包。
Keepalive探测器是一个没有数据的数据包,ACK标志开启
tcpdump -pni $intf -v "tcp port $port and ( tcp[tcpflags] & tcp-ack != 0 and ( (ip[2:2] - ((ip[0]&0xf)<<2) ) - ((tcp[12]&0xf0)>>2) ) == 0 ) "
这是做什么的:
免责声明:没有经过实际testing,但应指向一个好的方向
Wireshark使用与tcpdump相同的捕获语法。 两者都从libpcap工作。 但是,我认为你在Wireshark中看到的function是一个显示filter,启发式分析邻近的数据包。 我认为你可以做的最好的做法是寻找1字节或0字节的ACK来响应保持活动的请求。 尝试这个;
tcpdump -vv "tcp[tcpflags] == tcp-ack and less 1"
并看看你是否得到预期的主机之间的stream量。
RFC 1122涵盖了TCP Keep-alive,并将许多实现留给了供应商。
另外,您可以考虑在Linux主机上使用tcpdump来捕获文件,然后将捕获到您的工作站进行分析。