2015-06-04 5 views
1

Я пытаюсь прочитать и перечислить файл pcap из Python, но при этом мне кажется, что я получаю данные уровня 3 даже при наличии данных уровня 2:Получите второй уровень от PCAP с помощью Python/Scapy

Вот мой код:

import pprint 
from scapy.all import * 

target_cap = 'hello.pcap' 

parser = PcapReader(root_dir + target_cap) 

for i,p in enumerate(parser): 
    pkt = p.payload 
    pprint.pprint(pkt) 

IE выход:

<IP version=4L ihl=5L tos=0x0 len=52 id=12220 flags=DF frag=0L ttl=128 proto=tcp chksum=0x453a src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP sport=sddp dport=mbap seq=1584390497 ack=1497344211 dataofs=5L reserved=0L flags=PA window=65325 chksum=0xe356 urgptr=0 options=[] |<Raw load='\x00\x00\x00\x00\x00\x06\xff\x01\x00\x00\x00\x01' |>>> 
<IP version=4L ihl=5L tos=0x0 len=50 id=30949 flags= frag=0L ttl=64 proto=tcp chksum=0x7c13 src=192.168.2.25 dst=192.168.2.100 options=[] |<TCP sport=mbap dport=sddp seq=1497344211 ack=1584390509 dataofs=5L reserved=0L flags=PA window=4096 chksum=0xd17d urgptr=0 options=[] |<Raw load='\x00\x00\x00\x00\x00\x04\xff\x01\x01\x00' |>>> 
<IP version=4L ihl=5L tos=0x0 len=40 id=12226 flags=DF frag=0L ttl=128 proto=tcp chksum=0x4540 src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP sport=sddp dport=mbap seq=1584390509 ack=1497344221 dataofs=5L reserved=0L flags=A window=65315 chksum=0xe267 urgptr=0 |>> 
<IP version=4L ihl=5L tos=0x0 len=52 id=12240 flags=DF frag=0L ttl=128 proto=tcp chksum=0x4526 src=192.168.2.100 dst=192.168.2.25 options=[] |<TCP sport=sddp dport=mbap seq=1584390509 ack=1497344221 dataofs=5L reserved=0L flags=PA window=65315 chksum=0xe34a urgptr=0 options=[] |<Raw load='\x00\x00\x00\x00\x00\x06\xff\x01\x00\x00\x00\x01' |>>> 
<IP version=4L ihl=5L tos=0x0 len=40 id=30972 flags= frag=0L ttl=64 proto=tcp chksum=0x7c06 src=192.168.2.25 dst=192.168.2.100 options=[] |<TCP sport=mbap dport=sddp seq=1497344221 ack=1584390521 dataofs=5L reserved=0L flags=A window=4096 chksum=0xd17f urgptr=0 |<Padding load='\x00\x00\x00\x00\x00\x00' |>>> 

в данном случае меня интересует только в метаданных уровня 2, как я могу принести, что вместо этого?

ответ

1

Ваш код намеренно печатает только полезную нагрузку пакета, а не заголовки. Это означает, что вы каждый раз печатаете N + 1-й уровень.

Также, не связанная с вашей проблемой, вам не нужно enumerate в вашей примерной программе.

Попробуйте вместо этого:

for p in parser: 
    pprint.pprint(p) 

Если вы хотите проверить пакетные данные, а не просто напечатать его, что это легко, тоже:

# Sample code to print IP/MAC relationships: 
for p in parser: 
    if Ether in p and IP in p: 
     print p[Ether].dst, p[IP].dst 
     print p[Ether].src, p[IP].src 

Ссылка: http://www.secdev.org/projects/scapy/doc/index.html

+0

Спасибо, но теперь мне интересно, как я могу получить информацию с 'p'. IE: как просто получить MAC-адрес, как просто получить IP-адрес и т. Д. Как вы получаете метаданные из разных слоев? – Juicy

+1

См. Мое последнее дополнение. –

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