para obtener su IP externa, se puede hacer una consulta DNS a un servidor opendns con el nombre de host especial "myip.opendns.com":
from subprocess import check_output
ip = check_output(["dig", "+short", "@resolver1.opendns.com",
"myip.opendns.com"]).decode().strip()
En Windows, usted podría intentar nslookup
.
No hay ningún módulo dns en Python stdlib que permita especificar el servidor dns personalizado. Puede usar bibliotecas de terceros, p., Twisted para hacer la consulta DNS:
from twisted.internet import task # $ pip install twisted
from twisted.names.client import Resolver
from twisted.python.util import println
def main(reactor):
opendns_resolvers = [("208.67.222.222", 53), ("208.67.220.220", 53)]
resolver = Resolver(servers=opendns_resolvers, reactor=reactor)
# use magical hostname to get our public ip
return resolver.getHostByName('myip.opendns.com').addCallback(println)
task.react(main)
Ésta es la misma utilizando dnspython
library:
import dns.resolver # $ pip install dnspython
resolver = dns.resolver.Resolver(configure=False)
resolver.nameservers = ["208.67.222.222", "208.67.220.220"]
print(resolver.query('myip.opendns.com')[0])
otro servicio más: 'curl icanhazip.com' – jfs
Ahora está muerto. – maxywb