首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从套接字(AF_INET6、SOCK_RAW、IPPROTO_ICMPv6)的原始字节串创建一个SOCK_RAW替罪羊对象?

如何从套接字(AF_INET6、SOCK_RAW、IPPROTO_ICMPv6)的原始字节串创建一个SOCK_RAW替罪羊对象?
EN

Stack Overflow用户
提问于 2018-08-25 17:27:46
回答 2查看 624关注 0票数 0

我想检查/分析使用Python程序中的ICMPv6路由器公告(RAs),在该程序中,我获得(不是这样)原始数据包数据,如下所示:

代码语言:javascript
运行
复制
import socket
sock = socket.socket(socket.AF_INET6, socket.SOCK_RAW, socket.IPPROTO_ICMPV6)
p, addr = sock.recvfrom(4096)

当接收到ICMPv6数据包时,数据包p将只包含(!)ICMPv6部件本身,但没有任何其他外部元素,所以没有IPv6头,没有以太网报头,.

如何从我的原始数据包数据创建正确的Scapy 6派生的数据包类?_ICMPv6似乎只是一个后备类。是否有某种工厂可以从其中获得正确的子类(如ICMPv6ND_RA)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-28 17:00:40

在阅读了Scapy的inet6.py源代码之后,我注意到有一个更“直接”(但不一定更干净)的方法来获得正确的Scapy ICMPv6消息对象,而不是Cukic0d的精确答案:这意味着有另一种方式不需要“假的”外部IPv6对象外壳(尽管我真的很欣赏Cukic0d的回答,因为它是一个将发件人地址倒入的好地方!)

代码语言:javascript
运行
复制
from scapy.layers.inet6 import *

icmpv6_packet = icmp6typescls.get(p[0], ICMPv6Unknown)(p)

这使用icmp6typescls字典将从套接字返回的数据包的第一个八进制中的ICMPv6 (消息)类型映射到其相应的Scapy ICMPv6消息类.然后调用构造函数,将有效载荷交给它。

ICMPv6Unknown是ICMPv6 (消息)类型不能映射到已知消息类时使用的默认类。这确保了始终有一个合理的构造函数被调用,即使我们不理解在其全部细节中收到的数据包。

票数 0
EN

Stack Overflow用户

发布于 2018-08-28 00:45:30

从较低的层(第二层或第三层)解剖数据包是非常容易的,因为解剖方法有多么不同。

你可以试一试

代码语言:javascript
运行
复制
a = IPv6(nh=58)
cls = a.default_payload_class(p)
pkt = cls(p)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52019635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档