2014-01-09 2 views
0

Я установил python (x, y) 2.7.5.1 и dpkt 1.7 win32.exe в Windows 8. Мой набор данных ввода - это файлы .pcap, загруженные из CAIDA. Я хочу проанализировать файл pcap, чтобы увидеть заголовки IP и TCP пакетов, как показано ниже.Как проанализировать файлы заголовков файла pcap?

Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n', 
off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, 
off_x2=128, ack=3382015884, win=54, sum=65372, flags=17, dport=80, sport=56145))) 

Код используется

f = open('test.pcap') pcap = dpkt.pcap.Reader(f) 
for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print eth 

Но И получать, как показано ниже только: не показывать заголовки IP и TCP. Какова причина? Как разбирать файлы заголовков файла pcap?

Ethernet(src='\x00\x00\xcd\x01k7', dst='E\x00\x00<\xda\xd3', type=10315, data='Y\xacG~\[email protected]\x08\x00\xf8\xb3K\xa4\x05\x00') 

Pls помочь мне как можно скорее ..........

ответ

1

Это дает полный сетевой пакет, который содержит внутри Ip и TCP пакетов.

In [87]: data 
Out[87]: Ethernet(src='\x00\x1a\xa0kUf', dst='\x00\x13I\xae\x84,', data=IP(src='\xc0\xa8\n\n', off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145))) 

вы можете получить доступ к адресу источника макинтош из пакета Ethernet, как

In [88]: data.src 
Out[88]: '\x00\x1a\xa0kUf' 

доступа пакетных Ethernet данных (который является IP пкт внутри содержит TCP ПКТ) в качестве

In [89]: data.data 
Out[89]: IP(src='\xc0\xa8\n\n', off=16384, dst='C\x17\x030', sum=25129, len=52, p=6, id=51105, data=TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145)) 

Перейти на источник Ip как

In [90]: data.data.src 
Out[90]: '\xc0\xa8\n\n' 

Доступ к TCP данных как

In [91]: data.data.data 
Out[91]: TCP(seq=9632694, off_x2=128, ack=3382015884L, win=54, sum=65372, flags=17, dport=80, sport=56145) 

Вы можете изменить свой код, как,

Код используется

f = open('test.pcap') pcap = dpkt.pcap.Reader(f) 
for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    print eth 
    eth.data   # To get IP pkt 
    eth.data.data  # To get TCP pkt 
+0

Я получаю сообщение об ошибке при доступе к eth.data.data, поскольку это не имеет атрибута данные. >>> eth.data 'Y \ xacG ~ \ XDE @ \ x08 \ x00 \ XF8 \ xb3K \ xa4 \ x05 \ x00' >>> eth.data.data TraceBack (самый последний вызов последнего) : Файл «», строка 1, в AttributeError: объект 'str' не имеет атрибутов 'data' – guny

+0

Возможно, это не TCP pkt, возможно, ARP/ICMP pkt, вы должны добавить правильные проверки для TCP/UDP/ARP/ICMP pkts. –

+0

При открытии входного файла CAIDA pcap в Wireshark он включает как TCP, так и ICMP-пакеты. Мы можем видеть информацию заголовка, такую ​​как timetolive, flags и т. Д. В Wireshark, но как получить доступ к этим данным с помощью программирования через Python или любого другого языка программирования? [В переполнении стека некоторых других подобных вопросов показано, что файл pcap не имеет ethernet, поскольку его протокол уровня 2 является причиной того, что данные атрибута не существуют. Если да, то что делать? ] – guny

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