2014-04-17 2 views
0

나는 라이브러리를 사용하여 tcpdump에 캡처 된 SCTP * .pcap 파일을 파이썬에서 분석하려고합니다.dpkt를 사용하여 파이썬 네트워크 패킷 분석

SCTP 일반 헤더, 청크 헤더를 가져올 수 있습니다. 청크 헤더 다음에 라이브러리를 사용하여 구문 분석 할 수없는 chunk.data이 표시됩니다. (나는 소스 코드를 살펴 보았다).

그러나 그 첫 번째 4 바이트는 chunk.data입니다. chunk.data의 형식은 문자열입니다. 그래서 내가 처음 4 문자를 얻을 수 있다면, 나는 첫 번째 4 바이트를 얻을 수 있다고 생각한다 (문자의 크기는 1 바이트이기 때문에). 그 후을 사용하여 4 바이트를 호스트 바이트 순서로 변환해야합니다. 하지만 첫 번째는 어떻게 해야할지 모르는 socket.ntohl() 함수의 입력으로 4 자 문자열을 부호없는 정수로 변환해야합니다.

아스키 코드를 사용해 보았습니다.

i= ntohl(int(''.join(str(ord(c)) for c in x))) 
OverflowError: long int too large to convert 

내가 x="efgh"을 복용하여 시도 :

data=chunk.data 
x=data[:4] 
i= ntohl(int(''.join(str(ord(c)) for c in x))) 

그것은 오류를 보여주는 것. 그러나 ASCII 값은 4 바이트 부호없는 정수를 생성하지 않습니다. (101102103104> 4294967295) 그래서 ascii 값은 여기에서 사용하는 것이 올바르지 않다고 생각합니다.

아무에게 말해 줄 수 있습니까?

답변

0

@BSH 덕분에 this answer입니다.

나는
from struct import unpack 

내 필요한 출력

, 이것은 나를 위해 잘 작동했다.

i=ntohl(unpack('<I',chunk.data[:4])[0]) 

struct.unpack은 문자열을 압축 이진 데이터로 해석하는 데 사용됩니다.