Comando di Windows che restituisce un IP esterno


Risposte:


14

Non esiste un comando integrato per farlo. Parte del problema è che quando si è connessi a Internet tramite un router, l'hardware di rete non è direttamente collegato a Internet, quindi al sistema non è stato assegnato un IP specifico. È possibile che tu abbia anche più IP esterni in alcuni casi se sei dietro un proxy inverso, poiché molte reti aziendali sono configurate. La tua scommessa migliore potrebbe essere quella di creare uno script che richieda whatismyip.org o che cerchi di trovarne uno esistente.

(Come suggerimento, whatismyip.org è preferibile alla maggior parte delle altre soluzioni, poiché restituisce semplicemente il tuo IP come testo normale - nessun testo superfluo, collegamenti, immagini o altri rifiuti. Sarebbe molto più facile da usare in uno script personalizzato rispetto alla maggior parte di gli altri siti di rilevamento IP.)


6
Hanno cambiato whatismyip.org, sfortunatamente; l'indirizzo IP viene ora restituito come immagine , rendendolo praticamente inutile per gli script. Il sito web "icanhazip.com" indicato di seguito fa il lavoro.
onnodb,

Yandex funziona, controlla lo script pubblicato di seguito.
Filipe YaBa Polido,

Comando nativo funzionante dal basso superuser.com/a/722397/216374
PsychoData

107

È possibile utilizzare una richiesta DNS anziché la richiesta HTTP per scoprire il tuo IP pubblico:

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

Utilizza il resolver1.opendns.comserver DNS per risolvere il myip.opendns.com.nome host magico nel tuo indirizzo IP. (Nota: il trailing .sulla ricerca impedisce l'aggiunta di domini di ricerca, il che può produrre risultati errati.)

Versione Unix:

$ dig +short myip.opendns.com @resolver1.opendns.com

1
Ha funzionato come un fascino.
BK,

geniale, funziona anche senza installare nulla.
ericosg,

Non ha funzionato più per me nel novembre 2017, su Windows 10. La risposta di PowerShell da Bradley Forney funziona.
Jason,

Ha funzionato per me ancora (Windows 10, dic 2017). Molto intelligente @jfs, OpenDNS lo ha documentato da qualche parte come lo hai scoperto?
Alex KeySmith il

4
Questa dovrebbe essere la risposta accettata, poiché fornisce un comando effettivo e funziona. La risposta accettata dice che non c'è alcun comando (che è stato dimostrato falso) e suggerisce di usare uno script, senza dare realmente ulteriori indicazioni.
CyberClaw

30

prendi la tua copia di curlda http://curl.haxx.se/download.html e poi solo

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

o usa powershell:

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

(disclaimer: http://myexternalip.com è stato creato da me)


Ciò fornisce solo un indirizzo IPv6. C'è un modo per ottenere l'indirizzo IPv4?
tim11g,

Ho continuato a leggere e ho trovato gli esempi IPv4 / IPv6 di seguito per Powershell. È possibile ottenere IPv4 con CURL come questo "C:> curl" myip.dnsomatic.com "
tim11g

7

Funziona bene, lo uso principalmente con psexec durante l'ispezione delle connessioni al computer client.

nslookup myip.opendns.com resolver1.opendns.com

6

Creare un file denominato ip.vbse copiarvi quanto segue:

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

Eseguire utilizzando

C:\>cscript ip.vbs

Come notato da nhinkle , è meglio scegliere un sito che restituisce solo IP e non HTML + annunci, ecc. Come:

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


5

Ho realizzato questo script batch per farlo alcuni mesi fa:

@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

Ti dà la possibilità di inserire l'indirizzo IP negli Appunti e imposta una variabile ambientale - %PublicIP%.


METODO PIÙ SEMPLICE:

Ora, invece, faccio solo questo:

curl icanhazip.com

o...

curl icanhazip.com | clip

... per inserire l'attuale indirizzo IP pubblico negli Appunti.

Hai bisogno di curl .


1
Lo script di paradroid ha funzionato bene, ma whatsmyip ha spostato la pagina Web in automation.whatismyip.com/n09230945.asp Se cambi a questo, funziona perfettamente.

5

Con Powershell 3.0 (Windows 7 predefinito è 2.0) è possibile utilizzare Invoke-WebRequest

Per IPv4:

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

Per IPv6:

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

Questo ti darà una variabile con cui lavorare se hai qualcosa di specifico che vuoi fare con esso. In realtà lo sto usando per creare uno script per caricare periodicamente l'IP dinamico del mio router, fare in modo che un'altra macchina collauda la comunicazione a intervalli regolari e quindi aggiorni il DNS con l'ultimo IP se è cambiato, così posso accedere ai miei dispositivi da qualsiasi luogo usando un nome invece di dover costantemente inseguire l'IP.

E ovviamente - man mano che i siti cambiano o i loro output cambiano, ti consigliamo di aggiornarlo di conseguenza. :)


Questo approccio ha funzionato perfettamente per me su Windows 10. Avevo bisogno di un comando a una riga, quindi ho eseguito quanto sopra tra virgolette dopo powershell.exe -noprofile -command "". Separa l'interruzione di linea con un punto e virgola ...
Jason

1
Oneliner? Basta correre(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss

3

Prova questo:
non necessita di alcun tipo di software esterno installato.

@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));
}

3

Senza programmi di terze parti è difficile su Windows poiché Telnet non è fornito per impostazione predefinita, ma, se è presente (XP) o acceso (Windows Vista e versioni successive), è sufficiente digitare:

telnet curlmyip.com 80

lo schermo lampeggerà e otterrai solo un cursore ... Tipo successivo:

GET

In maiuscolo ... poi vedrai le intestazioni, seguite dal tuo ip (e scusa se l'ho sfocato, mostrando solo dove sarebbe!):

inserisci qui la descrizione dell'immagine

Altre risposte qui ovviamente funzionano, ma sto cercando di rispondere alla domanda su qualcosa che può essere utilizzato su qualsiasi finestra, senza programmi di terze parti!

Per Windows Vista e versioni successive, è possibile installare Telnet facilmente (e in modo sicuro) tramite Programs and featureso utilizzare il comando seguente:

pkgmgr /iu:”TelnetClient”

Questo (e la maggior parte delle risposte!) Presuppone che il sito Web di origine raccolga il tuo indirizzo IP in modo accurato - alcuni tipi di proxy lo rovinano. Stavo cancellando il mio indirizzo IP dal mio router a causa di questo. È interessante notare che, in questi casi, un sito Web che utilizza una porta non standard può funzionare correttamente.
Journeyman Geek

Non funziona curlmyip.com, ma testato con checkip.dyndns.org.
Sopalajo de Arrierez,

2

Puoi usare ifcfg.me . supporta alcuni comandi interni forniti con Windows per impostazione predefinita.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me

1

Volevo avere una soluzione che funzioni per Windows senza installare strumenti di terze parti. Quindi ho preso l' opzione PowerShell , che dovrebbe eseguire uno script ogni ora.

Si crea questo script con Blocco note

$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 salvalo come getIP.ps1da qualche parte. È possibile chiamare questo script direttamente in PowerShell o utilizzare la pianificazione attività come ho fatto io. Questo è il comando per l'esecuzione:

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

Nell'utilità di pianificazione si crea una nuova attività. Su Trigger utilizzi le impostazioni quotidianamente per ogni 1 giorno e sotto l'opzione avanzata scegli ogni ora per la durata di immediatamente . Controlla anche Esegui attività il prima possibile dopo che un avvio programmato è stato perso nelle Impostazioni . In Azione si incolla il codice di esecuzione sopra riportato.

Il codice PowerShell può essere ottimizzato, perché non sono un guru PowerShell (la mia prima volta con esso). Ora sto testando se lo script viene chiamato ogni ora.


1

Ecco cosa ho capito, è possibile utilizzare il comando integrato per ottenere l'indirizzo IP pubblico ma si ha accesso a Internet

telnet icanhazip.com

o

telnet myip.gelma.net

Buona pesca! Anche se icanhazip.comnon funziona per me e l'altro non fa correttamente IPv6. :)
Daniel B,

0

ipchicken.com restituirà il tuo indirizzo IP apparente in formato testo se riesci ad analizzare l'HTML di ritorno estraendo l'IP esterno del router. In alternativa, puoi installare uno di quegli agenti DNS dinamici che aggiorna il tuo IP esterno apparente a un nome di dominio completo e quindi fai semplicemente nslookup sul tuo nome di dominio completo per vedere il tuo attuale numero IP. C'erano quelli gratuiti come DynDNS, ma la maggior parte di essi ora richiede un account con abbonamento a pagamento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.