2015-04-23 3 views
1

Я делаю небольшой сетевой проект, используя библиотеку scapy для python. Мой проект включает в себя обнюхивать в пакетах, и подкладки нового слоя между слоями 3 и 4.Scapy - вставить слой пакета между двумя другими слоями

Используя это руководство, 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

Ниже приведен пример, который показывает, как придать другой 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 |>>>>> 
>>> 

Там может быть более простой способ, но выше, легко достаточно думаю.

+0

отлично! Благодаря! – user3509258

Смежные вопросы