2012-08-03 3 views
5

Scapy에서 수동으로과 일치하는 해당 ICMP 시간 초과 메시지가있는 패킷과 일치합니다.Scapy : 전체 IP 패킷 헤더를 얻으려면 어떻게해야합니까?

나는 일치해야합니다

    는 ICMP 패킷이 문제가되지 않습니다 IP-에-ICMP의
  • IP 헤더 내 데이터 패킷 의 처음 8 바이트의 ICMP 패킷의 필드

  • :

    icmpPayload = STR (icmpPacket [ICMP] .payload) 데이터 패킷의 처음 8 바이트로

, I 광주 ST는 수행해야합니다

str(myPacket[IP].payload)[:8] 

내가 myPacket IP 헤더를 얻을하는 방법을 모르겠어요. 이제 전체 패킷의 페이로드를 처음 8 바이트로 바꿉니다. 패킷의 수천에 적용되는 경우 검색 및 대체이 너무 오래 걸릴 수 있습니다, 난 두려워 :

strOfMyPacket = str(myPacket[IP]) 
strOfMyPacket.replace(str(myPacket[IP].payload),str(myPacket[IP].payload)[:8],1) 

나를 단순히 다음을 수행을하게됩니다 어떤 빠른 방법을?

partOfPayload = str(myPacket[IP].payload)[:8] 
fullHeader = _______ 
stringToCompare = fullHeader + partOfPayload 
+0

아마 단지 : 'str을 (myPacket [IP]) [: 28]' –

답변

4
str(myPacket)[:(myPacket[IP].ihl * 4)] 

IP 헤더 길이 필드 ihl (인터넷 헤더 길이)이다. 헤더가 사용하는 32 비트 단어의 수로 표현됩니다. (이것은 헤더의 'options'섹션으로 인해 가변적입니다). 따라서 필드를 32로 곱한 다음 8 (또는 * 4)로 나누면 옵션이 있든 없든간에 헤더가 채워지는 바이트 수를 얻습니다.

하위 레이어가없는 IP 헤더 만 반환하는 방법이 없다는 사실에 놀랐습니다. 이 질문에 경우 다른 사람 범프에서

http://en.wikipedia.org/wiki/IPv4_header#Header

3

, 난 당신이 remove_payload() (IP 상속) 클래스 패킷의 기능을 사용할 수 있습니다 생각합니다. 이것은 머리말을 남겨 두어야합니다. 나는 scapy에 처음이지만 그것이 통역사에 그것을 시도 할 때 작동하는처럼 본다.

>>> ip = IP(dst='10.0.0.1', src='10.0.0.14', ttl=255)/ICMP() 
>>> hexdump(ip) 
0000 45 00 00 1C 00 01 00 00 FF 01 A7 D1 0A 00 00 0E E............... 
0010 0A 00 00 01 **08 00 F7 FF 00 00 00 00**    ............ 
>>> ip.remove_payload() 
>>> hexdump(ip) 
0000 45 00 00 14 00 01 00 00 FF 00 A7 DA 0A 00 00 0E E............... 
0010 0A 00 00 01          .... 
>>> 
+0

감사합니다! 나는이 기능에 대해 몰랐다. –

+1

헤더를 제거 할 수있는 방법이 있습니까? 즉 이더넷, IPv4 또는 TCP – SuB

관련 문제