tcpdump - 如何根据tcp连接时间/持续时间进行过滤

时间:2013-04-30 23:01:47

标签: linux filtering tcpdump

是否有可能根据tcp连接时间(连接持续时间)过滤tcpdump(实时或创建转储后)?

我正在录制http json rpc流量。 我想只记录比1000毫秒更长的连接。

在wireshark中,Menu-> Statistics-> Conversations(TCP标签)中有工具,我可以按“持续时间”排序。但我想在之前记录(或过滤)长期存在的连接(而不是在wireshark中)。

在伪命令中我想做这样的事情:

tcpdump -i eth0 port 80 and connectionTime>1000ms -w data.pcap

或录制后:

cat data.pcap | SOMETOOL -connectionTime>1000ms > dataLongConnections.pcap

SOMETOOL必须将过滤后的数据导出为Wireshark能够理解的格式。 因为过滤后我想在Wireshark中分析这些数据。

我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

SplitCap可能适合您。它将PCAP作为输入并为每个TCP / UDP会话输出单独的PCAP。在拆分之后,您可以从输出PCAP中过滤掉要保留的有趣内容。

答案 1 :(得分:1)

您需要在 flow 级别而不是数据包级别考虑您的流量。

如果您使用NetFlow,则可以使用flow-toolsflow-nfilter按持续时间过滤流量。所以你可以convert your pcap to NetFlow然后过滤它。

缺点是在输出端你得到的是NetFlow,而不是PCAP。建立一些统计数据就足够了,但要检查数据包 - 当然不是。

您还可以使用C(硬盘方式)中的libpcap或python中的scapy(更简单的方法)构建自己的工具。后一个选项不应该太难(假设您使用python)