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

21

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

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

Аксель Персингер
источник
7
Вы только пытаетесь избежать HTTP или вообще не хотите отправлять исходящий трафик? Единственные универсальные решения предполагают отправку некоторого исходящего трафика, но это не обязательно HTTP.
Spiff
Это было скорее гипотетически, я вообще не хотел делать исходящий трафик.
Аксель Персингер,
2
Вы говорите, что ваша сеть / маршрутизатор находится за настройкой NAT уровня предприятия (т.е. он получает частный IP-адрес от вашего провайдера)? Если это так, я никак не могу подумать о том, что вы можете найти общедоступный IP-адрес, не обращаясь к общедоступной сети и, по сути, «оглядываясь назад», как whatsmyip.com или подобные сервисы.
acejavelin
хак, который я использовал, это проверка моего роутера - на самом деле у меня был очень грязный скрипт, чтобы поцарапать его, так как по какой-то причине большинство веб-сервисов не смогли правильно определить мой IP. Мой провайдер действительно такой веселый.
Подмастерье Компьютерщик
2
Вы можете попытаться позвонить своему провайдеру с вашими данными клиента. Не требует подключения к интернету и без компьютера.
Томас

Ответы:

24

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

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

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

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

harrymc
источник
Гипербола @NicHartley, безусловно, может быть частью сарказма, но сарказм - это скорее тон или намерение насмехаться, и то, и другое передается по-разному в текстовой форме, нежели лично. Тем не менее, хотя любой протокол должен использовать IP для определения IP-адреса, это очевидное и да тавтологическое требование (поскольку вы не можете определить, что вы не используете), но протокол, построенный поверх IP, по-прежнему является другим протоколом, и есть теоретически несколько можно использовать, что достигает этой цели. Цель Lightness состояла в том, чтобы противостоять требованию о требовании веб-запроса.
eques
2
«Любой другой путь потребует создания веб - запроса внешний» Web (т.е. HTTP) не требуется, но , возможно, самый простой хватки
eques
1
Как упоминалось в другом ответе, uPnP, NAT-PMP и PCP - это разные способы получения информации от маршрутизатора, помимо доступа к странице конфигурации. То, как вы это сформулировали, выглядит так: «Помимо доступа к странице конфигурации, любой другой способ потребует отправки веб-запроса». Правильным является «помимо получения информации от маршрутизатора, любой другой способ потребует и попытки исходящего соединения» (это не обязательно должен быть веб-запрос).
Dirkt
@dirkt: для UPnP я не уверен; NAT-PMP, я думаю, работает только с IPv4; PCP в сети IPv6 вернет префикс IPv6 и может сделать гораздо больше, но это обычно не реализуется на коммерческих маршрутизаторах.
Harrymc
1
@harrymc: конечная точка службы UPnP для моей Fritzbox есть WANIPConn1/GetExternalIPAddress, и она только что успешно вернула правильный адрес.
Диркт
12

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

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

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

Spiff
источник
8
Также UPnP и т. Д. Может дать ложный результат, если система находится за двойным (или более) NAT.
user71659
@ user71659 Мне было интересно, существует ли anycast-адрес, который будет автоматически перенаправлен на самый внешний NAT, чтобы его можно было использовать для такого рода запросов.
kasperd
1
@kasperd Каждый NAT думает, что это самый внешний NAT. Конечно, есть IP-адреса, которые автоматически маршрутизируются за пределы всех NAT. Это так называемые публичные IP-адреса.
user253751
1
@ user20574 Нет, NAT так не думает, большинству просто все равно. Если такой произвольный адрес должен быть определен, стандарт должен будет также определить, когда NAT назначает этот IP себе, а когда нет. Ответ заключается в том, что если внешний IP-адрес указан в RFC 1918 или RFC 6598, NAT не назначит произвольный адрес самому себе.
kasperd
8

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

nslookup myip.opendns.com resolver1.opendns.com
Mehrdad
источник
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
Mehrdad
Я выполнил эту команду на машине с 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.
Касперд
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  |
                      -----------

Таким образом, отправка трафика позволит получить более надежные результаты.

VL-80
источник
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 и небольшом собственном исследовании.

kasperd
источник
2

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

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

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

user1532080
источник