Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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