Чи можна побачити мою зовнішню IP-адресу, не роблячи вихідний веб-запит?


21

Якщо ваше з'єднання NAT'ed, чи можна бачити вашу зовнішню IP-адресу, не роблячи вихідний веб-запит?

Будь-яка ОС (Windows, Linux тощо) чудово.


7
Ви лише намагаєтесь уникати HTTP або взагалі намагаєтесь уникати надсилання будь-якого вихідного трафіку? Єдине універсальне рішення передбачає надсилання якогось вихідного трафіку, але це не повинно бути HTTP.
Spiff

Це було більше просто гіпотетично, я взагалі не хотів робити вихідний трафік.
Аксель Персінгер

2
Ви хочете сказати, що ваша мережа / маршрутизатор відстає від встановлення NAT класу Enterprise (тобто отримує приватну IP-адресу від вашого провайдера)? Якщо так, то я не думаю, що ви можете знайти публічну IP-адресу, не звертаючись до загальнодоступної мережі і, по суті, "озираючись назад", як Whatsmyip.com або подібні служби.
acejavelin

хак, який я робив, - це перевірити свій маршрутизатор - я насправді мав по-справжньому брудний сценарій, щоб вичесати це, оскільки чомусь більшість веб-сервісів не визначили мою IP правильно. Мій провайдер дуже цікавий таким чином.
Подорожник Geek

2
Ви можете спробувати подзвонити провайдеру з деталями клієнта. Не потребує підключення до Інтернету та комп’ютера.
Томас

Відповіді:


24

Якщо ваш комп'ютер відстає від NAT, ви можете бачити зовнішню IP-адресу вашого маршрутизатора, але вам потрібен адміністративний доступ до маршрутизатора.

Маршрутизатор знає вашу зовнішню IP-адресу, тому, перейшовши на сторінку конфігурації, ви можете знайти цю IP-адресу. Цей спосіб не потребує будь-якого спеціалізованого інструменту, окрім веб-браузера.

Інші протоколи, яким потрібен інструмент для отримання інформації:

Як перевірено користувачем @dirkt, усі методи працюють лише з IPv4 (крім можливо PCP).


@NicHartley гіпербола, безумовно, може бути частиною сарказму, але сарказм швидше стосується тону чи наміру знущатися, обидва вони передаються інакше в текстовій формі, ніж особисто. Однак, хоча будь-який протокол повинен використовувати IP для визначення IP-адреси, це очевидна та так тавтологічна вимога (оскільки ви не можете визначити, що ви не використовуєте), але протокол, побудований на вершині IP, все ще є іншим протоколом, і є Теоретично можна використовувати декілька, які досягають цієї мети. Справа від легкості полягала в тому, щоб протиставити претензію щодо вимоги веб-запиту.
дорівнює

2
"Будь-який інший спосіб зажадає створення зовнішнього веб-запиту" Веб (тобто HTTP) не потрібно, але найпростіший, можливо, зрозуміти
дорівнює

1
Як було сказано в іншій відповіді, uPnP, NAT-PMP та PCP - це різні способи отримання інформації від маршрутизатора, окрім доступу до сторінки конфігурації. Те, як ви його фразували, виглядає так: "окрім доступу до сторінки конфігурації, будь-який інший спосіб зажадає створення веб-запиту". Правильно: "окрім отримання інформації від маршрутизатора, будь-який інший спосіб вимагатиме і вихідної спроби з'єднання" (це не повинен бути веб-запит).
dirkt

@dirkt: Для UPnP я не переконаний; NAT-PMP Я думаю, що працює лише з IPv4; PCP в мережі IPv6 поверне префікс IPv6 і може зробити набагато більше, але це зазвичай не реалізується на комерційних маршрутизаторах.
harrymc

1
@harrymc: Кінцева точка служби UPnP для мого Fritzbox є WANIPConn1/GetExternalIPAddress, і вона лише успішно повернула правильну адресу.
dirkt

12

Є кілька способів роботи з деякими NAT, але нічого, що гарантовано працює скрізь.

Я вважаю, що uPnP, NAT-PMP і PCP (Universal Plug And Play, протокол картографування портів NAT і протокол управління портами) мають усі способи запитати сумісний NAT шлюз, що таке загальнодоступна адреса, але не всі NAT підтримують ці протоколи. Підтримка частіше зустрічається в домашніх маршрутизаторах, ніж у корпоративних чи корпоративних рішеннях NAT.

Якщо ви опинитесь за NAT, єдиний вірний спосіб зрозуміти, на яку публічну IP-адресу він переводить ваш трафік, - це надіслати якийсь вихідний трафік якомусь публічному хосту, який буде звітувати назад, таким чином NAT не переведе, адреса вашого трафіку, здавалося, походить. Використання веб-сервісу - це один із способів, але ви також можете це зробити, скажімо, SSHing в екземпляр хмарного сервера і побачити, звідки sshdйдеться про ваш сеанс SSH.


8
Також UPnP тощо може дати помилковий результат, якщо система відстає від подвійного (або більше) NAT.
користувач71659

@ user71659 Мені було цікаво, чи існує адреса anycast, яка автоматично буде перенаправлена ​​на найвіддаленіший NAT, щоб його можна було використовувати для такого запиту.
kasperd

1
@kasperd Кожен NAT думає, що це самий зовнішній NAT. Безумовно, є IP-адреси, які автоматично спрямовуються за межі всіх NAT. Вони називаються публічними ІС.
користувач253751

1
@ user20574 Ні, NAT не думає так, більшість просто не хвилює. Якщо така адреса anycast повинна була бути визначена, стандарт повинен був би також визначити, коли NAT призначає цей IP для себе, а коли ні. Відповідь на це полягає в тому випадку, якщо зовнішній IP знаходиться в RFC 1918 або RFC 6598, NAT не призначить адресу anycast собі.
kasperd

8

Ви можете використовувати запит DNS, який, на мою думку, не підпадає під категорію "веб-запит":

nslookup myip.opendns.com resolver1.opendns.com

1
Ви також можете використовувати dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns. Тут я знайшов команду: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
kasperd

Ваша nsslookupкоманда не відповідає мені. Я отримую Server: resolver1.opendns.com Address: 2620:119:35::35#53 ** server can't find myip.opendns.com: NXDOMAIN
kasperd

1
@kasperd: Це працює лише для IPv4, вибачте. Я уникав, digоскільки це не в Windows. Хороший момент щодо myaddrGoogle, але я цього не знав! Я думаю, що nslookupеквівалент Windows був биnslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
Мехрдад

Я запустив цю команду на машині, яка має і IPv4, і IPv6, тож якщо б дійсно підтримувала IPv4, вона мала б працювати. Очевидно, проблема полягає в тому, що ви не можете вказувати, nslookupяку версію IP використовувати для транспорту, але те, як це робить OpenDNS, вам потрібно. Без цього вам доведеться передбачити, яку версію IP nslookupвикористовуватиме для транспорту, і запитувати відповідну A або AAAA. Якщо ви застрягли, nslookupви можете скористатися іншим постачальником, таким як Google. Однак ви все одно отримуєте лише одну версію протоколу у відповіді, і не можете вибрати яку.
касперд

Я тестував, nslookup -type=txt o-o.myaddr.l.google.com ns3.google.comі це справді працює. Але якщо у мене є і IPv4, і IPv6, це не дозволить мені вибрати, який з них я бачу. Швидше за все, він покаже мені IPv6 адресу, і, швидше за все, я використовую її, тому що я хочу знати IPv4 адресу NAT. Щоб обійти це, потрібно скористатися сервісом, який має ім'я лише для IPv4 та ім'я лише для IPv6, яке також вирішило б питання NAT64.
kasperd

7

Я хотів би додати один момент до вже існуючих відповідей.

Це також залежить від складності мережі. Можливо, що ваш комп'ютер розташований у мережі, яка має кілька зовнішніх IP-адрес, а маршрутизатор десь вгору по лінії передає трафік в Інтернет за певними критеріями: наприклад, IP-адресою призначення або часом доби (може бути один висхідний канал дешевше вночі або з інших причин).

Отже, для завершення поняття "зовнішня IP-адреса" може зажадати визначення точки призначення, до якої ваша адреса є зовнішньою.

У наведеному нижче прикладі Router #2можна виконувати NAT і надсилати трафік або до посилань, і приймаючий хост міг бачити різні зовнішні IP-адреси для Host.

Або може бути, що певне місце призначення (наприклад host1.example.com) завжди проходить маршрутамиUplink A , а хост host2.example.comзавжди здійснює маршрути через Uplink B. Таким чином, ваш зовнішній IP - адреса , як видно на цих вузлах буде відрізнятися, при умови , що Uplink Aі Uplink Bрізні інтернети - провайдери.

   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  |
                      -----------

Таким чином, відправлення трафіку дозволить отримати більш надійні результати.


4

Ви можете використовувати DNS, а не HTTP. Наприклад, ви можете використовувати:

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

Це покаже одноадресову адресу використовуваного DNS-сервера, і якщо він підтримує EDNS, він також покаже вашу IP-адресу, хоч можливо і усічену.

Щоб отримати повну IP-адресу, ви можете обійти локальний DNS-сервер і надіслати вищезазначений запит безпосередньо на ns {1,2,3,4} .google.com

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

Якщо ви хочете побачити ваш IP - адреса в версії протоколу конкретніше ви можете використовувати -6і -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

Ви також можете використовувати OpenDNS, якщо так хочете. OpenDNS не використовує для цього записи TXT, а записи A і AAAA, тому вам потрібно вказати, яку версію протоколу ви шукаєте:

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

Зауважте, що якщо ваш трафік проходить через переклад протоколу, ви можете отримати різні результати або взагалі жодних. Тестуючи на машині позаду NAT64, я зміг побачити мою IPv6 адресу з вищезазначеними командами, але не IPv4 адресу NAT64.

Ця відповідь ґрунтується на цих джерелах 1 2 3 та трохи моєму власному дослідженні.


2

Як правило, Web посилається на HTTP, якщо це сенс вашого питання, то, наприклад, ви можете використовувати STUN ( стаття у Вікіпедії ), що означає "Утиліти проходу сеансу для NAT".

Тепер, як це було виділено в коментарі, у вас можуть бути кілька зовнішніх IP-адрес. Оскільки бездротові з’єднання стають все більш поширеними (річ 4G), не виключено, що IP-адреса, про яку повідомляє ваш маршрутизатор, не буде публічною. Я навіть зустрічався із тим сценарієм щодо підключення оптичних волокон у деяких країнах, де провайдер надав локальному маршрутизатору приватний IP, який пізніше, виходячи з їхньої мережі, буде переведений на публічний IP.

Отже, якщо ваше запитання "чи можу я знайти свій загальнодоступний IP-адресу, не надсилаючи пакети з моєї мережі", ви МОЖИТЕ у вашому контексті, але немає 100-відсоткового рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.