2009-07-17 21 views
40

Mis computadoras están ubicadas detrás de un enrutador/firewall. ¿Cómo averiguo programáticamente cuál es mi dirección IP externa? Puedo usar http://www.whatsmyip.org/ para consultas ad-hoc, pero los TOS no permiten verificaciones automáticas.¿Cómo puedo saber cuál es mi dirección IP externa?

¿Alguna idea?

+13

+1 para respetar las condiciones de servicio! – RichieHindle

+0

Si no posee el servidor en el que está trabajando, querrá asegurarse de tener acceso a hosts fuera de la red antes de realizar un esfuerzo real en el proyecto. –

Respuesta

45

http://ipecho.net/plain parece ser una alternativa viable , como whatismyip.com ahora requiere membresía para su vínculo automático. Ellos muy amablemente parecen ser offering este servicio gratis, así que por favor no lo abuse.

+2

Para obtener más información acerca de por qué esta es la forma preferida: http://www.whatismyip.com/automation – Justin

+0

whatismyip ahora cobra por este servicio. Puede encontrar más información en http://www.whatismyip.com/membership-options/ – RyanfaeScotland

+0

http://www.ipveg.com no requiere autenticación ni limitaciones –

12

Desafortunadamente no hay una manera fácil de hacerlo.

Usaría un sitio como www.whatsmyip.org y analizaría la salida.

checkip.dyndns.com devuelve un archivo HTML muy simple que se parece a esto:

<html> 
    <head> 
    <title>Current IP Check</title> 
    </head> 
    <body> 
    Current IP Address: 84.151.156.163 
    </body> 
</html> 

Esto debe ser muy fácil de analizar. Además, el sitio existe desde hace unos diez años. Existe la esperanza de que estará disponible por un tiempo.

+0

Desafortunadamente, el servicio DynDns solo debe usarse cuando usa sus servicios (http://dyn.com/support/developers/checkip-tool/). –

+0

Yo uso esto. Es muy fácil de analizar en la mayoría de los lenguajes: en Python es una sola línea de código para eliminar todas las líneas adicionales de código (filebuffer [before: -after] donde antes y después están el número de caracteres antes y después, y son constantes .) @IvanMesic, no tiene que utilizar ninguno de sus servicios para utilizar este sitio. – JFA

0

whatismyip.com o ipchicken.com son muy fáciles de analizar.

Si tiene un servidor web o vps también puede determinarlo, sin temor a que se vaya al azar dejándolo atascado.

11

Si usted tiene acceso a un servidor web con modphp, puede rodar su propia:

<?php print $_SERVER['REMOTE_ADDR']; ?> 

Si usted no quiere que para obtener abusado, tendrá que mantenerlo en secreto o añadir límites de solicitudes .

He estado usando uno en mi servidor durante años.

explícitamente:

crear un archivo llamado whatismyip.php en su carpeta public_html en su sitio web. Se puede llamar cualquier cosa y estar en cualquier parte de tu webroot.

Añadir la línea anterior, y luego volver a consultar su servidor:

curl http://example.com/whatismyip.php 

por ejemplo.

+0

Agregué un script como este a mi servidor hace años y es muy útil. Todo lo demás es una exageración extraña. – JAL

+1

pero somos perezosos, es por eso que estamos buscando algo rápido en SO! – georgiecasey

1

Otra forma es si tiene acceso a un correo electrónico en la nube (yahoo, google, hotmail), envíese un correo electrónico. Luego vea los encabezados y debería ver su dirección IP allí.

me gustaría ver el área exacta, pero las cabeceras pueden variar de cada implmentation, Busca la recibida por y para continuar, hasta llegar a algo que parece enviado por

EDIT: Esto responde a la forma en para encontrar la dirección IP, no a través del enfoque PROGRAMMATIC

+3

Esa es una idea extremadamente ineficiente. –

+0

Quizás ineficiente, pero si se encuentra en una estación de trabajo bloqueada y no puede acceder al dispositivo externo, es otro método que puede utilizar. – Wayne

2

Si el enrutador que está detrás habla UPnP, siempre puede utilizar una biblioteca UPnP para cualquier idioma que esté desarrollando para consultar el enrutador por su IP externa.

6

Desafortunadamente a partir de 2013, whatismyip.com cobra por el servicio.

http://www.icanhazip.com sigue siendo fuerte, 3 años después. Simplemente muestra el IP como texto, absolutamente nada más.

http://checkip.dyndns.org sigue funcionando también.

También puede usar Google si desea asegurarse de que no se detendrá, pero aún así puede bloquearlo por violaciones de los TOS.

https://www.google.ie/search?q=whats+is+my+ip

Pero incluso cuando me bloquean, todavía me dicen que mi dirección IP del cliente en el mensaje de error.

1

Mi enrutador WRT54G me lo dice a través de su característica de acceso al enrutador local (la interfaz de administración http (s)), y me imagino que se podría hacer algo similar con muchos otros dispositivos. En este caso, la página de entrada da los octetos de la dirección IPv4 en cuatro líneas que contienen esta frase:

class = num maxLength = 3 size = 3 value = 'i 'name =' wan_ipaddr_ N' id = 'wan_ipaddr_ N'

Dónde i es el valor octeto y N es el número de octetos. Este bit de ripios obtiene y lo analiza para mí, cortesía de cygwin:

#! /usr/bin/env perl 
use strict; 
use warnings 'all'; 

my($account, $password) = @ARGV; 

open QUERY, 
    "curl --sslv3 --user '$account:$password' https://Linksys/ --silent |" 
    or die "Failed to connect to router"; 

my @ipaddr = ('x','x','x','x'); 

while(<QUERY>) { 
    $ipaddr[$2] = $1 if /value='(\d+)' name='wan_ipaddr_([0-3])/; 
} 
close QUERY; 
print join('.', @ipaddr); 

No hay ninguna garantía de que esto va a funcionar con todas las versiones del firmware del router.

Si su enrutador está configurado para usar http para esta interfaz, suelte la opción --sslv3 rizo, y puede usar notación decimal con puntos para dirigirse al enrutador. Para utilizar https con las opciones de enrollamiento anteriormente, también hice esto:

  1. Se utiliza un navegador obtener certificado autofirmado del router (guardado como Linksys.crt).

  2. añadido a mi CA paquete:

    openssl x509 -in Linksys.crt -text >> /usr/ssl/certs/ca-bundle.crt 
    
  3. Agregado 'Linksys' a mi archivo de hosts (C: \ Windows \ System32 \ drivers \ etc \ hosts en mi caja de Windows 8), como un alias para la dirección del enrutador Si la notación decimal con puntos se da a curl en lugar de este alias, rechaza la conexión a causa de una discrepancia de nombre de sujeto de certificado.

Alternativamente, podría simplemente usar la opción --insecure para eludir la verificación del certificado, lo que probablemente tenga más sentido en estas circunstancias.

2
curl ifconfig.me 

o

curl ifconfig.me/ip 

En caso que usted no tiene instalado rizo,

wget ifconfig.me/ip 2>/dev/null && cat ip 

Espero que esto ayude.

-1

Simple pero no elegante para este uso. Instalé algunas cámaras de seguridad y mi proveedor de cable - Wide Open West o WOWWAY quería $ 10 por mes para configurar una IP estática - EXTORTION para una reserva de DHCP ... así que creé un archivo VBS con el siguiente código para soltar el resultado Dropbox y Google Drive ... tienen que eliminar el archivo para que se sincronice uno nuevo por alguna razón.

Esto se ejecuta en una PC en mi casa. Mi PC está configurada para reanudar el corte de energía y una tarea está programada para ejecutar esto todos los días una vez (tenga en cuenta que si la ejecuta con frecuencia, el sitio bloqueará sus solicitudes).

Ahora puedo obtener mi dirección IP en el camino y ver la gente roba mis cosas :-)

get_html "http://ipecho.net/plain", "C:\Users\joe\Google Drive\IP.html" 

get_html "http://ipecho.net/plain", "C:\Users\joe\Dropbox\IP.html" 



sub get_html (up_http, down_http) 

dim xmlhttp : set xmlhttp = createobject("msxml2.xmlhttp.3.0") 

xmlhttp.open "get", up_http, false 

xmlhttp.send 

dim fso : set fso = createobject ("scripting.filesystemobject") 

dim newfile : set newfile = fso.createtextfile(down_http, true) 

newfile.write (xmlhttp.responseText) 

newfile.close 

set newfile = nothing 
set xmlhttp = nothing 

end sub 
0

ifcfg.me permite de búsqueda a través de

nslookup
telnet
FTP y HTTP

incluso funciona con IPv6

2

http://myexternalip.com proporciona este tipo de información. Para recuperar su IP que tiene un montón de opciones:

2

Dado que hace un tiempo se formuló esta pregunta, ahora hay un servicio web disponible libremente diseñado específicamente para permitirle determinar su dirección IP programáticamente, llamada ipify.

$ curl 'https://api.ipify.org?format=json' 

Resultados en

{"ip": "1.2.3.4" /* your public IP */} 
Cuestiones relacionadas