【问题标题】:Scapy - insert packet layer between two other layersScapy - 在其他两个层之间插入数据包层
【发布时间】:2015-04-23 08:11:42
【问题描述】:

我正在使用 python 的 scapy 库做一个小的网络项目。我的项目涉及嗅探数据包,并在第 3 层和第 4 层之间填充一个新层。

使用本指南,http://www.secdev.org/projects/scapy/doc/build_dissect.html

我能够创建一个新的数据包层。我可以通过执行以下操作轻松地将层添加到现有数据包之上,

packet = newlayer()/packet

并且newlayer()层会放在IP层下面。 但是,我希望将这个新层夹在第 3 层和第 4 层之间(而不是在 IP 下方)。但我似乎想不出一个简单的方法来实现这一点。

我知道我可以创建一个新数据包并执行类似的操作,

packet = Ether()/IP()/newlayer()/TCP()

但是,由于我想将该层插入到我已经嗅探过的数据包中,我想简单地修改原始数据包,而不是从头开始创建一个新数据包。

任何帮助将不胜感激!

【问题讨论】:

标签: python sockets networking packet scapy


【解决方案1】:

这是一个示例,说明如何在第 1 层和第 2 层之间注入另一个 Dot1Q() 标头(将 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  |>>>>>
>>> 

可能有一个更简单的方法,但我认为上面的方法很简单。

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2011-07-29
    • 2023-01-09
    • 2021-02-11
    • 1970-01-01
    • 2019-06-07
    相关资源
    最近更新 更多