20

Если ваше соединение использует NAT, возможно ли увидеть ваш внешний IP-адрес без отправки исходящего веб-запроса?

Любая ОС (Windows, Linux и т.д.) В порядке.

6 ответов6

23

Если ваш компьютер находится за NAT, вы можете увидеть внешний IP-адрес вашего маршрутизатора, но вам необходим административный доступ к маршрутизатору.

Маршрутизатор знает ваш внешний IP-адрес, поэтому, зайдя на его страницу конфигурации, вы можете найти этот IP-адрес. Этот способ не требует какого-либо специального инструмента, кроме веб-браузера.

Другие протоколы, для которых требуется инструмент для получения информации:

Как проверено пользователем @dirkt, все методы работают только с IPv4 (за исключением, возможно, PCP).

11

Есть несколько способов работы с некоторыми NAT, но нет ничего, что гарантированно работало бы везде.

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

Когда вы оказываетесь за NAT, единственный верный способ узнать, на какой публичный IP-адрес он транслирует ваш трафик, - это отправить некоторый исходящий трафик на какой-то публичный хост, который будет отчитываться, таким образом, что NAT не будет транслировать адрес вашего трафика, казалось, пришел. Использование веб-службы является одним из способов, но вы также можете сделать это, скажем, через SSHing в экземпляр облачного сервера и посмотреть, откуда sshd сообщает, что ваш SSH-сеанс идет.

8

Вы можете использовать DNS-запрос, который, я считаю, не подпадает под категорию «веб-запрос»:

nslookup myip.opendns.com resolver1.opendns.com
7

Я хотел бы добавить один момент к уже существующим ответам.

Это также зависит от сложности сети. Возможно, ваш компьютер находится в сети с несколькими внешними IP-адресами, и маршрутизатор где-то на линии отправляет трафик в Интернет на основании некоторых критериев: например, IP-адрес назначения или время суток (может быть одним восходящим каналом дешевле ночью или по другим причинам).

Таким образом, чтобы завершить, понятие «внешний IP-адрес» может потребовать определения точки назначения, к которой ваш адрес является внешним.

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

Или может быть так, что определенный пункт назначения (например, host1.example.com) всегда направляется через Uplink A , а host 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

Веб обычно ссылается на HTTP, если в этом смысл вашего вопроса, то, например, вы можете использовать STUN ( статья в Википедии ), что означает "Утилиты обхода сессии для NAT".

Теперь, как это было выделено в комментарии, у вас может быть несколько внешних IP-адресов. Также, поскольку беспроводные соединения становятся все более распространенными (вещь 4G), не исключено, что IP-адрес, сообщаемый вашим маршрутизатором, не будет общедоступным. Я даже встречал этот сценарий на оптоволоконных соединениях в некоторых странах, где интернет-провайдер предоставил бы локальному маршрутизатору частный IP-адрес, который впоследствии был бы преобразован 1:1 в публичный IP-адрес при выходе из их сети.

Поэтому, если ваш вопрос «могу ли я найти свой общедоступный IP-адрес, не отправляя пакеты из моей сети», вы МОЖЕТЕ в своем контексте, но не существует 100% -ного решения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .