2015-04-23 35 views
1

我正在做一个使用python scapy库的网络项目。我的项目涉及在包嗅探,和匀场层3和4Scapy - 在两个其他层之间插入数据包层

之间一个新的图层使用本指南,http://www.secdev.org/projects/scapy/doc/build_dissect.html

我能够创建一个新的包层。我可以通过做类似的事情轻松地在现有数据包的顶部添加图层,

packet = newlayer()/packet 

而newlayer()图层将放置在IP层下面。然而,我想要在第3层和第4层之间夹层这个新层(而不是在IP之下)。但我似乎无法找到一个简单的方法来实现这一点。

我知道我可以只创建一个新的数据包,这样做,

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

然而,因为,我想接入层,到我已经嗅包,我想简单地修改原始数据包,而不是从头开始创建新数据包。

任何帮助,将不胜感激!

+0

也许这有助于:http://stackoverflow.com/questions/29133482/scapy-how-to-insert-a-new-layer-802-1q-into-existing-packet –

回答

2

下面是显示如何层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 |>>>>> 
>>> 

可以是更简单的方法,但上述易我觉得够了。

+0

完美!谢谢! – user3509258