Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设置';下一个标题';icmp ipv6实例化后v6 python套接字中的字节_Python_Sockets_Header_Ipv6_Icmp - Fatal编程技术网

设置';下一个标题';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应该接受答案,如果它解决了他的问题。