Comando do Windows que retorna IP externo

58

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

Junaid Saeed
fonte
Linux: askubuntu.com/questions/95910/…
Ciro Santilli escreveu:

Respostas:

14

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

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

nhinkle
fonte
6
Eles mudaram whatismyip.org, infelizmente; o endereço IP agora é retornado como uma imagem , tornando-o praticamente inútil para scripts. O site "icanhazip.com" mencionados abaixo faz o trabalho.
Onnodb 29/11/12
Yandex está funcionando, verifique o script postado abaixo.
Filipe YaBa Polido
Trabalhando comando nativo a partir de baixo superuser.com/a/722397/216374
PsychoData
107

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

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

Ele usa o resolver1.opendns.comservidor DNS para resolver o myip.opendns.com.nome do host mágico para o seu endereço IP. (Observação: o rastreamento .da 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
jfs
fonte
11
Funcionou como um encanto.
BK
brilhante, funciona sem instalar nada também.
ericosg 7/09/2015
Não funcionou mais para mim em novembro de 2017, no Windows 10. A resposta do PowerShell de Bradley Forney funciona.
Jason
Ainda funcionou para mim (Windows 10, dez 2017). @Jfs muito inteligentes, o OpenDNS documentou isso em algum lugar como você o descobriu?
precisa saber é o seguinte
4
Essa deve ser a resposta aceita, pois fornece um comando real e funciona. A resposta aceita diz que não há comando (o que se provou falso) e sugere o uso de um script, sem realmente dar mais orientações.
23618 CyberClaw
30

pegue sua própria cópia curlem http://curl.haxx.se/download.html e depois apenas

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

ou use o PowerShell:

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

(aviso: http://myexternalip.com foi criado por mim)

akira
fonte
Isso fornece apenas um endereço IPv6. Existe uma maneira de obter o endereço IPv4?
tim11g
Continuei lendo e encontrei os exemplos de IPv4 / IPv6 abaixo para o Powershell. É possível obter o IPv4 com CURL como este "C:> curl" myip.dnsomatic.com "
tim11g
7

Isso funciona muito bem, eu o uso principalmente com psexec ao inspecionar conexões de computadores clientes.

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

Crie um arquivo nomeado ip.vbse 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 observou , é melhor escolher um site que retorne apenas o IP e não anúncios HTML + etc., como:

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

hyperslug
fonte
5

Eu fiz esse script em lote para fazer isso há alguns 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

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


MÉTODO MAIS SIMPLES:

Agora, basta fazer 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 .

paradroid
fonte
11
O script da paradroid funcionou bem, mas o whatsmyip mudou a página da web para automation.whatismyip.com/n09230945.asp Se você mudar para isso, ele funcionará perfeitamente.
5

Com o Powershell 3.0 (o padrão do Windows 7 é 2.0), você pode 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

Isso fornecerá uma variável para trabalhar se você tiver algo específico que deseja fazer com ela. Na verdade, estou usando isso para criar um script para fazer upload periódico do IP dinâmico do meu roteador, ter outra máquina testando a comunicação em intervalos regulares e, em seguida, atualizar o DNS com o IP mais recente, se ele tiver sido alterado, para que eu possa acessar meu equipamento de qualquer lugar usando um nome em vez de precisar procurar constantemente o IP.

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

Bradley Forney
fonte
Essa abordagem funcionou muito bem para mim no Windows 10. Eu precisava de um comando de uma linha, então executei o acima entre aspas powershell.exe -noprofile -command "". Separe a linha-break com um ponto e vírgula ...
Jason
11
Oneliner? Apenas execute(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss
3

Tente o seguinte:
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));
}
Filipe YaBa Polido
fonte
3

Sem programas de terceiros, o Telnet não é fornecido por padrão, mas, se estiver lá (XP) ou ativado (Windows Vista e superior), basta digitar:

telnet curlmyip.com 80

a tela piscará e você receberá um cursor ... Próximo tipo:

GET

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

insira a descrição da imagem aqui

Outras respostas aqui obviamente funcionam, mas estou tentando manter a pergunta 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) Programs and featuresou usar o seguinte comando:

pkgmgr /iu:”TelnetClient”
William Hilsum
fonte
Isso (e a maioria das respostas!) Pressupõe que o site de origem escolhe seu endereço IP com precisão - alguns tipos de proxies atrapalham isso. Eu estava raspando meu endereço IP do meu roteador por causa disso. Curiosamente, nesses casos, um site que usa uma porta não padrão pode funcionar bem.
Journeyman Geek
Não está trabalhando com curlmyip.com, mas testado trabalhando com checkip.dyndns.org.
Sopalajo de Arrierez
2

Você pode usar o ifcfg.me . Ele suporta alguns comandos internos que acompanham o Windows por padrão.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
Eu n
fonte
1

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

Você cria esse script com o bloco 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"

e salve como em getIP.ps1algum 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 a cada 1 dia e, na opção avançada, escolhe a cada hora pela duração imediata . Verifique também Executar tarefa o mais rápido possível, depois que um início agendado for perdido nas Configurações . Em Ação, cole o código de execução acima.

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

Testando
fonte
1

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

telnet icanhazip.com

ou

telnet myip.gelma.net
Sam
fonte
Boa pegada! Embora icanhazip.comnão funcione para mim e o outro não faça o IPv6 corretamente. :)
Daniel B
0

ipchicken.com retornará seu endereço IP aparente em formato de texto se você puder analisar o HTML de retorno extraído do IP externo do roteador. Como alternativa, você pode instalar um desses agentes DNS dinâmicos que atualiza seu IP externo aparente para um FQDN e, em seguida, basta pesquisar no FQDN para ver seu número de IP atual. Costumava haver grátis como o DynDNS, mas a maioria deles agora exige uma conta de assinatura paga.

anthonymaw
fonte