Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

python3標準ライブラリのみで自分のIPアドレスをみたいなら、"8.8.8.8"に繋いで返り値を見る手がある

まさにその発想はなかった……という感じなのですが
ベトナムや中国でネットを使ったことがある人にはお馴染みの"8.8.8.8"に接続し、
そこで返ってきたソケット名をもって自分のIPをしる方法があります。

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
s.getsockname()
# >>> ('192.168.100.101', 52964)

s.getsockname()[0]
# >>> '192.168.100.101'

文字列で返ってくるので、標準ライブラリipaddressとの連動も可能

import ipaddress

paddress.ip_address(s.getsockname()[0])
IPv4Address('192.168.100.101')

ipaddress.ip_address(s.getsockname()[0]).is_global
False
>>> ipaddress.ip_address(s.getsockname()[0]).is_private
True