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运营商。它返回TrueFalse取决于该层是否存在于Packet.

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 回答