Вы должны использовать протокол UPnP , чтобы запросить у вашей роутера эту информацию. Самое главное, что это не зависит от внешней службы, которая, как представляется, предлагает все другие ответы на этот вопрос.
Существует библиотека Python с именем miniupnp, которая может сделать это, см., Например, miniupnpc / testupnpigd.py .
pip install miniupnpc
Основываясь на их примере, вы сможете сделать что-то вроде этого:
import miniupnpc
u = miniupnpc.UPnP()
u.discoverdelay = 200
u.discover()
u.selectigd()
print('external ip address: {}'.format(u.externalipaddress()))