我有一个pcap文件,其中包含来自二进制格式的实验的流量跟踪。我想要做的是找出不同主机互相交换多少数据,但我对使用pcap很新,我一直在搜索和尝试不同的事情而没有成功
tcpdump可以在这里有用吗?我用它处理了原始文件并得到了类似的东西:
2009-12-17 17:26:04.398500 IP 41.177.117.184.1618 > 41.177.3.224.51332: Flags [P.], seq 354231048:354231386, ack 3814681859, win 65535, length 338
2009-12-17 17:26:04.398601 IP 90.218.72.95.10749 > 244.3.160.239.80: Flags [P.], seq 1479609190:1479610159, ack 3766710729, win 17520, length 969
2009-12-17 17:26:04.398810 IP 244.3.160.239.80 > 90.218.72.95.10749: Flags [.], ack 969, win 24820, length 0
2009-12-17 17:26:04.398879 IP 41.177.3.224.51332 > 41.177.117.184.1618: Flags [P.], seq 1:611, ack 338, win 65535, length 610
"长度"每行末尾的值是两个主机相互转移了多少数据的好指标?
问题是如果我用Wireshark查看原始文件,看起来这个长度实际上是TCP头长度,但数据/有效负载大小在Wireshark中单独指定(这四个数据包中的第一个为38字节)这令我感到困惑。
总而言之 - Wireshark说(关于第一个数据包):1)"线路上的396个字节",2)"捕获的96个字节",3)" len:338",4)"数据(38字节)"。
Tcpdump说:"长度338"
如何找到有效负载大小?如果可能的话,我愿意使用Python,因为我将使用巨大的捕获文件。
答案 0 :(得分:2)
tcpdump在这里有用吗?
是
每行末尾的“长度”值是两个主机相互传输了多少数据的良好指标吗?
是。这是转移的字节数量。
如何找到有效负载大小?如果可能,我愿意使用Python,因为我将>正在处理一个巨大的捕获文件。
您没有指定协议,所以让我们假设“有效负载大小”是指“IP头之后的所有内容”。使用Python和dpkt
很容易做到这一点。根据{{3}},假设没有选项的IP数据包,一些可能你想要的代码看起来像这样:
#!/usr/bin/env python
import dpkt
from socket import inet_ntoa
with open("sample.pcap") as f:
pcap = dpkt.pcap.Reader(f)
for ts, buf in pcap:
ip = dpkt.ethernet.Ethernet(buf).data
print "{} --> {} {}".format(inet_ntoa(ip.src), inet_ntoa(ip.dst), ip.len)