在 scapy 中对数据包 header 使用方括号

Using square brackets for packet header in scapy

我有一个关于在 scapy 中使用方括号时得到的数据的问题。

参考代码:

#!/usr/bin/python3
from scapy.all import *

def spoof_pkt(pkt):
    a = pkt[IP]

pkt = sniff(filter='tcp',prn=spoof_pkt)

以上代码尝试嗅探 tcp 数据包。我的问题是,当我在 scapy 中使用 pkt[IP] 之类的语法时,我是只获得 IP header,还是从 IP header 开始获得整个数据包?

您将获得整个数据包,包括并遵循 IP header:

>>> a = Ether()/IP()/ICMP()
>>> a[IP]
<IP  frag=0 proto=icmp |<ICMP  |>>

如果您只需要 IP 层,则必须删除其负载:

>>> c = a.copy()[IP]
>>> c.remove_payload()
>>> c
<IP  |>

请注意,数据包及其所有子字段都是可变的