Polecenie Windows, które zwraca zewnętrzny adres IP

58

Czy istnieje polecenie, za pomocą którego mogę znaleźć mój zewnętrzny adres IP mojego routera lub routera NAT \ DSL itp., Co eliminuje potrzebę odwiedzania whatsmyip.net lub podobnego.

Junaid Saeed
źródło
Linux: askubuntu.com/questions/95910/…
Ciro Santilli 21 改造 中心 法轮功 六四 事件

Odpowiedzi:

14

Nie ma wbudowanego polecenia, aby to zrobić. Część problemu polega na tym, że gdy jesteś podłączony do Internetu za pośrednictwem routera, twój sprzęt sieciowy nie jest bezpośrednio podłączony do Internetu, więc Twojemu systemowi nie jest specjalnie przypisany adres IP. Możliwe, że w niektórych przypadkach masz nawet wiele zewnętrznych adresów IP, jeśli masz za sobą odwrotne proxy, ponieważ skonfigurowanych jest wiele sieci korporacyjnych. Najlepszym rozwiązaniem może być utworzenie skryptu, który będzie sprawdzał whatismyip.org , lub próba znalezienia, czy już istnieje.

(Wskazówka: whatismyip.org jest lepszy od większości innych rozwiązań, ponieważ zwraca adres IP jako zwykły tekst - bez zbędnego tekstu, linków, obrazów lub innych śmieci. Byłoby o wiele łatwiejsze w użyciu w skrypcie niestandardowym niż większość inne witryny wykrywające adresy IP).

nhinkle
źródło
6
Niestety zmienili whatismyip.org; adres IP jest teraz zwracany jako obraz , co czyni go praktycznie bezużytecznym dla skryptów. Witryna „icanhazip.com” wymienione poniżej robi pracę.
onnodb
Yandex działa, sprawdź skrypt opublikowany poniżej.
Filipe YaBa Polido,
Działa natywne polecenie z dołu superuser.com/a/722397/216374
PsychoData
107

Możesz użyć żądania DNS zamiast żądania HTTP, aby znaleźć swój publiczny adres IP:

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

Używa resolver1.opendns.comserwera dns do rozpoznania magicznej myip.opendns.com.nazwy hosta na Twój adres IP. (Uwaga: końcowe .wyszukiwanie zapobiega dołączaniu domen wyszukiwania, co może dawać nieprawidłowe wyniki).

Wersja uniksowa:

$ dig +short myip.opendns.com @resolver1.opendns.com
jfs
źródło
1
Działa jak urok.
BK
genialny, działa również bez instalowania czegokolwiek.
ericosg,
Nie działało już dla mnie w listopadzie 2017 r. W systemie Windows 10. Odpowiedź programu PowerShell autorstwa Bradleya Forneya działa.
Jason
Nadal pracował dla mnie (Windows 10, grudzień 2017). Bardzo sprytne @jfs, czy OpenDNS ma to gdzieś udokumentowane, jak to odkryłeś?
Alex KeySmith,
4
To powinna być zaakceptowana odpowiedź, ponieważ zapewnia rzeczywiste polecenie i działa. Przyjęta odpowiedź mówi, że nie ma polecenia (co okazało się fałszywe), i sugeruje użycie skryptu, nie podając jednak żadnego dalszego kierunku.
CyberClaw
30

pobierz własną kopię curlz http://curl.haxx.se/download.html, a następnie po prostu

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

lub użyj PowerShell:

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

(zastrzeżenie: http://myexternalip.com został stworzony przeze mnie)

akira
źródło
To zapewnia tylko adres IPv6. Czy istnieje sposób na uzyskanie adresu IPv4?
tim11g
Czytałem dalej i znalazłem poniższe przykłady IPv4 / IPv6 dla programu PowerShell. Możliwe jest uzyskanie IPv4 z CURL, takim jak „C:> curl” myip.dnsomatic.com
tim11g
7

Działa to dobrze, używam go głównie z psexec podczas sprawdzania połączeń komputera klienckiego.

nslookup myip.opendns.com resolver1.opendns.com
Antti Lagus
źródło
6

Utwórz plik o nazwie ip.vbsi skopiuj do niego następujące elementy:

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

Wykonaj używając

C:\>cscript ip.vbs

Jak zauważył nhinkle , najlepiej wybrać witrynę, która zwraca tylko adres IP, a nie reklamy HTML + itp., Takie jak:

(źródło: poprzednio http://externip.com/about )

hiperslug
źródło
5

Zrobiłem ten skrypt wsadowy, aby to zrobić kilka miesięcy temu:

@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

Daje ci możliwość umieszczenia adresu IP w schowku i ustawia zmienną środowiskową - %PublicIP%.


PROSTA METODA:

Teraz po prostu to robię:

curl icanhazip.com

lub...

curl icanhazip.com | clip

... aby pobrać bieżący publiczny adres IP do schowka.

Potrzebujesz cURL .

paradroid
źródło
1
Skrypt z paradroida działał dobrze, ale whatsmyip przeniósł stronę internetową na automation.whatismyip.com/n09230945.asp Jeśli zmienisz to, działa idealnie.
5

Z Powershell 3.0 (Windows 7 domyślnie jest 2.0) możesz używać Invoke-WebRequest

W przypadku IPv4:

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

W przypadku IPv6:

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

To da ci zmienną do pracy, jeśli masz coś konkretnego, co chcesz z tym zrobić. Używam tego do zbudowania skryptu, aby okresowo przesyłać dynamiczny adres IP routera, regularnie komunikować się z innym urządzeniem podczas regularnych testów, a następnie aktualizować DNS o najnowszy adres IP, jeśli został zmieniony, dzięki czemu mogę uzyskać dostęp do mojego sprzętu z dowolnego miejsca przez używając nazwy zamiast ciągłego ścigania adresu IP.

I oczywiście - gdy strony się zmieniają lub zmieniają się ich wyniki, należy to odpowiednio zaktualizować. :)

Bradley Forney
źródło
To podejście zadziałało dla mnie świetnie w systemie Windows 10. Potrzebowałem polecenia jednowierszowego, więc uruchomiłem powyższe w cudzysłowie powershell.exe -noprofile -command "". Oddziel linię podział średnikiem ...
Jason
1
Oneliner? Po prostu biegnij(Invoke-WebRequest -URI http://myip.dnsomatic.com).Content
merosss
3

Spróbuj tego:
nie wymaga instalowania żadnego zewnętrznego oprogramowania.

@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
źródło
3

Bez programów innych firm jest trudny w systemie Windows, ponieważ Telnet nie jest domyślnie dostarczany, ale jeśli jest dostępny (XP) lub włączony (Windows Vista i nowszy), po prostu wpisz:

telnet curlmyip.com 80

ekran zacznie migać, a otrzymasz kursor ... Następny typ:

GET

Wielkimi literami ... zobaczysz nagłówki, a następnie swój ip (i przepraszam, że go zamazałem, pokazując tylko, gdzie to będzie!):

wprowadź opis zdjęcia tutaj

Inne odpowiedzi tutaj oczywiście działają, ale staram się zadać pytanie o coś, co można wykorzystać w dowolnym oknie, bez programów innych firm!

W systemie Windows Vista i nowszym można łatwo (i bezpiecznie) zainstalować telnet za pomocą Programs and featureslub użyć następującego polecenia:

pkgmgr /iu:”TelnetClient”
William Hilsum
źródło
To (i większość odpowiedzi!) Zakłada, że ​​witryna źródłowa dokładnie odbiera adres IP - niektóre typy serwerów proxy to psują. Z tego powodu skrobałem mój adres IP z routera. Co ciekawe, w takich przypadkach strona internetowa korzystająca z niestandardowego portu może działać dobrze.
Journeyman Geek
Nie działa z curlmyip.com, ale przetestowane z checkip.dyndns.org.
Sopalajo de Arrierez,
2

Możesz użyć ifcfg.me . obsługuje niektóre wewnętrzne polecenia domyślnie dostarczane z systemem Windows.

curl ifcfg.me
nslookup . ifcfg.me
telnet ifcfg.me
ftp ifcfg.me
finger @ifcfg.me
Eun
źródło
1

Chciałem mieć rozwiązanie, które działa na Windows bez instalowania narzędzi innych firm. Więc wybrałem opcję PowerShell , która powinna uruchamiać skrypt co godzinę.

Ten skrypt tworzysz za pomocą Notatnika

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

i zapisz go getIP.ps1gdzieś. Możesz wywołać ten skrypt albo bezpośrednio w PowerShell, albo użyć narzędzia do planowania zadań, tak jak ja. To jest polecenie do wykonania:

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

W harmonogramie zadań tworzysz nowe zadanie. W Trigger używasz tego ustawienia codziennie dla każdego 1 dnia, aw opcji zaawansowanej wybierasz co godzinę na natychmiastowy czas . Sprawdź także Uruchom zadanie tak szybko, jak to możliwe po nieudanym zaplanowanym uruchomieniu w Ustawieniach . W obszarze Akcja wklej powyższy kod wykonania.

Kod PowerShell można zoptymalizować, ponieważ nie jestem guru PowerShell (pierwszy raz z nim). Teraz sprawdzam, czy skrypt jest wywoływany co godzinę.

testowanie
źródło
1

Oto, co wymyśliłem, można użyć wbudowanego polecenia, aby uzyskać publiczny adres IP, ale masz dostęp do Internetu

telnet icanhazip.com

lub

telnet myip.gelma.net
Sam
źródło
Dobry chwyt! Chociaż icanhazip.comdla mnie nie zadziała, a ten drugi nie robi poprawnie IPv6. :)
Daniel B
0

ipchicken.com zwróci twój pozorny adres IP w formacie tekstowym, jeśli możesz parsować zwracany kod HTML, który wyodrębniasz zewnętrzny adres IP routera. Alternatywnie możesz zainstalować jednego z tych dynamicznych agentów DNS, który aktualizuje pozorny zewnętrzny adres IP do nazwy FQDN, a następnie po prostu zrób przeglądanie swojej nazwy FQDN, aby zobaczyć swój bieżący numer IP. Kiedyś były darmowe, takie jak DynDNS, ale większość z nich wymaga teraz płatnego konta subskrypcyjnego.

anthonymaw
źródło