9

在 Scapy(或者甚至只是 Python)中,我如何获得给定数据包的大小(以字节为单位)?我很想使用这个函数len,但我不确定它在数据包的情况下究竟返回什么。

>>> len(IP(dst="www.google.com"))
20

>>> len(IP(dst="www.google.com")/TCP(dport=80))
40
4

3 回答 3

10
>>> len(IP(dst="www.google.com"))
20

一个最小的 IP 标头中有 20 个字节。

>>> len(IP(dst="www.google.com")/TCP(dport=80))
40

最小 TCP 标头中还有另外 20 个字节(20+20==40)。

所以似乎len正在返回数据包长度。

于 2012-05-11T13:26:11.590 回答
2

我一直在观察的是 Len(packet[Layer]) 实际上会执行 LenField 类型的操作。它将返回数据包中的字节数,从指定的层开始,一直到数据包的末尾。因此,虽然此方法可用于确定整体数据包大小,但请注意,它无法确定单个层的长度。

于 2012-09-19T18:06:50.037 回答
2

这是我在使用 scapy 嗅探数据包时获取数据包大小/长度的方法。

pkt.sprintf("%IP.len%")

完整示例:

from scapy.all import *

# callback function - called for every packet
def traffic_monitor_callbak(pkt):
    if IP in pkt:
        print pkt.sprintf("%IP.len%")

# capture traffic for 10 seconds
sniff(iface="eth1", prn=traffic_monitor_callbak, store=0, timeout=10)

我只使用 scapy 来嗅探数据包,所以我不确定在将 scapy 用于创建数据包等其他事情时上述内容是否有意义。

于 2014-01-10T19:43:55.243 回答