所以我有一个如下的套接字:
sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.getprotobyname("icmp"))
当我按照RFC4443发送一个正确构造的ICMP6 ECHO REQUEST类型128和代码0(也验证校验和)时,数据包被目标堆栈丢弃,因为数据包格式错误,显然,因为IPv6中的“下一个报头”字节每个RFC设置标头为1(ICMP为#) .
两件事:1 . 我知道socket.getprotobyname(“icmp”)使套接字ICMP与IPv4兼容(对吗?)... 2. Wireshark将数据包读取为IPv6但协议为ICMP而不是ICMPv6 ......
使用protocolbyname(“icmpv6”)设置套接字(显然是无效的 . 除非有人知道正确的字符串...我已经尝试了“icmp6”“icmpv6”但是可能会尝试使用我可以制作的下划线) .
或者在将数据包发送到58之前更改“下一个标头”字节 .
LAST RESORT手动构建数据包 .
有人有想法吗?显然,我不是Python方面最有经验的人 .