Python: Getting an IPv6 socket to receive packets destined for the Subnet-Routers Anycast address(Python:获取IPv6套接字以接收发往子网路由器任播地址的数据包)
本文介绍了Python:获取IPv6套接字以接收发往子网路由器任播地址的数据包的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何让套接字接收发往IPv6子网路由器任播地址的数据包?
我找不到有关如何执行此操作的任何信息。
我试着使用socket.setsockopt,就像您加入多播组一样:
# 7 is the interface number
s = socket(AF_INET6, SOCK_DGRAM)
packed_iface_num = struct.pack("I", 7)
group = inet_pton(AF_INET6, 'fd36:d00d:d00d:47cb::') + packed_iface_num
# socket.error: (22, 'Invalid argument')
s.setsockopt(IPPROTO_IPV6, IPV6_JOIN_GROUP, group)
还使用绑定
# socket.error: (99, 'Cannot assign requested address')
s.bind(('fd36:773e:6b4c:47cb::', 9876))
不出所料,这两种方法都没有奏效。有办法做到这一点吗?
推荐答案
而不是IPV6_JOIN_GROUP
,请尝试将IPV6_JOIN_ANYCAST
传递给s.setsockopt()
代码。遗憾的是,Pythonsocket
模块没有定义它,但是您应该能够传递等价的整数。在Linux中IPV6_JOIN_ANYCAST
是27
和IPV6_LEAVE_ANYCAST
是28
。(在/usr/Include/linux/in6.h中定义)
我能找到的最好的文档来自lkml e-mail describing the anycast patch to the Linux kernel:
加入和离开任播组的应用界面为2 新的setsockopt()调用:IPv6_JOIN_ANYCAST和IPv6_LEVE_ANYCAST。这些论据 与相应的多播操作相同。
愿跳舞的Kame与你同在!
这篇关于Python:获取IPv6套接字以接收发往子网路由器任播地址的数据包的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Python:获取IPv6套接字以接收发往子网路由器任播
基础教程推荐
猜你喜欢
- 筛选NumPy数组 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 用于分类数据的跳跃记号标签 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01