Cuando llamo al socket.getsockname()
en un objeto de socket, devuelve una tupla de la IP interna de la máquina y el puerto. Sin embargo, me gustaría recuperar mi IP externa. ¿Cuál es la forma más económica y eficiente de hacer esto?¿Cómo obtengo la IP externa de un socket en Python?
Respuesta
Esto no es posible sin la cooperación de un servidor externo, ya que podría haber cualquier número de NAT entre usted y la otra computadora. Si se trata de un protocolo personalizado, puede pedirle al otro sistema que informe a qué dirección está conectado.
La única forma que se me ocurre de garantizar que se lo den es presionar un servicio como http://whatismyip.com/ para obtenerlo.
No estoy seguro de por qué esto fue rechazado. Esto es en mi humilde opinión la única forma de obtener la dirección IP externa de cualquier sistema. El hecho de que un enrutador le diga qué piensa que es su dirección IP, o lo que cree que es su dirección IP, no significa que no haya otra NAT en su lugar. –
@MatthewSchinckel: +1 por mencionar otro NAT. Además, diferentes servicios externos pueden ver diferentes direcciones IP externas, por ejemplo, recuerdo que para acceder a un sitio de la biblioteca, tuve que usar una ruta diferente para que el sitio vea direcciones ip diferentes (permitidas), es decir, que la IP pública dependa del destino. – jfs
socket importación
s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
s.connect (("msn.com", 80))
s.getsockname ()
Utilizando la dirección sugerida en la fuente de http://whatismyip.com
import urllib
def get_my_ip_address():
whatismyip = 'http://www.whatismyip.com/automation/n09230945.asp'
return urllib.urlopen(whatismyip).readlines()[0]
note que dicen que no deben hacer esto más de una vez cada 300 segundos – Claudiu
https://github.com/bobeirasa/mini-scripts/blob/master/externalip.py
'''
Finds your external IP address
'''
import urllib
import re
def get_ip():
group = re.compile(u'(?P<ip>\d+\.\d+\.\d+\.\d+)').search(urllib.URLopener().open('http://jsonip.com/').read()).groupdict()
return group['ip']
if __name__ == '__main__':
print get_ip()
No estaba al tanto de jsonip.com - gracias. Aquí hay un poco más de variación "jsonica" de su respuesta (el formateo automático está arruinando la URL): json.loads (urllib2.urlopen (urllib2.Request ('http://jsonip.com/', headers = {'Content- Escriba ':' application/json '})). Read()) [' ip '] – chacmool
print (urllib.urlopen('http://automation.whatismyip.com/n09230945.asp').read())
- 1. ¿Socket Python se une a cualquier IP?
- 2. Acceso Python Development Server desde la IP externa
- 3. Obtener la dirección IP 'externa' en Java
- 4. ¿Cómo obtengo la dirección IP de un nodo Erlang?
- 5. ¿Cómo obtengo la dirección IP del cliente usando TcpClient?
- 6. Obtener la dirección IP de un socket remoto Endpoint
- 7. Configuración de la IP de origen para un socket UDP
- 8. ¿Cómo obtengo la dirección IP de un sitio web usando Python 3.x?
- 9. cómo obtener la IP externa en el objetivo c
- 10. ¿Cómo vaciar un socket en python?
- 11. ¿Cómo obtengo la dirección IP local del servidor usando PHP?
- 12. ¿Cómo debería uno derribar un impulso :: asio :: ip :: udp :: socket?
- 13. ¿Cómo obtengo una dirección IP pública de un teléfono móvil?
- 14. cómo funciona la escucha de un socket
- 15. Cómo obtener la dirección IP de boost :: asio :: ip :: tcp :: socket?
- 16. ¿Cómo obtengo la dirección IP de la persona que llama en un WebMethod?
- 17. ¿Cómo obtengo la dirección IP correcta de HTTP_X_FORWARDED_FOR si contiene varias direcciones IP?
- 18. iPhone Socket TCP/IP del servidor/cliente
- 19. ¿Cómo crear un socket Boost.Asio desde un socket nativo?
- 20. Enlazar la dirección IPv6 al socket Python como dirección IP de origen
- 21. boost :: asio :: ip :: tcp :: socket está conectado?
- 22. ¿Cómo obtengo la dirección remota de un cliente en servlet?
- 23. La mejor manera de abrir un socket en Python
- 24. ¿Es posible ejecutar un servidor de socket y un cliente de socket en la misma máquina?
- 25. Cómo hacer ping a IP externa desde Java Android
- 26. Conecta el socket utilizando la dirección IP secundaria
- 27. ¿Cómo puedo saber cuál es mi dirección IP externa?
- 28. C/Python Socket Performance?
- 29. programación de socket udp sin bloqueo en C: ¿qué obtengo?
- 30. Cómo censurar las direcciones IP en un archivo con Python?
Otro gran sitio web que ofrece una solución sin adornos es conseguir una petición HTTP de [icanhazip.com] (http://icanhazip.com) – Droogans