gpt4 book ai didi

linux - Python 3 - 无法接收 IPv6 数据包(UDP - linux)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:44 25 4
gpt4 key购买 nike

我有一个尝试接收 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 数据包发送到地址 fe80::fab1:56ff:fe9a:cfef 和端口 46780(但是,我可以将其配置为发送到任何 IPv6 地址和任何端口)。我写了一个 python 脚本来接收这些数据包,但我得到了一个错误,或者我的脚本没有找到这些数据包。我通过 wireshark 和使用原始 python 套接字确认了这些数据包。

这是我尝试过的事情的列表以及我遇到的各种错误/问题。

  1. 如果我绑定(bind)到地址“::1”,我就能够绑定(bind)到该地址。但是,我从未收到任何 IPv6 数据包。
  2. 我尝试使用 socket.getaddrinfo() 然后使用返回的信息并绑定(bind)到它,但是当我尝试这样做时我收到错误“无效参数”

    info = socket.getaddrinfo(host_ipv6_addr, port_num, socket.AF_INET6,
    socket.SOCK_DGRAM, 0, socket.AI_PASSIVE)
    rtp_socket.bind(信息[0][4])

socket.getaddrinfo 返回 [(10, 2, 17, '', ('fe80::fab1:56ff:fe9a:cfef', 46780, 0, 0))]

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

任何见解将不胜感激。我猜此时我没有正确设置我的以太网卡或其他东西。

更新:使用 Michael Hampton 的回答,我通过使用 IP 地址为“fe80::fab1:56ff:fe9a:cfef%eth1”的 socket.getaddrinfo 中的信息并将结果粘贴到 rtp_socket.bind() 中解决了我的问题。范围 ID 从 0 变为 3。

最佳答案

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

所以你应该绑定(bind)到地址 fe80::fab1:56ff:fe9a:cfef%eth1

关于linux - Python 3 - 无法接收 IPv6 数据包(UDP - linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27553029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com