将UDP套接字绑定到(“”,1234)或(“0.0.0.0”,1234)时,是否可以找出它实际发送的IP地址?
正如您在下面的代码中看到的,getsockname只告诉我我绑定的内容.但是当我发送数据包时,我可以看到IP地址在我的情况下是10.0.0.2.
我是否必须通过查看我的网络接口来自己推断这个地址?如果是这样,那很好,但有一种强有力的方法吗?
from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.bind(("", 1234))
print(s.getsockname()) # prints ("0.0.0.0", 1234)
s.sendto("hello", ("10.0.0.3", 1234)) # sends from 10.0.0.2
我试过了
import socket
print(socket.gethostbyname(socket.gethostname()))
但这似乎并不十分可靠(在我预期10.0.0.2的情况下,我得到了127.0.1.1).
我意识到通过绑定到0.0.0.0,我绑定到所有本地网络接口.这是否意味着当我尝试发送内容时,我的源IP地址将由路由表决定?如果是这样,我仍然可以通过Python以健壮的方式获得该地址吗?