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


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).


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

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)


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

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 )


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 .


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ć. :)


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

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”

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

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ę.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.