设置';下一个标题';icmp ipv6实例化后v6 python套接字中的字节
我有一个插座,如下所示:设置';下一个标题';icmp ipv6实例化后v6 python套接字中的字节,python,sockets,header,ipv6,icmp,Python,Sockets,Header,Ipv6,Icmp,我有一个插座,如下所示: sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.getprotobyname("icmp")) 当我按照RFC4443发送一个正确构造的ICMP6回显请求,类型为128,代码为0(也验证了校验和)时,数据包被目标堆栈丢弃,因为数据包的格式不正确,显然,因为IPv6报头中的“下一个报头”字节被设置为每个RFC 1(#对于ICMP) 两件事: 1.我知道socket.getprotobyname(
sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.getprotobyname("icmp"))
当我按照RFC4443发送一个正确构造的ICMP6回显请求,类型为128,代码为0(也验证了校验和)时,数据包被目标堆栈丢弃,因为数据包的格式不正确,显然,因为IPv6报头中的“下一个报头”字节被设置为每个RFC 1(#对于ICMP)
两件事:
1.我知道socket.getprotobyname(“icmp”)使socket icmp与IPv4兼容(对吗?)。。。
2.Wireshark将数据包读取为IPv6,但将协议读取为ICMP而不是ICMPv6
或者将套接字设置为使用protocolbyname(“icmpv6”)(这显然是无效的。除非有人知道正确的字符串…我尝试了“icmp6”或“icmpv6”,但可能会尝试使用下划线)
或者在我将数据包发送到58之前更改“下一个报头”字节
最后的办法是手工制作包
有人有主意吗?显然,我在Python方面不是最有经验的。这应该可以做到:
socket.getprotobyname('ipv6-icmp')
对于任何遇到这种情况的人,
socket.getprotobyname(“”)
返回与/etc/protocols(Unix)和/c/windows/system32/drivers/etc/protocols(windows)中平面文件中列出的协议相对应的整数。
看看他们!这是IP报头中唯一一个特定于其有效负载中数据的字节。Unix机器上的列表包含所有协议,至少在mac上是这样,Windows只包含最常见的协议。您也可以编辑此文件 嘿,谢谢,你说得对,我肯定是近视眼。非常感谢。+1,q和a都是。这也帮助了我,因为我正在寻找准确的icmpv6字符串名称。OP应该接受答案,如果它解决了他的问题。