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から堅牢な方法でそのアドレスを取得できますか?