java icmp主机扫描,在实例化icmp ipv6之后,在v6 python套接字中设置'next header'字节...

博主遇到一个问题,在使用Python的socket模块创建一个IPv6原始套接字并尝试发送ICMP6 ECHOREQUEST时,数据包被目标堆栈丢弃,原因可能是“下一个报头”字节设置不正确。Wireshark显示协议为ICMP而非ICMPv6。尝试了不同的方法,包括使用`getprotobyname('icmpv6')`,但未成功。寻求解决方案,考虑手动修改“下一个报头”字节或直接构建数据包。
摘要由CSDN通过智能技术生成

所以我有一个如下的套接字:

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方面最有经验的人 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值