Czy mogę zobaczyć mój zewnętrzny adres IP bez wysyłania wychodzącego żądania internetowego?

21

Jeśli twoje połączenie ma NAT, czy możesz zobaczyć swój zewnętrzny adres IP bez wysyłania wychodzącego żądania internetowego?

Każdy system operacyjny (Windows, Linux itp.) Jest w porządku.

Axel Persinger
źródło
7
Czy próbujesz tylko uniknąć HTTP, czy w ogóle próbujesz uniknąć wysyłania ruchu wychodzącego? Jedyne uniwersalne rozwiązania obejmują wysyłanie pewnego rodzaju ruchu wychodzącego, ale nie musi to być HTTP.
Spiff
To było bardziej hipotetyczne, nie chciałem generować żadnego ruchu wychodzącego.
Axel Persinger
2
Czy mówisz, że twoja sieć / router ma konfigurację NAT klasy korporacyjnej (tzn. Otrzymuje prywatny adres IP od twojego dostawcy usług internetowych)? Jeśli tak, to nie ma mowy, żebym mógł znaleźć publiczny adres IP bez sięgania do sieci publicznej i zasadniczo „spoglądania wstecz”, takiego jak whatsmyip.com lub podobne usługi.
acejavelin
hack, którego użyłem, polegał na sprawdzeniu za pomocą routera - miałem naprawdę brudny skrypt, aby go zeskrobać, ponieważ z jakiegoś powodu większość usług internetowych nie wykrywa poprawnie mojego adresu IP. Mój ISP jest naprawdę fajny w ten sposób.
Journeyman Geek
2
Możesz spróbować zadzwonić do swojego dostawcy usług internetowych, podając dane klienta. Nie wymaga połączenia z Internetem ani komputera.
Thomas

Odpowiedzi:

24

Jeśli twój komputer ma NAT, możesz zobaczyć zewnętrzny adres IP routera, ale potrzebujesz dostępu administracyjnego do routera.

Router zna twój zewnętrzny adres IP, więc wchodząc na stronę konfiguracji, możesz znaleźć ten adres IP. W ten sposób nie jest wymagane żadne specjalne narzędzie oprócz przeglądarki internetowej.

Inne protokoły wymagające narzędzia do uzyskiwania informacji:

Testowane przez użytkownika @dirkt, wszystkie metody działają tylko z IPv4 (z wyjątkiem ewentualnie PCP).

harrymc
źródło
@ Hiperbola NicHartley z pewnością może być częścią sarkazmu, ale w sarkazmie chodzi bardziej o ton lub intencję kpiny, które są przekazywane inaczej niż w formie tekstowej niż osobiście. To powiedziawszy, chociaż każdy protokół musi używać adresu IP do ustalenia adresu IP jest oczywistym i tak tautologicznym wymogiem (ponieważ nie można określić, czego nie używasz), ale protokół zbudowany na bazie IP jest nadal innym protokołem i istnieją teoretycznie wielokrotność, którą można zastosować, która osiąga ten cel. Celem Lightness było przeciwstawienie się roszczeniom dotyczącym wymagania żądania internetowego.
eques
2
„Każdy inny sposób wymaga dokonywania zewnętrznego żądania sieci Web” (czyli HTTP) nie jest wymagane, ale najłatwiej może pojąć
eques
1
Jak wspomniano w drugiej odpowiedzi, uPnP, NAT-PMP i PCP to różne sposoby uzyskiwania informacji z routera, oprócz dostępu do strony konfiguracji. Sposób, w jaki to sformułowałeś, wygląda następująco: „oprócz uzyskania dostępu do strony konfiguracji, każdy inny sposób będzie wymagał złożenia żądania internetowego”. Prawidłowe jest „oprócz pobierania informacji z routera, jakikolwiek inny sposób będzie wymagał i próba połączenia wychodzącego” (nie musi to być żądanie sieciowe).
dirkt
@dirkt: W przypadku UPnP nie jestem przekonany; NAT-PMP Myślę, że działa tylko z IPv4; PCP w sieci IPv6 zwróci prefiks IPv6 i może zrobić znacznie więcej, ale zwykle nie jest to realizowane w komercyjnych routerach.
harrymc
1
@harrymc: Punktem końcowym usługi UPnP dla mojego urządzenia Fritzbox jest WANIPConn1/GetExternalIPAddressi właśnie zwrócił prawidłowy adres.
dirkt
12

Istnieje kilka sposobów, które działają z niektórymi NAT, ale nic, co gwarantuje, że będzie działać wszędzie.

Wierzę, że uPnP, NAT-PMP i PCP (Universal Plug and Play, NAT Port Mapping Protocol i protokół kontroli portów) mają wszystkie sposoby, by zapytać zgodną bramę NAT o adres publiczny, ale nie wszystkie NAT obsługują te protokoły. Obsługa jest bardziej powszechna w routerach domowych bram niż w rozwiązaniach NAT klasy korporacyjnej lub operatorskiej.

Gdy znajdziesz się za NAT, jedynym pewnym sposobem, aby zobaczyć, na jaki publiczny adres IP, na który tłumaczy twój ruch, jest wysłanie ruchu wychodzącego do jakiegoś hosta publicznego, który to zgłosi, w sposób, w jaki NAT nie tłumaczy, co adres wydaje się, że pochodzi z twojego ruchu. Korzystanie z usługi internetowej jest jednym ze sposobów, ale możesz to również zrobić, powiedzmy, SSHing do instancji serwera w chmurze i zobacz, skąd sshdpochodzi twoja sesja SSH.

Spiff
źródło
8
Również UPnP itp. Może dać fałszywy wynik, jeśli system stoi za podwójną (lub więcej) NAT.
user71659,
@ user71659 Zastanawiam się, czy istnieje adres anycast, który zostanie automatycznie przekierowany na najbardziej zewnętrzny NAT, aby można go było użyć do tego rodzaju żądania.
kasperd
1
@kasperd Każdy NAT uważa, że ​​jest to najbardziej zewnętrzny NAT. Z pewnością istnieją adresy IP, które są automatycznie kierowane poza wszystkie NAT. Są to tak zwane publiczne adresy IP.
user253751,
1
@ user20574 Nie, NAT nie myślą w ten sposób, większość po prostu się tym nie przejmuje. Jeśli taki anycast miałby zostać zdefiniowany, standard musiałby również określić, kiedy NAT przypisuje sobie ten adres IP, a kiedy nie. Odpowiedź brzmi: jeśli zewnętrzny adres IP znajduje się w RFC 1918 lub RFC 6598, NAT nie przypisze sobie adresu anycast.
kasperd
8

Możesz użyć żądania DNS, które moim zdaniem nie mieści się w kategorii „żądanie internetowe”:

nslookup myip.opendns.com resolver1.opendns.com
Mehrdad
źródło
1
Możesz także użyć dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns. Znalazłem polecenie tutaj: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
kasperd
Twoje nsslookuppolecenie zawodzi dla mnie. Dostaję Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
kasperd
1
@kasperd: Przepraszamy, działa tylko w przypadku IPv4. Unikałem, digponieważ nie ma go w systemie Windows. Dobra uwaga dotycząca myaddrGoogle, nie byłam tego świadoma! Myślę, że nslookupodpowiednikiem systemu Windows byłbynslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Mehrdad
Uruchomiłem tę komendę na komputerze, który ma zarówno IPv4, jak i IPv6, więc jeśli naprawdę wspierał IPv4, powinien był działać. Problem polega na tym, że najwyraźniej nie możesz określić, nslookupktóra wersja IP ma być używana do transportu, ale sposób, w jaki robi to OpenDNS, oznacza, że ​​musisz. Bez tego musisz przewidzieć, która wersja IP nslookupbędzie używana do transportu i poprosić odpowiednio o A lub AAAA. Jeśli utkniesz nslookup, możesz skorzystać z usług innego usługodawcy, takiego jak Google. Jednak w odpowiedzi otrzymujesz tylko jedną wersję protokołu i nie możesz wybrać, która.
kasperd
Przetestowałem nslookup -type=txt o-o.myaddr.l.google.com ns3.google.comi to naprawdę działa. Ale jeśli mam zarówno IPv4, jak i IPv6, to nie pozwoli mi wybrać, który z nich zobaczę. Najprawdopodobniej pokaże mi adres IPv6 i najprawdopodobniej go używam, ponieważ chcę znać adres IPv4 NAT. Aby obejść ten problem, należy skorzystać z usługi, która ma nazwę tylko IPv4 i nazwę tylko IPv6, która rozwiązałaby również problem NAT64.
kasperd
7

Chciałbym dodać jeden punkt do już istniejących odpowiedzi.

Zależy to również od złożoności sieci. Możliwe, że komputer znajduje się w sieci, która ma wiele zewnętrznych adresów IP, a router gdzieś w linii wysyła ruch do Internetu na podstawie niektórych kryteriów: na przykład docelowego adresu IP lub pory dnia (może być jednym kanałem łącza zwrotnego jest tańsze w nocy lub z innych powodów).

Tak więc, aby być kompletnym, pojęcie „zewnętrznego adresu IP” może wymagać zdefiniowania punktu docelowego, do którego adres jest zewnętrzny.

W poniższym przykładzie Router #2można wykonać translację NAT i wysłać ruch do dowolnego łącza zwrotnego, a host odbierający może zobaczyć inny zewnętrzny adres IP dla Host.

Lub może być tak, że określone miejsce docelowe (na przykład host1.example.com) zawsze prowadzi przez Uplink A, a host host2.example.comzawsze prowadzi przez Uplink B. Więc twoje zewnętrzne adresy IP widziane przez tych gospodarzy będzie inny, pod warunkiem, że Uplink Ai Uplink Bsą różne ISP.

   Uplink A                                  Uplink B
-------------                             -------------
      |                                         |
      |                                         |
      |     192.168.1.1         192.168.50.50   |
      |               -----------               |
      |---------------|Router #2|---------------|
                      -----------
                           |  192.168.100.1
                           |
                           |  192.168.100.2
                      -----------
                      |Router #1|
                      -----------
                           |  192.168.200.1
                           |
                           |  192.168.200.2
                      -----------
                      |   Host  |
                      -----------

Dlatego wysyłanie ruchu pozwoli uzyskać bardziej wiarygodne wyniki.

VL-80
źródło
4

Możesz użyć DNS zamiast HTTP. Na przykład możesz użyć:

dig +short TXT o-o.myaddr.l.google.com

Spowoduje to wyświetlenie adresu emisji pojedynczej serwera DNS, którego używasz, a jeśli obsługuje EDNS, pokaże również Twój adres IP, choć może być skrócony.

Aby uzyskać pełny adres IP, możesz ominąć lokalny serwer DNS i wysłać powyższe żądanie bezpośrednio do ns {1,2,3,4} .google.com

dig +short TXT o-o.myaddr.l.google.com @ns3.google.com

Jeśli chcesz zobaczyć swój adres IP w określonej wersji protokołu, możesz użyć -6i -4:

dig -6 +short TXT o-o.myaddr.l.google.com @ns3.google.com
dig -4 +short TXT o-o.myaddr.l.google.com @ns3.google.com

Możesz również użyć OpenDNS, jeśli wolisz. OpenDNS nie używa do tego rekordów TXT, ale raczej rekordy A i AAAA, więc musisz określić, której wersji protokołu szukasz:

dig -6 +short AAAA myip.opendns.com @resolver2.opendns.com
dig -4 +short A myip.opendns.com @resolver2.opendns.com

Zauważ, że jeśli Twój ruch przechodzi przez tłumaczenie protokołu, możesz uzyskać różne wyniki lub w ogóle ich nie mieć. Testowanie z komputera za NAT64 Widziałem mój adres IPv6 za pomocą powyższych poleceń, ale nie widziałem adresu IPv4 NAT64.

Ta odpowiedź jest oparta na tych źródłach 1 2 3 i trochę własnych badaniach.

kasperd
źródło
2

Internet ogólnie odnosi się do HTTP, jeśli takie jest znaczenie twojego pytania, możesz na przykład użyć STUN ( artykuł Wikipedii ), który oznacza „Session Traversal Utilities for NAT”.

Teraz, jak zostało to zaznaczone w komentarzu, możesz mieć wiele zewnętrznych adresów IP. Ponieważ połączenia bezprzewodowe stają się coraz bardziej powszechne (rzecz 4G), nie jest niemożliwe, aby adres IP zgłoszony przez router nie był publiczny. W niektórych krajach spotkałem się nawet z tym scenariuszem połączeń światłowodowych, w którym dostawca usług internetowych przyznałby routerowi lokalnemu prywatny adres IP, który później zostałby przetłumaczony na publiczny adres IP w momencie opuszczania sieci.

Więc jeśli twoje pytanie brzmi „czy mogę znaleźć mój publiczny adres IP bez wysyłania pakietów z mojej sieci”, MOŻESZ w swoim kontekście, ale nie ma 100% dowodu na rozwiązanie.

użytkownik1532080
źródło