首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3-无法接收IPv6数据包(UDP - linux)

Python3-无法接收IPv6数据包(UDP - linux)
EN

Stack Overflow用户
提问于 2014-12-18 18:11:09
回答 1查看 491关注 0票数 1

我有一个试图接收IPv6数据包的脚本,但是它没有接收到任何数据包。

首先,这里是我来自ifconfig的以太网配置。

代码语言:javascript
复制
eth1      Link encap:Ethernet  HWaddr f8:b1:56:9a:cf:ef  
      inet addr:192.168.1.90  Bcast:192.168.1.255  Mask:255.255.255.0
      inet6 addr: fe80::fab1:56ff:fe9a:cfef/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:751359199 errors:38 dropped:10874 overruns:0 frame:35
      TX packets:23407 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:1033523557150 (1.0 TB)  TX bytes:2002869 (2.0 MB)
      Interrupt:20 Memory:ef400000-ef420000 

我有两张网卡,但一张用于互联网,一张用于测试。第二卡连接到发送以太网分组的设备。我将该设备配置为发送IPv6数据包以地址it 80::fab1 1:56FF:fe9a:cfef和端口46780 (不过,我可以将其配置为发送到任何IPv6地址和任何端口)。我编写了一个python脚本来接收这些包,但是我要么得到一个错误,要么我的脚本找不到包。我通过wireshark和使用原始python套接字确认了这些数据包。

以下是我尝试过的事情和遇到的各种错误/问题的清单。

  1. 如果我绑定到地址"::1",我就能够绑定到该地址。然而,我从来没有收到任何IPv6包。
  2. 我尝试使用socket.getaddrinfo(),然后使用返回的信息并绑定到它,但是当我尝试这样做时,我得到了错误的“无效参数” info = socket.getaddrinfo(host_ipv6_addr, port_num, socket.AF_INET6, socket.SOCK_DGRAM, 0, socket.AI_PASSIVE) rtp_socket.bind(info[0][4])

socket.getaddrinfo返回(10,2,17,'',(‘fe80:fab1 1:56FF:fe9a:cfef’,46780,0,0))

  1. 如果我试图直接绑定到我的IPv6地址,我也会收到“无效参数”。但是,当我将作用域从0更改为5时,我反而收到了错误“无法分配请求地址”。rtp_socket.bind( (host_ipv6_addr, port_num, 0, 5))

任何洞察力都将不胜感激。我猜想在这一点上,我没有正确地设置我的以太网卡什么的。

更新:使用迈克尔·汉普顿的答案,我使用来自socket.getaddrinfo的信息解决了我的问题,IP地址为"fe80::fab1:56ff:fe9a:cfef%eth1“,并将结果粘贴到rtp_socket.bind()中。范围ID从0变为3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-20 00:07:06

您试图绑定到链接本地地址,但忘记了包含the scope ID (在本例中是%eth1)。

因此,您应该绑定到地址fe80::fab1:56ff:fe9a:cfef%eth1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27553029

复制
相关文章

相似问题

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