Если ваше соединение использует NAT, возможно ли увидеть ваш внешний IP-адрес без отправки исходящего веб-запроса?
Любая ОС (Windows, Linux и т. Д.) В порядке.
Если ваше соединение использует NAT, возможно ли увидеть ваш внешний IP-адрес без отправки исходящего веб-запроса?
Любая ОС (Windows, Linux и т. Д.) В порядке.
Ответы:
Если ваш компьютер находится за NAT, вы можете увидеть внешний IP-адрес вашего маршрутизатора, но вам необходим административный доступ к маршрутизатору.
Маршрутизатор знает ваш внешний IP-адрес, поэтому, зайдя на его страницу конфигурации, вы можете найти этот IP-адрес. Этот способ не требует какого-либо специального инструмента, кроме веб-браузера.
Другие протоколы, для которых требуется инструмент для получения информации:
Как проверено пользователем @dirkt, все методы работают только с IPv4 (за исключением, возможно, PCP).
WANIPConn1/GetExternalIPAddress
, и она только что успешно вернула правильный адрес.
Есть несколько способов работы с некоторыми NAT, но нет ничего, что гарантированно работало бы везде.
Я полагаю, что у uPnP, NAT-PMP и PCP (Universal Plug and Play, протокол сопоставления портов NAT и протокол управления портами) есть способы задать совместимому шлюзу NAT, что такое публичный адрес, но не все NAT поддерживают эти протоколы. Поддержка чаще встречается в домашних шлюзовых маршрутизаторах, чем в корпоративных решениях или решениях NAT операторского уровня.
Когда вы оказываетесь за NAT, единственный верный способ узнать, на какой публичный IP-адрес он транслирует ваш трафик, - это отправить некоторый исходящий трафик на какой-то общедоступный хост, который будет отчитываться, таким образом, что NAT не будет транслировать, что адрес вашего трафика, казалось, пришел. Использование веб-службы является одним из способов, но вы также можете сделать это, скажем, посредством SSHing в экземпляр облачного сервера и узнать, откуда sshd
поступает ваш SSH-сеанс.
Вы можете использовать DNS-запрос, который, я считаю, не подпадает под категорию «веб-запрос»:
nslookup myip.opendns.com resolver1.opendns.com
dig +short @8.8.8.8 o-o.myaddr.l.google.com txt | grep edns
. Я нашел команду здесь: groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/…
nsslookup
команда терпит неудачу для меня. Я получаю Server: resolver1.opendns.com
Address: 2620:119:35::35#53
** server can't find myip.opendns.com: NXDOMAIN
dig
так как это не на Windows. Хороший вопрос относительно myaddr
Google, хотя, я не знал об этом! Я думаю, что nslookup
эквивалент Windows будетnslookup -type=txt o-o.myaddr.l.google.com ns3.google.com
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.
Я хотел бы добавить один момент к уже существующим ответам.
Это также зависит от сложности сети. Возможно, ваш компьютер находится в сети, имеющей несколько внешних 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 |
-----------
Таким образом, отправка трафика позволит получить более надежные результаты.
Вы можете использовать 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 и небольшом собственном исследовании.
Веб обычно ссылается на HTTP, если в этом смысл вашего вопроса, то, например, вы можете использовать STUN ( статья в Википедии ), что означает «Утилиты обхода сеанса для NAT».
Теперь, как это было выделено в комментарии, у вас может быть несколько внешних IP-адресов. Также, поскольку беспроводные соединения становятся все более распространенными (вещь 4G), не исключено, что IP-адрес, сообщаемый вашим маршрутизатором, не будет общедоступным. Я даже встречал этот сценарий на оптоволоконных соединениях в некоторых странах, где интернет-провайдер предоставил бы локальному маршрутизатору частный IP-адрес, который впоследствии был бы преобразован 1: 1 в общедоступный IP-адрес при выходе из их сети.
Поэтому, если ваш вопрос «могу ли я найти свой общедоступный IP-адрес, не отправляя пакеты из моей сети», вы МОЖЕТЕ в своем контексте, но не существует 100% -ного решения.