在Scapy(或者甚至只是Python中,爲此),如何獲取給定數據包的字節大小? 我很想使用函數len
,但我不確定在數據包的情況下到底返回的是什麼。在scapy中獲取數據包大小/ python
>>> len(IP(dst="www.google.com"))
20
>>> len(IP(dst="www.google.com")/TCP(dport=80))
40
在Scapy(或者甚至只是Python中,爲此),如何獲取給定數據包的字節大小? 我很想使用函數len
,但我不確定在數據包的情況下到底返回的是什麼。在scapy中獲取數據包大小/ python
>>> len(IP(dst="www.google.com"))
20
>>> len(IP(dst="www.google.com")/TCP(dport=80))
40
我一直在觀察的是Len(packet [Layer])實際上會執行LenField類型的操作。它將返回數據包中的字節數,從指定的層開始一直到數據包的末尾。因此,儘管此方法可用於確定整個數據包的大小,但要注意,它無法確定單個圖層的長度。
那麼,你的意思是它不會找到頭的長度,但總是頭+負載。 –
以下是我用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的其他東西,如創建數據包時,以上是有道理的。
爲什麼不對每個數據包'p'都做'len(p)'? –
兩者似乎都適合我。我只是表明實際的數據包長度可以從數據包本身獲取。 scapy中的'pkt.sprintf'函數在抓取各種頭字段時非常有用,所以在這裏也只是顯示它的用法。 – Banjer
len是給出數據包大小,並且是否有從tcpdumpfile生成的1000個數據包。總結每個數據包的長度是否爲您提供實際的數據傳輸大小?建議 – ramdaz