まさにその発想はなかった……という感じなのですが
ベトナムや中国でネットを使ったことがある人にはお馴染みの"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