查找从pcap数据传输的数据量

时间:2015-01-24 19:18:38

标签: python wireshark pcap tcpdump winpcap

我有一个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,因为我将使用巨大的捕获文件。

1 个答案:

答案 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)