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はパケットサイズを指定しており、tcpdumpファイルから1000パケットが生成されています。これらのパケットの長さの合計は実際のデータ転送サイズを提供しますか?助言をしてください – ramdaz