2016-06-17 83 views
0

pcap 파일을 통해 구문 분석해야하는 작업을 수행하고 있으므로 dpkt를 사용하고 있습니다. 나는 네트워킹에 익숙하지 않아서 코드 디버깅/시작에 어려움을 겪고 있습니다.dpkt를 사용하여 pcap 파일을 구문 분석

코드의

첫 번째 세트 :

import dpkt 

filename='test.pcap' 
f = open(filename) 
pcap = dpkt.pcap.Reader(f) 

for ts, buf in pcap: 
    eth = dpkt.ethernet.Ethernet(buf) 
    ip = eth.data 
    tcp = ip.data 

f.close() 

오류가 AttributeError입니다 : 'STR'개체가없는 속성 '데이터'

그래서 이전에 유래에서 나는 어쩌면 내가 생각 해요 것을 발견에 " dpkt 이더넷 디코드를 건너와 IP 디코드로 바로 이동 : UnpackError "그래서 코드를 변경하고 이동

import dpkt 

filename='test.pcap' 

f = open(filename) 
pcap = dpkt.pcap.Reader(f) 

for ts,buf in pcap: 
    ip = dpkt.ip.IP(buf) 
    tcp = ip.data 

f.close() 

지금 저를주고있다 오류입니다"잘못된 헤더 길이 "

정말이 앞으로 이동하는 방법을 이해하지 말고, 도움이 크게 될 이것은 일반적으로 Windows에서 발생

+0

pcap 파일을 공유 할 수 있습니까? –

답변

1

감사합니다. 창에서 바이너리 모드로 pcap 파일을 열어야합니다 :

f = open('test.pcap','rb')

+0

니스! 이것은 정답입니다. – Yvainovski

1

나는 내 전화기에서 찍은 흔적에 대해 이와 같은 문제가있었습니다.

이것은 이더넷이 Linux Cooked Capture로 대체 되었기 때문입니다. 트레이스가 유사하게 캡슐화 된 경우 dpkt.ethernet.Ethernet (buf) 대신 dpkt.sll.SLL (buff)을 사용해야합니다. 예를 들면 다음과 같습니다.

import dpkt 

filename='a_linux_cooked_capture.pcap' 
f = open(filename, 'rb') 
pcap = dpkt.pcap.Reader(f) 

for ts, buf in pcap: 
    eth = dpkt.sll.SLL(buf) 
    ip = eth.data 
    tcp = ip.data 
f.close()