Jakiego polecenia opartego na * nix mogę użyć do znalezienia mojego zewnętrznego adresu IP?


Odpowiedzi:



8
dig + short myip.opendns.com

Działa to tylko wtedy, gdy używasz OpenDNS jako serwera dns.

Jeśli nie, jeden z nich powinien działać:

dig + short myip.opendns.com @ 208.67.222.222
dig + short myip.opendns.com @ 208.67.220.220
dig + short myip.opendns.com @ 208.67.222.222 @ 208.67.220.220

1
Nie działa na moim MacOS 10.5, Ubuntu 8.04 lub Ubuntu 9.04.
Drew Stephens,

Ciekawe, że robi to na moim Ubuntu 8.10.
Brad Gilbert

Prawdopodobnie dlatego, że używam opendns.
Brad Gilbert

+1 za użycie DNS do znalezienia adresu IP (zamiast http). Można również określić serwer dns, używając jego nazwy, np. @resolver1.opendns.com(Dla czytelności)
jfs


2
lynx -dump http://www.pcmesh.com/ip-check.cgi | awk '/REMOTE_ADDR/{print $2}'

2

Aby skorzystać z tego, należy użyć serwerów OpenDNS ... Możesz zapytać określony serwer DNS za pomocą dig:

dig + short myip.opendns.com @ 208.67.222.222

2

Możesz użyć curl, aby pobrać stronę z czegoś takiego jak whatismyip, a następnie wyjąć kawałki. W tym przykładzie użyłem whatismyipaddress.com ... oczywiście pola będą się różnić w zależności od usług.

curl -s http://whatismyipaddress.com/ | grep LOOKUPADDRESS | awk '{ print $4 }'

1

po prostu uruchamiam traceroute gdzieś w Internecie i szukam przeskoku z naszej sieci lokalnej.

może jest lepszy sposób?




0

możesz użyć polecenia ifconfig, aby wyświetlić listę wszystkich interfejsów i powiązanych z nimi adresów IP.

więc jeśli wiesz, że twój interfejs internetowy to ppp0, możesz uruchomić

$ ifconfig ppp0
ppp0 Link encap: Protokół Point-to-Point
          adres inet: XXXX.X PtP: RRRR Maska: 255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST MTU: 1444 Metryczny: 1
          Pakiety RX: 198986 błędy: 0 usunięte: 0 przekroczeń: 0 ramka: 0
          Pakiety TX: 122929 błędów: 0 odrzuconych: 0 przekroczeń: 0 nośnych: 0
          kolizje: 0 txqueuelen: 3
          Bajty RX: 134195571 (127,9 MiB) Bajty TX: 17101701 (16,3 MiB)

XXXX będzie Twoim adresem IP. RRRR to adres IP następnego przeskoku.

następnie możesz przetworzyć dane wyjściowe ifconfig za pomocą grep / awk / sed / cut / perl / cokolwiek, aby wyodrębnić tylko adres IP.

inną alternatywą, jeśli masz zainstalowane narzędzia iproute, jest użycie polecenia ip. na przykład

$ ip lista adresów ppp0
21842: ppp0: mtu 1444 qdisc stan htb NIEZNANY qlen 3
    link / ppp
    inet XXXX peer RRRR / 32 zakres globalny ppp0

jest to prawdopodobnie łatwiejsze do odczytania i na pewno łatwiejsze do przeanalizowania:

$ ip lista adresów ppp0 | awk '/ inet / {print $ 2}'
XXXX

- Istnieje szansa, że ​​dowolny adres IP w ifconfig nie będzie pasował do rzeczywistego adresu IP (w przypadku biNAT) - W FreeBSD nie ma pakietu iproute2, więc polecenie ip nie ma zastosowania
SaveTheRbtz

to prawda, nie używam NAT, więc nigdy nie przyszło mi do głowy ... po prostu wydawało mi się „niewłaściwe” korzystanie z zewnętrznej usługi w celu uzyskania informacji, o które można zapytać w swoim systemie. nawet z NAT nadal wolę wymyślić, jak wykonać zapytanie do routera wykonującego NAT (być może za pomocą zapytania SNMP), niż polegać na usłudze zewnętrznej, która może, ale nie musi być dostępna, kiedy jej potrzebuję.
cas

@Craig, Twoje podejście jest w porządku. Nie jest to jednak zewnętrzny adres IP, chyba że można go osiągnąć z tej wartości z zewnątrz. Ci nie muszą polegać na zewnętrznym punktem dla tej odpowiedzi. Chodzi o to, aby znaleźć wiarygodny (przynajmniej więcej niż twój obwód obwodowy) punkt zewnętrzny dla zapytania. OpenDNS jest dobrym punktem.
nik

@nik: jedynym prawdopodobnym przypadkiem, gdy IP routera granicznego nie jest zewnętrznym IP, jest za wieloma warstwami NAT ... w takim przypadku poprawnym rozwiązaniem jest jak najszybsze przejście na usługę nie uszkodzoną przez mózg . Problem z pobieraniem adresu URL w celu ustalenia adresu IP polega na tym, że informuje on tylko adres IP hosta, który faktycznie go pobiera - może to być serwer proxy usuwający za pośrednictwem nagłówków.
cas
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.