我在 python 中使用原始 IPv6 套接字时遇到了一些问题。我通过以下方式连接:
if self._socket != None:
# Close out old socket first
self._socket.close()
self._socket = socket.socket(socket.AF_INET6, socket.SOCK_RAW)
self._socket.bind((self._interface,0))
self._socket.sendall(data)
其中 self._interface 是我的本地地址;特别是“fe80::fa1e:dfff:fed6:221d”。尝试此操作时,我收到以下错误:
File "raw.py", line 164, in connect
self._socket.bind((self._interface,0))
File "<string>", line 1, in bind
socket.error: [Errno 49] Can't assign requested address
如果我使用我的 ipv6 localhost 地址作为 self._interface ("::1") 我实际上可以绑定地址,但不能发送任何东西:
self._socket.sendall(data)
File "<string>", line 1, in sendall
socket.error: [Errno 39] Destination address required
为什么原始套接字需要目标地址?有没有人在 python 中使用原始 IPv6 套接字,并且可以帮助我理解为什么会这样?