在实例化icmpipv6之后,在v6python套接字中设置“next header”字节

2024-05-29 10:57:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个类似以下的插座:

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

当我根据RFC4443发送一个正确构造的ICMP6回显请求,类型128,代码为0(也经过验证的校验和),数据包被目的地的堆栈丢弃,因为包的格式不正确,很明显,因为IPv6头中的“下一个头”字节被设置为每个RFC的1(对于ICMP)。在

两件事: 1我知道socket.getprotobyname(“icmp”)使套接字icmp与IPv4兼容(对吗?)。。。 2Wireshark将数据包读取为IPv6,但协议为ICMP而不是ICMPv6。。。在

将套接字设置为使用protocolbyname(“icmpv6”)(显然,这是无效的。除非有人知道正确的绳子。。。我试过“icmp6”“icmpv6”,但我可能会尝试使用下划线)。在

或者在发送数据包到58之前更改“下一个头”字节。在

最后一种方法是手工构建数据包。在

有人有主意吗?显然,我对Python不是最有经验的。在


Tags: raw字节socket数据包插座sockipv6af
2条回答

这应该做到:

socket.getprotobyname('ipv6-icmp')

对于任何遇到这种情况的人, socket.getprotobyname('<proto>') 返回与/etc/protocols(Unix)和/c/windows/system32/drivers/etc/protocols(windows)中的平面文件中列出的协议相对应的整数。 看看他们!这是IP头中唯一一个特定于其有效负载中的数据的字节。Unix机器上的列表包含所有协议,至少在mac上是这样,而Windows只包含最常见的协议。你也可以编辑这个文件。在

相关问题 更多 >

    热门问题