我正在排除一个故障,一个长的 TCP 事务(>=60 秒)在经过内部 Linux 网关和其间的几个其他 CISCO 路由器/交换机时,会在我的源(点 A)和目标(点 B)之间断开连接。
为了进一步调查该问题,我需要启用 TCP 日志记录并促进我的根本原因分析。但是,我的可用磁盘空间非常少,无法像我希望的那样长时间执行此日志记录。因此,我想知道是否有办法仅为选定的 TCP 数据包启用 TCP 日志记录?我需要在网关和中间网络设备上启用日志记录。
具体来说,我正在调查点 A 是否从点 B 或其间的任何其他设备收到了 FIN 数据包,这导致了当交易需要超过 60 秒才能完成时出现上述断开连接。
答案1
tcpdump是你的朋友。从pcap-filter 手册页:
选择涉及非本地主机的每个 TCP 对话的开始和结束数据包(SYN 和 FIN 数据包)。
tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 且不是 src 和 dst net localnet
因此,tcpdump -ieth0 filter_expression
应该可以满足您的需求。您可以添加其他内容,例如and host a.b.c.d and port efg
进一步限制捕获。您应该能够将相同的过滤表达式用于WireShark如果您更喜欢 GUI 程序。