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.
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.
Odpowiedzi:
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).
WANIPConn1/GetExternalIPAddress
i właśnie zwrócił prawidłowy adres.
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 sshd
pochodzi twoja sesja SSH.
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
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/…
nsslookup
polecenie zawodzi dla mnie. Dostaję Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
ponieważ nie ma go w systemie Windows. Dobra uwaga dotycząca myaddr
Google, nie byłam tego świadoma! Myślę, że nslookup
odpowiednikiem systemu Windows byłbynslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
nslookup
któ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 nslookup
bę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.
nslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
i 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.
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 #2
moż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.com
zawsze prowadzi przez Uplink B
. Więc twoje zewnętrzne adresy IP widziane przez tych gospodarzy będzie inny, pod warunkiem, że Uplink A
i Uplink B
są 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.
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ć -6
i -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.
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.