13

scapy パケット内の特定のレイヤーの存在を確認するにはどうすればよいですか? たとえば、IP ヘッダーの src/dst フィールドを確認する必要があります。特定のパケットに実際に IP ヘッダーがあることを確認するにはどうすればよいでしょうか (たとえば、IPv6 とは対照的に)。

私の問題は、IP ヘッダー フィールドを確認しようとすると、IP レイヤーが存在しないというエラーが表示されることです。この特定のパケットには、IP ヘッダーの代わりに IPv6 が含まれていました。

pkt = Ether(packet_string)
if pkt[IP].dst == something:
  # do this

IP レイヤーを参照しようとすると、エラーが発生します。レイヤーを操作する前に、そのレイヤーの存在を確認するにはどうすればよいですか?

ありがとう!

4

2 に答える 2

23

inオペレーターを試してみてください。レイヤーが に存在するかどうかに応じて、Trueまたはを返します。FalsePacket

root@u1010:~/scapy# scapy
Welcome to Scapy (2.2.0-dev)
>>> load_contrib("ospf")
>>> pkts=rdpcap("rogue_ospf_hello.pcap")
>>> p=pkts[0]
>>> IP in p
True
>>> UDP in p
False
>>>
root@u1010:~/scapy#
于 2011-04-05T12:43:23.220 に答える
18

完了するために、方法についても言及すると思いましたhaslayer

>>> pkts=rdpcap("rogue_ospf_hello.pcap") 
>>> p=pkts[0]
>>> p.haslayer(UDP)
0
>>> p.haslayer(IP)
1

それも役立つことを願っています。

于 2012-04-16T12:30:34.823 に答える