Comando do Windows que retorna o IP externo

48

Existe um comando pelo qual eu posso encontrar meu IP externo do meu roteador ou meu NAT \ DSL Router, etc., eliminando a necessidade de visitar whatsmyip.net ou similar.

    
por Junaid Saeed 21.07.2010 / 08:06

12 respostas

13

Não há comando interno para fazer isso. Parte do problema é que, quando você está conectado à Internet por meio de um roteador, seu hardware de rede não está diretamente conectado à Internet, portanto, seu sistema não recebe um IP específico. É possível que você tenha até vários IPs externos em alguns casos, se estiver atrás de um proxy reverso, já que muitas redes corporativas estão configuradas. Sua melhor aposta pode ser criar um script que consulte whatismyip.org ou tentando descobrir se já existe um.

(Como uma dica, o whatismyip.org é preferível à maioria das outras soluções, já que apenas retorna seu IP como texto simples - sem texto supérfluo, links, imagens ou outro lixo. Seria muito mais fácil de usar em um script personalizado do que a maioria dos outros sites de detecção de IP.)

    
por 21.07.2010 / 08:28
84

Você pode usar uma solicitação de DNS em vez de uma solicitação HTTP para descobrir seu IP público:

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

Ele usa o servidor resolver1.opendns.com dns para resolver o nome do host mágico myip.opendns.com. para seu endereço IP. (Observação: o . na pesquisa impede que os domínios de pesquisa sejam anexados, o que pode gerar resultados incorretos.)

Versão Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com
    
por 27.02.2014 / 15:57
26

pegue sua própria cópia de curl do link e, em seguida, apenas

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

ou use o powershell:

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

(disclaimer: link foi criado por mim)

    
por 21.07.2010 / 10:24
6

Crie um arquivo chamado ip.vbs e copie o seguinte para ele:

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

Executar usando

C:\>cscript ip.vbs

Como nhinkle anotado , é melhor escolher um site que só retorna o IP e não anúncios HTML +, etc., como:

(fonte: anteriormente link )

    
por 12.02.2011 / 02:58
5

Eu fiz esse script em lote para fazer isso alguns meses atrás:

@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

Ele oferece a opção de colocar o endereço IP na área de transferência e define uma variável de ambiente - %PublicIP% .

MÉTODO SIMPLER:

Agora, faço isso:

curl icanhazip.com

ou ...

curl icanhazip.com | clip

... para obter o endereço IP público atual na área de transferência.

Você precisa de cURL .

    
por 12.02.2011 / 05:03
5

Com o Powershell 3.0 (o padrão do Windows 7 é 2.0), você pode usar Invoke-WebRequest

Para o IPv4:

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

Para o IPv6:

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

Isso lhe dará uma variável para trabalhar se você tiver algo específico que queira fazer com ela. Na verdade, estou usando isso para criar um script para fazer upload do IP dinâmico do meu roteador periodicamente, fazer com que outra máquina faça a comunicação em intervalos regulares e atualizar o DNS com o IP mais recente, se ele for alterado para que eu possa acessar meu equipamento de qualquer lugar usando um nome em vez de ter que constantemente perseguir o IP.

E, claro - à medida que os sites mudam ou suas saídas mudam, você vai querer atualizar isso de acordo. :)

    
por 16.02.2014 / 14:34
4

Isso funciona bem, eu uso principalmente com o psexec ao inspecionar as conexões do computador cliente.

nslookup myip.opendns.com resolver1.opendns.com
    
por 23.04.2015 / 10:25
3

Tente isto:
Não precisa de nenhum 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));
}
    
por 05.12.2013 / 16:40
3

Sem programas de terceiros é difícil no Windows, pois o Telnet não é fornecido por padrão, mas, se estiver lá (XP) ou ativado (Windows Vista e superior), simplesmente digite:

telnet curlmyip.com 80

a tela irá piscar, e você só vai pegar um cursor ... Próximo tipo:

GET

Em letras maiúsculas ... você verá os cabeçalhos, seguidos pelo seu ip (e desculpe, eu o confundi, mostrando onde ele estaria!):

Outras respostas aqui obviamente funcionam, mas estou tentando manter a questão sobre algo que pode ser usado em qualquer janela, sem programas de terceiros!

Para o Windows Vista e superior, você pode instalar o telnet facilmente (e com segurança) através do Programs and features , ou use o seguinte comando:

pkgmgr /iu:”TelnetClient”
    
por 15.01.2014 / 01:48
2

Você pode usar o ifcfg.me . ele suporta alguns comandos internos que vêm com o windows por padrão.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
    
por 28.11.2014 / 12:40
1

Eu queria ter uma solução que funcionasse para o Windows sem instalar ferramentas de terceiros. Então peguei a opção powershell , que deve executar um script a cada hora.

Você cria este script com o Notepad

$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"

e salve-o como getIP.ps1 em algum lugar. Você pode chamar esse script diretamente no powershell ou usar o planejador de tarefas como eu fiz. Este é o comando para executar:

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

No agendador de tarefas, você cria uma nova tarefa. No Trigger você usa a configuração diariamente para cada 1 dia e na opção avançada você escolhe a cada hora pela duração de imediatamente . Além disso, marque a opção Executar tarefa assim que possível após o início agendado nas Configurações . Em Ação , cole o código de execução acima.

O código do PowerShell pode ser otimizado, porque eu não sou um guru PowerShell (minha primeira vez com ele). Agora estou testando se o script é chamado a cada hora.

    
por 08.10.2015 / 00:09
1

Aqui está o que eu descobri, é possível usar o comando embutido para obter o endereço IP público, mas você tem acesso à internet

telnet icanhazip.com

ou

telnet myip.gelma.net
    
por 22.03.2015 / 16:25