我有一个试图接收IPv6数据包的脚本,但是它没有接收到任何数据包。
首先,这里是我来自ifconfig的以太网配置。
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套接字确认了这些数据包。
以下是我尝试过的事情和遇到的各种错误/问题的清单。
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))
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。
发布于 2014-12-20 00:07:06
您试图绑定到链接本地地址,但忘记了包含the scope ID (在本例中是%eth1)。
因此,您应该绑定到地址fe80::fab1:56ff:fe9a:cfef%eth1。
https://stackoverflow.com/questions/27553029
复制相似问题