ale*_*lec 3 python sockets networking scapy packet
我正在使用 python 的 scapy 库做一个小网络项目。我的项目涉及嗅探数据包,并在第 3 层和第 4 层之间填充一个新层。
使用本指南,http://www.secdev.org/projects/scapy/doc/build_dissect.html
我能够创建一个新的数据包层。我可以通过执行以下操作轻松地将图层添加到现有数据包的顶部,
packet = newlayer()/packet
Run Code Online (Sandbox Code Playgroud)
而 newlayer() 层将被放置在 IP 层之下。但是,我想将这个新层夹在第 3 层和第 4 层之间(而不是就在 IP 之下)。但我似乎无法找到一种简单的方法来实现这一点。
我知道我可以创建一个新数据包并执行类似的操作,
packet = Ether()/IP()/newlayer()/TCP()
Run Code Online (Sandbox Code Playgroud)
但是,因为我想将该层插入到我已经嗅探过的数据包中,所以我想简单地修改原始数据包,而不是从头开始创建一个新数据包。
任何帮助,将不胜感激!
这是一个示例,展示了如何Dot1Q()在第 1 层和第 2 层之间注入另一个标头(计Ether()为第 0 层):
>>> pkt = Ether() / Dot1Q() / IP() / TCP()
>>> payload = pkt.getlayer(1).payload
>>> payload
<IP frag=0 proto=tcp |<TCP |>>
>>> pkt.getlayer(1).remove_payload()
>>> pkt
<Ether type=n_802_1Q |<Dot1Q |>>
>>> newPkt = pkt / Dot1Q() / payload
>>> newPkt
<Ether type=n_802_1Q |<Dot1Q type=n_802_1Q |<Dot1Q type=IPv4 |<IP frag=0 proto=tcp |<TCP |>>>>>
>>>
Run Code Online (Sandbox Code Playgroud)
有可能是一个更简单的方法,但上面是很容易的,我认为。