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