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

4147
Axel Persinger

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

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

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

6 ответов на вопрос

23
harrymc

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

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

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

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

Гипербола @NicHartley, безусловно, может быть частью сарказма, но сарказм - это скорее тон или намерение насмехаться, и то, и другое передается по-разному в текстовой форме, чем в человеке. Тем не менее, хотя любой протокол должен использовать IP для определения IP-адреса, это очевидное и да тавтологическое требование (поскольку вы не можете определить, что вы не используете), но протокол, построенный поверх IP, по-прежнему является другим протоколом, и есть теоретически несколько можно использовать для достижения этой цели. Цель Lightness состояла в том, чтобы противостоять требованию о требовании веб-запроса. eques 6 лет назад 0
«Любой другой способ потребует создания внешнего веб-запроса» Веб (т. Е. HTTP) не требуется, но проще всего понять eques 6 лет назад 2
Как упоминалось в другом ответе, uPnP, NAT-PMP и PCP - это разные способы получения информации от маршрутизатора, помимо доступа к его странице конфигурации. То, как вы это сформулировали, выглядит так: «Помимо доступа к странице конфигурации, любой другой способ потребует отправки веб-запроса». Правильным является «помимо получения информации от маршрутизатора, любой другой способ потребует и попытки исходящего соединения» (это не обязательно должен быть веб-запрос). dirkt 6 лет назад 1
@dirkt: для UPnP я не уверен; NAT-PMP, я думаю, работает только с IPv4; PCP в сети IPv6 вернет префикс IPv6 и может сделать гораздо больше, но это обычно не реализуется на коммерческих маршрутизаторах. harrymc 6 лет назад 0
@eques: Сеть спустя два десятилетия стала намного больше, чем просто HTTP ... harrymc 6 лет назад 0
@harrymc: конечной точкой службы UPnP для моего Fritzbox является `WANIPConn1 / GetExternalIPAddress`, и он только что успешно возвратил правильный адрес. dirkt 6 лет назад 1
@dirkt: я убежден. harrymc 6 лет назад 0
И для полноты я только что установил и попробовал `natpmpc`, который также отлично работает и возвращает правильный адрес для моей Fritzbox. И, конечно, все методы работают только с IPv4; для IPv6 вы * должны * получить глобально маршрутизируемый префикс от своего интернет-провайдера, поэтому видимый снаружи IPv6-адрес - это IPv6 компьютера (ов) в локальной сети - внешний видимый адрес маршрутизатора не имеет значения. У интернет-провайдеров, которые настаивают на использовании IPv6 NAT или подобных вещей, явно скрыты планы, и я бы избегал их, когда бы ни было возможно, dirkt 6 лет назад 0
@harrymc точное определение может отличаться, но на прикладном уровне всемирная паутина - HTTP (S). Существуют некоторые вспомогательные протоколы, такие как веб-сокеты, но, конечно, это не правда, что весь интернет - это веб eques 6 лет назад 0
@eques: Интернет превратился в Интернет, поэтому сегодня оба термина взаимозаменяемы (включая меня). Мой текущий ответ имеет более точную формулировку. harrymc 6 лет назад 0
Интернет предшествовал Интернету. Да, люди используют их взаимозаменяемо, но в более технически подкованных группах это различие сохраняется, хотя и менее точно. Интернет! = Интернет. eques 6 лет назад 0
11
Spiff

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

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

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

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

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

nslookup myip.opendns.com resolver1.opendns.com 
Вы также можете использовать `dig + short @ 8.8.8.8 oo.myaddr.l.google.com txt | grep edns`. Я нашел команду здесь: https://groups.google.com/d/msg/public-dns-discuss/uyzmMcHQBE0/x7o-uUVQFAAJ kasperd 6 лет назад 1
Ваша команда `nsslookup` терпит неудачу для меня. Я получаю `Server: resolver1.opendns.com`` Адрес: 2620: 119: 35 :: 35 # 53` `** сервер не может найти myip.opendns.com: NXDOMAIN` kasperd 6 лет назад 0
@kasperd: это работает только для IPv4, извините. Я избегал `dig`, так как он не на Windows. Хороший вопрос относительно `myaddr` для Google, хотя, я не знал об этом! Я полагаю, что эквивалент Windows `nslookup` был бы` nslookup -type = txt oo.myaddr.l.google.com ns3.google.com` Mehrdad 6 лет назад 1
Я выполнил эту команду на машине с IPv4 и IPv6, поэтому, если бы действительно поддерживалась IPv4, она должна была сработать. Проблема, по-видимому, заключается в том, что вы не можете указать `nslookup`, какую версию IP использовать для транспорта, но то, как это делает OpenDNS, означает, что вы должны это сделать. Без этого вы должны были бы предсказать, какую версию IP `nslookup` будет использовать для транспорта, и соответственно запросить A или AAAA. Если вы застряли с `nslookup`, вы можете использовать другого провайдера, такого как Google. Однако вы все равно получаете только одну версию протокола в ответе, и вы не можете выбрать какую. kasperd 6 лет назад 0
Я протестировал `nslookup -type = txt oo.myaddr.l.google.com ns3.google.com`, и это действительно работает. Но если у меня есть и IPv4, и IPv6, это не позволит мне выбрать, какой из них я смогу увидеть. Скорее всего, он покажет мне IPv6-адрес, и, скорее всего, я использую его, потому что я хочу знать IPv4-адрес NAT. Чтобы обойти это, нужно использовать службу, которая имеет имя только для IPv4 и имя только для IPv6, что также решает проблему NAT64. kasperd 6 лет назад 0
Интересно, спасибо за информацию! Mehrdad 6 лет назад 0
@kasperd: Сначала ищите `AAAA` для` ns3.google.com`, затем передайте полученный IPv6 в `nslookup` вместо передачи` ns3.google.com`. R.. 6 лет назад 0
@R .. Это действительно так же, как использование `-6`. В системах с двумя стеками это обычно будет по умолчанию. Если кто-то хочет IPv4-адрес, вы должны использовать запись `A`. Ни один из этих подходов не даст вам внешний IP-адрес NAT64. kasperd 6 лет назад 0
7
VL-80

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

Это также зависит от сложности сети. Возможно, ваш компьютер находится в сети с несколькими внешними 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
kasperd

Вы можете использовать DNS, а не HTTP. Например, вы можете использовать:

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

Это покажет адрес одноадресной рассылки DNS-сервера, который вы используете, и, если он поддерживает EDNS, он также покажет ваш IP-адрес, хотя, возможно, и усеченный.

Чтобы получить свой полный IP-адрес, вы можете обойти свой локальный DNS-сервер и отправить вышеуказанный запрос напрямую на ns .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
user1532080

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

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

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