Comando de Windows que devuelve IP externa

58

¿Existe un comando mediante el cual pueda encontrar mi IP externa de mi enrutador o mi enrutador NAT \ DSL, etc., eliminando la necesidad de visitar whatsmyip.net o similar?

Junaid Saeed
fuente
Linux: askubuntu.com/questions/95910/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

14

No hay un comando incorporado para hacer esto. Parte del problema es que cuando está conectado a Internet a través de un enrutador, el hardware de su red no está directamente conectado a Internet, por lo que su sistema no tiene una IP asignada específicamente. Es posible que incluso tenga varias IP externas en algunos casos si está detrás de un proxy inverso, ya que muchas redes corporativas están configuradas. Su mejor opción podría ser crear un script que pregunte whatismyip.org , o tratar de encontrar si ya existe.

(Como consejo, whatismyip.org es preferible a la mayoría de las otras soluciones, ya que solo devuelve su IP como texto sin formato, sin texto superfluo, enlaces, imágenes u otra basura. Sería mucho más fácil de usar en un script personalizado que la mayoría de los otros sitios de detección de IP.)

nhinkle
fuente
66
Cambiaron whatismyip.org, desafortunadamente; la dirección IP ahora se devuelve como una imagen , por lo que es bastante inútil para la secuencia de comandos. El sitio web "icanhazip.com" que se menciona a continuación hace el trabajo.
onnodb
Yandex está funcionando, verifique el script publicado a continuación.
Filipe YaBa Polido
Comando nativo de trabajo desde abajo superuser.com/a/722397/216374
PsychoData
107

Puede usar una solicitud DNS en lugar de una solicitud HTTP para averiguar su IP pública:

C:\> nslookup myip.opendns.com. resolver1.opendns.com

Utiliza el resolver1.opendns.comservidor dns para resolver el myip.opendns.com.nombre de host mágico en su dirección IP. (Nota: el seguimiento .de la búsqueda evita que se agreguen dominios de búsqueda, lo que puede producir resultados incorrectos).

Versión Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com
jfs
fuente
1
Trabajado como un encanto.
BK
brillante, funciona sin instalar nada también.
ericosg
Ya no funcionó para mí en noviembre de 2017, en Windows 10. La respuesta de PowerShell de Bradley Forney funciona.
Jason
Aún funcionó para mí (Windows 10, diciembre de 2017). Muy inteligente @jfs, ¿OpenDNS tiene esto documentado en alguna parte, cómo lo descubriste?
Alex KeySmith
44
Esta debería ser la respuesta aceptada, ya que proporciona un comando real y funciona. La respuesta aceptada dice que no hay un comando (que se demostró que es falso), y sugiere usar un script, sin dar realmente más instrucciones.
CyberClaw el
30

apoderarse de su propia copia de curlde http://curl.haxx.se/download.html y luego simplemente

curl "http://myexternalip.com/raw"

o use powershell:

$wc = new-object System.Net.WebClient
$wc.DownloadString("http://myexternalip.com/raw")

(descargo de responsabilidad: http://myexternalip.com fue creado por mí)

akira
fuente
Eso solo proporciona una dirección IPv6. ¿Hay alguna manera de obtener la dirección IPv4?
tim11g
Seguí leyendo y encontré los ejemplos de IPv4 / IPv6 a continuación para Powershell. Es posible obtener IPv4 con CURL como este "C:> curl" myip.dnsomatic.com "
tim11g
7

Esto funciona bien, lo uso principalmente con psexec cuando inspecciono las conexiones de la computadora cliente.

nslookup myip.opendns.com resolver1.opendns.com
Antti Lagus
fuente
6

Cree un archivo llamado ip.vbsy copie lo siguiente en él:

Option Explicit
Dim http : Set http = CreateObject( "MSXML2.ServerXmlHttp" )
http.Open "GET", "http://icanhazip.com", False
http.Send
Wscript.Echo http.responseText   'or do whatever you want with it
Set http = Nothing

Ejecutar usando

C:\>cscript ip.vbs

Como señaló nhinkle , es mejor elegir un sitio que solo devuelva la IP y no los anuncios HTML +, etc., como:

(fuente: anteriormente http://externip.com/about )

hiperslug
fuente
5

Hice este script por lotes para hacer eso hace unos meses:

@echo off

:: WhatIsMyIP.cmd - returns public IP address
:: requires: wget.exe

if [%1]==[-h] goto :HELP
if [%1]==[--help] goto :HELP
if [%1]==[/?] goto :HELP

wget -q -O %temp%\MyIP http://www.whatismyip.com/automation/n09230945.asp
for /f "delims= " %%G in (%temp%\myip) do set PublicIP=%%G & del %temp%\MyIP
echo. & echo Your public IP address is %PublicIP% & echo.
if [%1]==[--clip] echo %PublicIP% | clip
goto :EOF

:HELP
echo. & echo Usage: whatismyip [--clip] & echo.
goto :EOF

:EOF

Le da la opción de poner la dirección IP en el portapapeles y establece una variable ambiental - %PublicIP%.


MÉTODO MÁS SIMPLE:

Ahora, solo hago esto en su lugar:

curl icanhazip.com

o...

curl icanhazip.com | clip

... para obtener la dirección IP pública actual en el portapapeles.

Necesitas cURL .

paradroid
fuente
1
El script de paradroid funcionó bien, pero whatsmyip movió la página web a automatización.whatismyip.com/ n09230945.asp Si cambia a esto, funciona perfecto.
5

Con Powershell 3.0 (Windows 7 predeterminado es 2.0) puede usar Invoke-WebRequest

Para IPv4:

$tmp =Invoke-WebRequest -URI http://myip.dnsomatic.com/
$tmp.Content

Para IPv6:

$tmp =Invoke-WebRequest -URI http://myexternalip.com/raw
$tmp.Content

Esto le dará una variable para trabajar si tiene algo específico que desea hacer con él. De hecho, estoy usando esto para crear un script para cargar periódicamente la IP dinámica de mi enrutador, hacer que otra máquina pruebe la comunicación a intervalos regulares y luego actualice DNS con la última IP si ha cambiado para poder acceder a mi equipo desde cualquier lugar usando un nombre en lugar de tener que perseguir constantemente la IP.

Y, por supuesto, a medida que cambien los sitios o cambien sus resultados, querrá actualizar esto en consecuencia. :)

Bradley Forney
fuente
Este enfoque funcionó muy bien para mí en Windows 10. Necesitaba un comando de una línea, por lo que ejecuté lo anterior entre comillas después powershell.exe -noprofile -command "". Separe el salto de línea con un punto y coma ...
Jason
1
¿Un trazador de líneas? Solo corre(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss
3

Pruebe esto:
no necesita ningún tipo de software externo instalado.

@set @script=0 /*
  @echo off
    set @script=
    cscript //nologo //e:jscript "%~dpnx0"
  exit /b
*/

with (new ActiveXObject('Microsoft.XMLHTTP')) {
   open('GET', 'http://internet.yandex.ru/', false);
   send();

   WScript.echo(responseText.match(/IPv4:\s(\d+\.){3}\d+/g));
}
Filipe YaBa Polido
fuente
3

Sin programas de terceros es difícil en Windows, ya que Telnet no se suministra de forma predeterminada, pero, si está allí (XP) o encendido (Windows Vista y superior), simplemente escriba:

telnet curlmyip.com 80

la pantalla parpadeará y obtendrá un cursor ... Siguiente tipo:

GET

En mayúsculas ... verá los encabezados, seguidos de su dirección IP (y lo siento, lo borré, ¡solo muestra dónde estaría!):

ingrese la descripción de la imagen aquí

Otras respuestas aquí obviamente funcionan, pero, ¡estoy tratando de mantener la pregunta sobre algo que se pueda usar en cualquier ventana, sin programas de terceros!

Para Windows Vista y superior, puede instalar telnet fácilmente (y de forma segura) a través de Programs and features, o usar el siguiente comando:

pkgmgr /iu:”TelnetClient”
William Hilsum
fuente
Eso (¡y la mayoría de las respuestas!) Asume que el sitio web de origen recoge su dirección IP con precisión; algunos tipos de servidores proxy lo estropean. Estaba raspando mi dirección IP de mi enrutador debido a esto. Curiosamente, en estos casos, un sitio web que utiliza un puerto no estándar puede funcionar bien.
Journeyman Geek
No funciona con curlmyip.com, pero probado trabajando con checkip.dyndns.org.
Sopalajo de Arrierez
2

Puedes usar ifcfg.me . Es compatible con algunos comandos internos que vienen con Windows de forma predeterminada.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
Eun
fuente
1

Quería tener una solución que funcione para Windows sin instalar herramientas de terceros. Así que tomé la opción de PowerShell , que debería ejecutar un script cada hora.

Crea este script con el Bloc de notas

$wc = new-object System.Net.WebClient
$ip = $wc.DownloadString("http://myexternalip.com/raw")
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $LogTime
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt $ip
Add-Content C:\Users\Administrator\Desktop\logs\IPLog.txt "`n"

y guardarlo como en getIP.ps1algún lugar. Puede llamar a este script directamente en powershell o usar el planeador de tareas como lo hice. Este es el comando para ejecutar:

powershell -executionpolicy bypass -File C:\Users\Administrator\Desktop\getIP.ps1

En el programador de tareas, crea una nueva tarea. En Trigger , usa la configuración todos los días por 1 día y, en la opción avanzada, elige cada hora de forma inmediata . También marque Ejecutar tarea lo antes posible después de que se pierda un inicio programado en la Configuración . En Acción , pega el código de ejecución anterior.

El código de PowerShell se puede optimizar, porque no soy un gurú de PowerShell (mi primera vez con él). Ahora estoy probando si el script se llama cada hora.

pruebas
fuente
1

Esto es lo que descubrí, es posible usar el comando incorporado para obtener una dirección IP pública, pero usted tiene acceso a Internet

telnet icanhazip.com

o

telnet myip.gelma.net
Sam
fuente
¡Buena atrapada! Aunque icanhazip.comno funcionará para mí y el otro no hace IPv6 correctamente. :)
Daniel B
0

ipchicken.com le devolverá su dirección IP aparente en formato de texto si puede analizar el HTML devuelto que extrae la IP externa de su enrutador. Alternativamente, puede instalar uno de esos agentes DNS dinámicos que actualiza su IP externa aparente a un FQDN y luego simplemente hacer una búsqueda en su FQDN para ver su número de IP actual. Solía ​​haber otros gratuitos como DynDNS, pero la mayoría de ellos ahora requieren una cuenta de suscripción paga.

anthonymaw
fuente