2013-10-04 4 views
2

그래서 나는 다음과 같은 소켓이있어 :설정 '다음 헤더'바이트

sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.getprotobyname("icmp")) 

과를 내가 RFC4443에 따라 적절하게 구성 ICMP6 ECHO 요청과를 보낼 때 128 및 코드 0 (유효성이 검사 된 체크섬)을 사용하면 패킷이 잘못 되었기 때문에 패킷이 대상 스택에 의해 삭제됩니다. 이는 IPv6 헤더의 '다음 헤더'바이트가 RFC (ICMP의 경우 #) 당 1로 설정되기 때문입니다.

두 가지 : 1. 나는 socket.getprotobyname을 알고는 ("ICMP")의 IPv4와 소켓 ICMP 호환하게 (? 오른쪽) ... 2. 와이어 샤크에서 IPv6로 패킷하지만 ICMP하지 된 ICMPv6 등의 프로토콜을 읽고 ...

어느 쪽이든 protocolbyname ("icmpv6")을 사용하는 소켓을 설정하십시오. (누군가가 적절한 문자열을 알지 못하는 한 ... 분명하지 않습니다 ... "ICMP6" "ICMPV6"를 시도했지만 아마도 몇 가지 시도가 있습니다. 내가 할 수있는 밑줄로).

OR I 손으로 패킷을 구성하는 58

최후로 상기 패킷을 전송하기 전에 "다음 헤더"바이트를 변경.

누구나 아이디어가 있으십니까? 나는 분명히 파이썬에서 가장 경험이 많지 않다.

답변

1

, socket.getprotobyname('<proto>') 가을/etc/프로토콜 (유닉스)에서 플랫 파일에 나열된 프로토콜에 해당하는 정수를 반환 및/C/windows/system32/drivers/etc/protocols (Windows)에 있습니다. 그들을 확인하십시오! 이것이 페이로드 내의 특정 데이터 인 IP 헤더의 유일한 바이트입니다. 유닉스 컴퓨터의 목록에는 최소한 Mac에서는 모든 프로토콜이 포함되어 있으며 Windows에는 가장 일반적인 프로토콜이 들어 있습니다. 이 파일도 편집 할 수 있습니다.

4

이 그것을 어떻게해야이 건너 오는 사람들을위한

socket.getprotobyname('ipv6-icmp') 
+0

안녕하세요, 감사합니다. 당신 말이 맞습니다. 나는 분명히 근시안적이었습니다. 매우 감사. – jeffery

+0

+1, q와 a 모두. 이것은 정확한 icmpv6 문자열 이름을 찾고 있었기 때문에 나 또한 도움이되었습니다. OP가 자신의 문제를 해결하면 대답을 수락해야합니다. – fayyazkl

관련 문제