如何检查scapy数据包中是否存在图层?

Mr.*_*nce 12 python scapy

如何检查scapy数据包中是否存在特定图层?例如,我需要检查IP头的src/dst字段,我怎么知道特定的数据包实际上有一个IP头(例如与IPv6相反).

我的问题是,当我去检查IP头字段时,我得到一个错误,说IP层不存在.这个特定的数据包不是IP头,而是IPv6.

pkt = Ether(packet_string)
if pkt[IP].dst == something:
  # do this
Run Code Online (Sandbox Code Playgroud)

我尝试引用IP层时发生错误.在尝试操作之前,如何检查图层是否存在?

谢谢!

jli*_*ndo 21

你应该试试"in"运算符.它返回true或false,具体取决于数据包中是否存在该层.

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#
Run Code Online (Sandbox Code Playgroud)


dc5*_*553 16

为了完成,我想我也会提到haslayer方法.

>>> pkts=rdpcap("rogue_ospf_hello.pcap") 
>>> p=pkts[0]
>>> p.haslayer(UDP)
0
>>> p.haslayer(IP)
1
Run Code Online (Sandbox Code Playgroud)

希望有帮助..

  • [最新的 Scapy socs 表示 `haslayer` 已被 `cls in self` 方法取代](https://scapy.readthedocs.io/en/latest/api/scapy.packet.html?highlight=haslayer#scapy.packet。数据包.haslayer)。 (2认同)