Mogę znaleźć mój adres IP za pomocą polecenia ifconfig lub hostname -i.
Ale jak mogę znaleźć moje publiczne IP?
(Mam statyczny publiczny adres IP, ale chcę go znaleźć za pomocą komendy unix)
Mogę znaleźć mój adres IP za pomocą polecenia ifconfig lub hostname -i.
Ale jak mogę znaleźć moje publiczne IP?
(Mam statyczny publiczny adres IP, ale chcę go znaleźć za pomocą komendy unix)
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
curl http://checkip.amazonaws.com/
Można zażądać myip.opendns.com
. z OpenDNS. dig @208.67.222.220 myip.opendns.com
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 Google txt
, 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 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.com
nie jest on wiarygodny myip.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):
% 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
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:
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;
dig @trustworthysource.com +short `hostname`
W tym celu napisałem prosty i szybki serwis internetowy.
curl ident.me
Możesz poprosić o IPv4:
curl v4.ident.me
Lub IPv6:
curl v6.ident.me
Interfejs API jest udokumentowany na stronie http://api.ident.me/
W jedną stronę: http://www.whatismyip.com/
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
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:
stun -v stunserver.org 2>&1 1>/dev/null | grep MappedAddress | sed -e 's/.*MappedAddress = //' -e 's/:.*//' | uniq
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.
Jednym ze sposobów jest przesłanie żądania do strony pod adresem
http://www.biranchi.com/ip.php
zwraca adres IP twojego systemu
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 jako text/html
.
wget -q -O - http://wgetip.com/
Google wyświetla teraz twój publiczny adres IP: http://www.google.com/search?q=ip
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.
#!/bin/sh
IP="$(ifconfig | egrep 'inet ' | sed -e 's/inet //' -e 's/addr://' -e 's/ Bcast.*//' -e 's/127.*//')"
echo $IP
Ładne i proste.
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:
zwinąć ifconfig.melub
curl ifconfig.me/ip
W przypadku publicznej nazwy hosta:
zwinąć ifconfig.me/host
Wszystkie informacje w pliku XML:
zwiń ifconfig.me/all.xml
itp ... po prostu sprawdź http://ifconfig.me
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:
user@host:~$ cat index.php`
<?php echo $_SERVER['REMOTE_ADDR']; echo "\n" ?>
Użycie na powłoce:
$ curl -4 mydomain.com
79.22.192.12
współpracuje również z ipv6:
$ curl mydomain.com
2a01:e34:ee7d:180::3
Z netcat:
$ echo "GET /" | nc myserver.com 80
2a01:e34:ee7d:180::3
Na routerze Cisco:
router#more http://myserver.com/index.php
79.22.192.12
szybki hack z niestandardowym serwerem telnet: xinetd spawn / usr / bin / env:
service telnet
{
server = /usr/bin/env
socket_type = stream
protocol = tcp
flags = IPv6
wait = no
port = 23
cps = 3 30
passenv = %a
}
a następnie telnet do niego:
$ nc -4 myserver.com 23
REMOTE_HOST=::ffff:79.22.192.12
$ nc myserver.com 23
REMOTE_HOST=2a01:e34:ee7d:180::3
działa tak samo z routerem:
router#telnet myserver.com
79.22.192.12
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.
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:
#!/usr/bin/expect
if { $argc < 3 } {
puts "usage: ./telnet2router.exp router-ip username password"
return -1
}
set ip [lrange $argv 0 0]
set username [lrange $argv 1 1]
set password [lrange $argv 2 2]
spawn telnet $ip
expect "login:" {
send "$username\r"
}
expect "Password:" {
send "$password\r"
}
expect "#" {
send "ifconfig ppp0 | grep inet\r"
send "exit\r"
}
expect eof
Następnie wykonuję powyższy skrypt w taki sposób, aby uzyskać publiczny adres IP:
./telnet2router.exp <router-ip> <username> <password> | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1
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.
Duplikat wielu innych pytań (stąd mój głos -1).
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ą).
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ć:
wget -q -O - http://www.ipaddressworld.com | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'\.
który dostanie ci linię zawierającą adres IP w odpowiedzi http, a następnie przeanalizuje go za pomocą sed, awk itp
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
wydajność
lynx --dump http://www.whatismyip.com/ | grep -o '[0-9]. * \. [0-9]. * \. [0-9]. * \. [0-9]. *' -m1
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 "/"
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).
$ ipconfig getifaddr $1
# $1=en0 || en1 || en*
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(ipconfig getifaddr en1)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"
$ dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com
# ||
$ curl $1
# $1=http://wtfismyip.com/text || http://ip-addr.es || http://icanhazip.com || http://wgetip.com || http://ident.me || http://ifconfig.me || https://shtuff.it/myip/short || http://curlmyip.com
#!/bin/sh
title="$USER@$(HOSTNAME -s)"
text=$(dig +time=1 +tries=1 +retry=1 +short myip.opendns.com @resolver1.opendns.com)
open "x-launchbar:large-type?font-name=TerminalDosis-Light&string=$text&title=$title"