Если ваше соединение использует NAT, возможно ли увидеть ваш внешний IP-адрес без отправки исходящего веб-запроса?
Любая ОС (Windows, Linux и т.д.) В порядке.
Если ваше соединение использует NAT, возможно ли увидеть ваш внешний IP-адрес без отправки исходящего веб-запроса?
Любая ОС (Windows, Linux и т.д.) В порядке.
Если ваш компьютер находится за NAT, вы можете увидеть внешний IP-адрес вашего маршрутизатора, но вам необходим административный доступ к маршрутизатору.
Маршрутизатор знает ваш внешний IP-адрес, поэтому, зайдя на его страницу конфигурации, вы можете найти этот IP-адрес. Этот способ не требует какого-либо специального инструмента, кроме веб-браузера.
Другие протоколы, для которых требуется инструмент для получения информации:
Как проверено пользователем @dirkt, все методы работают только с IPv4 (за исключением, возможно, PCP).
Есть несколько способов работы с некоторыми 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
Я хотел бы добавить один момент к уже существующим ответам.
Это также зависит от сложности сети. Возможно, ваш компьютер находится в сети с несколькими внешними 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 |
-----------
Таким образом, отправка трафика позволит получить более надежные результаты.
Вы можете использовать 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% -ного решения.