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

Ter*_*ska 10 linux filtering tcpdump

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

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

在wireshark中,菜单 - >统计 - >对话(TCP选项卡)中有工具,我可以按"持续时间"排序.但我想在之前记录(或过滤)长期存在的连接(而不是在wireshark中).

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

tcpdump -i eth0 port 80 and connectionTime>1000ms -w data.pcap
Run Code Online (Sandbox Code Playgroud)

或录音后:

cat data.pcap | SOMETOOL -connectionTime>1000ms > dataLongConnections.pcap
Run Code Online (Sandbox Code Playgroud)

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

我怎么能这样做?

Jak*_* M. 1

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

如果您使用NetFlow,则可以使用flow-toolsflow-nfilter按持续时间过滤流。因此,您可以将 pcap 转换为 NetFlow,然后对其进行过滤。

缺点是在输出中您得到的是 NetFlow,而不是 PCAP。对于构建一些统计数据来说就足够了,但是对于检查数据包来说 - 不一定。

您还可以使用 C 语言的libpcap(困难的方法)或python 的scapy (更简单的方法)构建自己的工具。后一个选项应该不会太困难(前提是您使用 python)