Czy używasz Linuksa, MacOSX, FreeBSD itp.? Wyjście „ifconfig” jest różne dla tych różnych systemów operacyjnych, a komenda „ip” nie istnieje w MacOSX. Czy szukasz adresu IP swojego komputera (będziesz potrzebować skryptu powłoki, aby przeanalizować ifconfig lub coś takiego), czy routera (poniższe strony mogą działać)?
Stefan Lasiewski
Odpowiedzi:
49
curl ifconfig.me
curl ifconfig.me/ip (tylko dla ip)
curl ifconfig.me/all (więcej informacji wymaga czasu)
To po prostu fajne. Dla każdej łatwiejszej do zapamiętania wersji możesz ją zainstalować dig @resolver1.opendns.com myip.opendns.com. Lub w systemie Windows: nslookup myip.opendns.com resolver1.opendns.com.
Michael Kropat,
2
Co działało dla mnie najlepiej: dig @208.67.222.220 myip.opendns.com +shortaby uzyskać bezpośredni adres IP bez konieczności przejścia całej odpowiedzi.
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Zauważ, że powyższe działa tylko w przypadku IPv4 obecnie (wydaje się, że żaden z tych resolverów nie ma obecnie IPv6, ale jeśli pominiesz -4i jawnie -t a, ryzykujesz jego awarią w przyszłości (z wyjątkiem Google txt, który może faktycznie działać dla IPv6 jeden dzień, jeśli Google odpowiednio go włącza)).
Zauważ, że myip.opendns.comjest to możliwe do rozwiązania tylko poprzez resolver1.opendns.com, a nie za pomocą auth1.opendns.com- wydaje się, że dokonują przejęcia DNS i man-in-the-środkowej części własnej nazwy domeny! Dlatego nie można go użyć do znalezienia adresu IP losowego resolwera, ponieważ resolver1.opendns.comnie jest on wiarygodny myip.opendns.com.
Pamiętaj, że o-o.myaddr.l.google.comwygląda to na najbardziej elastyczne i przyszłościowe podejście; jest nawet dobry do testowania, czy Twój program rozpoznawania nazw DNS obsługuje eksperymentalne rozszerzenie EDNS0 dla podsieci klienta (które obsługuje bardzo niewiele programów tłumaczących):
% dig @8.8.8.8 -t txt o-o.myaddr.l.google.com +noall +answer +stats | tail -8
;; global options: printcmd
o-o.myaddr.l.google.com. 60 IN TXT "74.125.189.16"
o-o.myaddr.l.google.com. 60 IN TXT "edns0-client-subnet 88.198.54.0/24"
;; Query time: 13 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Dec 8 20:38:46 2013
;; MSG SIZE rcvd: 114
Obecnie metoda uzyskiwania rekordów TXT od Google obsługuje zarówno IPv4, jak i IPv6, więc powinieneś określić, -4czy -6potrzebujesz konkretnej wersji IP.
Martin
12
Bardzo prostą odpowiedzią, jeśli masz dostęp do Internetu, jest:
curl icanhazip.com
Pamiętaj, że zaufanie źródłom stron trzecich do twojego adresu IP może być problematyczne, szczególnie jeśli to, co robisz z tymi danymi, ma szczególne znaczenie.
Bardziej godnym zaufania sposobem jest wybranie znanego, godnego zaufania serwera DNS (najlepiej z uruchomionym DNSSEC) i zapytanie go o nazwę hosta skrzynki, pod warunkiem, że twój serwer DNS zawiera takie wpisy;
masz bezpośrednie połączenie z Internetem (brak NAT / proxy / VPN itp.)
następnie możesz po prostu przeanalizować dane wyjściowe z ifconfig dla adresów IP interfejsów (część „inet addr:”), aby uzyskać listę adresów IP wszystkich interfejsów. Jeden adres IP, który nie znajduje się w zakresie prywatnym (patrz http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ), to twój publiczny adres IP.
Tę samą listę można również uzyskać poprzez
ip addr show
co może być łatwiejsze do przeanalizowania.
Jeśli nie masz bezpośredniego połączenia z Internetem (NAT itp.), Nie możesz znaleźć swojego publicznego adresu IP bez pomocy zewnętrznej (ponieważ komputer go nie zna). Musisz to zrobić tak jak w innych odpowiedziach.
Przyjąłem nieco inne podejście, używając protokołu STUN, który został zaprojektowany dla NAT Traversal. Jeśli używasz Ubuntu, możesz po prostu zainstalować pakiet „stun”, wpisując:
sudo apt-get install stun
Pakiet instaluje serwer STUN, który prawdopodobnie nie będzie ci potrzebny, ale zawiera również klienta testowego STUN, którego użyłem do rozwiązania tego problemu. Teraz możesz odzyskać swój publiczny adres IP za pomocą jednego (nie tak prostego) polecenia:
Teraz działa: ogłuszenie kontaktuje się z publicznym serwerem STUN „stunserver.org” i otrzymuje odpowiedź z publicznym adresem IP, resztą polecenia jest tylko odfiltrowanie adresu IP z wyjścia.
Obsługuje zwykły tekst z rodzajem tekstu / HTML ...
bortzmeyer
czy nie wyświetla twojego adresu IP w przeglądarce?
2
Ale z niewłaściwym typem.
bortzmeyer
@bortzmeyer Uh, jaki jest „właściwy typ”? text/htmljest w porządku dla tego, co zwraca ten pseudo-API - z pewnością nie jest to XML ani JSON. text/plainmoże, ale jest całkowicie użyteczny jako text/html.
ceejayoz,
3
+1 dla strony, która nie wymaga grepowania. Równieżwget -q -O - http://wgetip.com/
Google z jakiegoś dziwnego powodu pokazuje tylko twój adres IP na podstawie tego, który User-Agentciąg znaków jest dostarczany do strony. W przeglądarce Firefox działa; ale SeaMonkey z wyłączonym ciągiem „Firefox” (poprzez „general.useragent.compatMode.firefox” ustawioną na false), nagle nie robi tego. Nie mam pojęcia, dlaczego Google wyraźnie włącza takie rzeczy tylko w Firefoksie zamiast w dowolnym Gecko, ponieważ istnieje wiele innych przeglądarek stacjonarnych opartych na Gecko, które są równie kompatybilne, w tym SeaMonkey.
W ten sposób możesz sprawić, że będzie działał w twojej sieci wewnętrznej, jeśli jakiś nat lub proxy jest zaangażowany w komunikację i chcesz wiedzieć z jakiego adresu IP się pojawiasz.
Aby uniknąć polegania na źródłach zewnętrznych, używam metody expect do telnet do routera i uzyskania adresu IP jego publicznego interfejsu. Oto przykładowy skrypt:
Jeśli chcesz znaleźć zewnętrzny adres IP na routerze, albo zapytaj sam router o jego adres wan, albo poproś kogoś z zewnątrz, aby go dla ciebie znalazł.
ręcznie możesz przeglądać dowolne z powyższych witryn, które zwracają ip przychodzącego żądania.
możesz użyć tylko powłoki, aby sprawdzić swój zewnętrzny adres IP, również korzystając z zewnętrznych dostawców
#!/bin/bash
TCP_HOST="checkmyip.com"
TCP_PORT=80
exec 5<>/dev/tcp/"${TCP_HOST}"/"${TCP_PORT}"
echo -e "GET / HTTP/1.0\nHOST:${TCP_HOST}\n" >&5
while read -r line
do
case "$line" in
*"Your local IP address is"* )
line="${line#*Your local IP address is }"
line=${line%%</p>*}
echo "Your ip is: $line"
exec >&5-
exit
;;
esac
done <&5
Oto kolejna alternatywa, która zależy od hostów, których firma rozwiązuje problem zarządzania dynamicznym adresem IP, a nie od stron „publicznych”, które mogą zniknąć lub zmienić format.
1) Zarejestruj swój serwer w jednej z wielu bezpłatnych dynamicznych usług DNS (np. No-ip.com). Otrzymasz wpis DNS, np. Xxx.no-ip.org.
2) Zainstaluj narzędzie do dynamicznej aktualizacji usługi (zgłasza zmiany adresu IP usługi).
Aby uzyskać adres IP w skrypcie, po prostu wykonaj:
$external_ip = `dig +short xxx.no-ip.org`
Idealny do użycia w zadaniu cron, aby sprawdzić, czy zmienił się dynamiczny adres IP i niektóre wpisy konfiguracji wymagają zmiany.
W systemie OS X dostępne są dwa proste rozwiązania pozwalające uzyskać zarówno prywatny, jak i publiczny adres IP (z kodem bonusowym, jeśli używasz paska LaunchBar).
Prywatne IP
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
Skrypt LaunchBar
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
Odpowiedzi:
curl ifconfig.me
curl ifconfig.me/ip
(tylko dla ip)curl ifconfig.me/all
(więcej informacji wymaga czasu)Więcej poleceń można znaleźć na stronie: http://ifconfig.me/#cli_wrap
źródło
curl http://checkip.amazonaws.com/
Można zażądać
myip.opendns.com
. z OpenDNS.dig @208.67.222.220 myip.opendns.com
źródło
dig @resolver1.opendns.com myip.opendns.com
. Lub w systemie Windows:nslookup myip.opendns.com resolver1.opendns.com
.dig @208.67.222.220 myip.opendns.com +short
aby uzyskać bezpośredni adres IP bez konieczności przejścia całej odpowiedzi.dig @ns1.google.com -t txt o-o.myaddr.l.google.com +short
dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short
dig -4 @resolver1.opendns.com -t a myip.opendns.com +short
Zauważ, że powyższe działa tylko w przypadku IPv4 obecnie (wydaje się, że żaden z tych resolverów nie ma obecnie IPv6, ale jeśli pominiesz
-4
i jawnie-t a
, ryzykujesz jego awarią w przyszłości (z wyjątkiem Googletxt
, który może faktycznie działać dla IPv6 jeden dzień, jeśli Google odpowiednio go włącza)).Zauważ, że
myip.opendns.com
jest to możliwe do rozwiązania tylko poprzezresolver1.opendns.com
, a nie za pomocąauth1.opendns.com
- wydaje się, że dokonują przejęcia DNS i man-in-the-środkowej części własnej nazwy domeny! Dlatego nie można go użyć do znalezienia adresu IP losowego resolwera, ponieważresolver1.opendns.com
nie jest on wiarygodnymyip.opendns.com
.Pamiętaj, że
o-o.myaddr.l.google.com
wygląda to na najbardziej elastyczne i przyszłościowe podejście; jest nawet dobry do testowania, czy Twój program rozpoznawania nazw DNS obsługuje eksperymentalne rozszerzenie EDNS0 dla podsieci klienta (które obsługuje bardzo niewiele programów tłumaczących):źródło
dig +short AAAA myip.opendns.com @2620:0:ccc::2
.-4
czy-6
potrzebujesz konkretnej wersji IP.Bardzo prostą odpowiedzią, jeśli masz dostęp do Internetu, jest:
Pamiętaj, że zaufanie źródłom stron trzecich do twojego adresu IP może być problematyczne, szczególnie jeśli to, co robisz z tymi danymi, ma szczególne znaczenie.
Bardziej godnym zaufania sposobem jest wybranie znanego, godnego zaufania serwera DNS (najlepiej z uruchomionym DNSSEC) i zapytanie go o nazwę hosta skrzynki, pod warunkiem, że twój serwer DNS zawiera takie wpisy;
źródło
W tym celu napisałem prosty i szybki serwis internetowy.
Możesz poprosić o IPv4:
Lub IPv6:
Interfejs API jest udokumentowany na stronie http://api.ident.me/
źródło
W jedną stronę: http://www.whatismyip.com/
źródło
Jeśli
następnie możesz po prostu przeanalizować dane wyjściowe z ifconfig dla adresów IP interfejsów (część „inet addr:”), aby uzyskać listę adresów IP wszystkich interfejsów. Jeden adres IP, który nie znajduje się w zakresie prywatnym (patrz http://en.wikipedia.org/wiki/IP_address#IPv4_private_addresses ), to twój publiczny adres IP.
Tę samą listę można również uzyskać poprzez
co może być łatwiejsze do przeanalizowania.
Jeśli nie masz bezpośredniego połączenia z Internetem (NAT itp.), Nie możesz znaleźć swojego publicznego adresu IP bez pomocy zewnętrznej (ponieważ komputer go nie zna). Musisz to zrobić tak jak w innych odpowiedziach.
źródło
Przyjąłem nieco inne podejście, używając protokołu STUN, który został zaprojektowany dla NAT Traversal. Jeśli używasz Ubuntu, możesz po prostu zainstalować pakiet „stun”, wpisując:
Pakiet instaluje serwer STUN, który prawdopodobnie nie będzie ci potrzebny, ale zawiera również klienta testowego STUN, którego użyłem do rozwiązania tego problemu. Teraz możesz odzyskać swój publiczny adres IP za pomocą jednego (nie tak prostego) polecenia:
Teraz działa: ogłuszenie kontaktuje się z publicznym serwerem STUN „stunserver.org” i otrzymuje odpowiedź z publicznym adresem IP, resztą polecenia jest tylko odfiltrowanie adresu IP z wyjścia.
źródło
Jednym ze sposobów jest przesłanie żądania do strony pod adresem
http://www.biranchi.com/ip.php
zwraca adres IP twojego systemu
źródło
text/html
jest w porządku dla tego, co zwraca ten pseudo-API - z pewnością nie jest to XML ani JSON.text/plain
może, ale jest całkowicie użyteczny jakotext/html
.wget -q -O - http://wgetip.com/
Google wyświetla teraz twój publiczny adres IP: http://www.google.com/search?q=ip
źródło
User-Agent
ciąg znaków jest dostarczany do strony. W przeglądarce Firefox działa; ale SeaMonkey z wyłączonym ciągiem „Firefox” (poprzez „general.useragent.compatMode.firefox” ustawioną na false), nagle nie robi tego. Nie mam pojęcia, dlaczego Google wyraźnie włącza takie rzeczy tylko w Firefoksie zamiast w dowolnym Gecko, ponieważ istnieje wiele innych przeglądarek stacjonarnych opartych na Gecko, które są równie kompatybilne, w tym SeaMonkey.Okej ... Wiem, że jest to DROGA po fakcie i prawdopodobnie nawet nie warto pisać, ale oto moje działające rozwiązanie.
Ładne i proste.
źródło
hostname -I
(duże „i”).Najprostszym sposobem jest użycie http://ifconfig.me/ , zgodnie z sugestią.
Na tej stronie dowiesz się, jakiego polecenia użyć, aby uzyskać informacje, które chcesz pobrać.
Dla adresu IP:
lubW przypadku publicznej nazwy hosta:
Wszystkie informacje w pliku XML:
itp ... po prostu sprawdź http://ifconfig.me
źródło
Często to robię i na wielu urządzeniach, więc stworzyłem dwie własne usługi na serwerze:
plik php w katalogu głównym serwera WWW:
Użycie na powłoce:
współpracuje również z ipv6:
Z netcat:
Na routerze Cisco:
szybki hack z niestandardowym serwerem telnet: xinetd spawn / usr / bin / env:
a następnie telnet do niego:
działa tak samo z routerem:
W ten sposób możesz sprawić, że będzie działał w twojej sieci wewnętrznej, jeśli jakiś nat lub proxy jest zaangażowany w komunikację i chcesz wiedzieć z jakiego adresu IP się pojawiasz.
Nie wymaga usług stron trzecich.
źródło
Aby uniknąć polegania na źródłach zewnętrznych, używam metody expect do telnet do routera i uzyskania adresu IP jego publicznego interfejsu. Oto przykładowy skrypt:
Następnie wykonuję powyższy skrypt w taki sposób, aby uzyskać publiczny adres IP:
Oczywiście opiera się to na założeniu, że mam dostęp administratora do routera i jego routera z systemem Linux, z dostępną komendą ifconfig.
źródło
Duplikat wielu innych pytań (stąd mój głos -1).
źródło
Proste rozwiązanie skryptu powłoki można znaleźć tutaj:
http://bash.cyberciti.biz/misc-shell/read-local-ip-address/
Działa na systemach Linux, FreeBSD, SunOS i Apple Darwin (z niewielką modyfikacją).
źródło
Jeśli chcesz znaleźć zewnętrzny adres IP na routerze, albo zapytaj sam router o jego adres wan, albo poproś kogoś z zewnątrz, aby go dla ciebie znalazł.
ręcznie możesz przeglądać dowolne z powyższych witryn, które zwracają ip przychodzącego żądania.
W sposób zautomatyzowany możesz wypróbować:
który dostanie ci linię zawierającą adres IP w odpowiedzi http, a następnie przeanalizuje go za pomocą sed, awk itp
źródło
możesz użyć tylko powłoki, aby sprawdzić swój zewnętrzny adres IP, również korzystając z zewnętrznych dostawców
wydajność
źródło
źródło
Robię to. Daje mi to tylko adres IP bez udziału stron trzecich.
adres IP pokaż | grep eth0 | grep inet | tr -s "" | cut -f3 -d "" | cut -f1 -d "/"
źródło
źródło
Oto kolejna alternatywa, która zależy od hostów, których firma rozwiązuje problem zarządzania dynamicznym adresem IP, a nie od stron „publicznych”, które mogą zniknąć lub zmienić format.
1) Zarejestruj swój serwer w jednej z wielu bezpłatnych dynamicznych usług DNS (np. No-ip.com). Otrzymasz wpis DNS, np. Xxx.no-ip.org.
2) Zainstaluj narzędzie do dynamicznej aktualizacji usługi (zgłasza zmiany adresu IP usługi).
Aby uzyskać adres IP w skrypcie, po prostu wykonaj:
$external_ip = `dig +short xxx.no-ip.org`
Idealny do użycia w zadaniu cron, aby sprawdzić, czy zmienił się dynamiczny adres IP i niektóre wpisy konfiguracji wymagają zmiany.
źródło
W systemie OS X dostępne są dwa proste rozwiązania pozwalające uzyskać zarówno prywatny, jak i publiczny adres IP (z kodem bonusowym, jeśli używasz paska LaunchBar).
Prywatne IP
Skrypt LaunchBar
Publiczny adres IP
Skrypt LaunchBar
źródło