Нет, более простого пути нет. Ваш компьютер действительно не знает публичный IP-адрес, за которым он стоит - между ним и общедоступным Интернетом может быть любое количество уровней NAT. Все, что ему известно, это то, что он принимает сообщения по адресу 192.168.2.100 и отправляет исходящие сообщения через шлюз по адресу 192.168.2.1. Он не знает, что происходит после того, как пакет попадает на шлюз.
На вашем компьютере нет информации о NAT или маршрутизации между ним и Интернетом, кроме того, какой переход является следующим (обычно это внутренний IP-адрес вашего маршрутизатора). Он просто не знает, на каком переходе внутренний адрес транслируется в какой публичный адрес.
Следовательно, не существует простой функции или метода, которые вы могли бы вызвать на любом языке.
Единственные два способа - спросить кого-нибудь еще. . Как?:
Я не могу придумать, как бы вы разрешили свой IP-адрес с точки зрения другой машины. Вот пара мыслей:
К сожалению, ваш сервер, скорее всего, будет совершенно не обращать внимания на то, каким выглядит его собственный Внешний адрес (так как он может быть установлен в дальнейшем восходящем потоке через какой-то маршрутизатор / шлюз)
Вы могли взгляните на эту ссылку
http://ip-address.domaintools.com/myip.xml
Это может быть немного проще для синтаксического анализа, чем то, что вы сейчас делаете.
Некоторые маршрутизаторы могут сообщать вам свой внешний IP-адрес через UPnP, или, более конкретно, протокол IGD . Если у вас есть маршрутизатор с поддержкой UPnP, вы можете попробовать это. IStaticPortMapping :: get_ExternalIPAddress звучит многообещающе.
Устройства с поддержкой SNMP также могут сообщать вам свои IP-адреса. Запрашиваемый OID: IP-MIB :: ipAdEntAddr .
То, как вы это делаете, вероятно, ничуть не хуже других.
Вы говорите, что у вас есть общедоступный FTP-сайт - есть ли у вас там еще и веб-сайт? Другой вариант - предоставить вашему локальному компьютеру доступ к странице php на этом общедоступном сайте. Эта страница php может подтвердить, что это вы, а затем использовать $ _SERVER ['REMOTE_ADDR'] для записи вашего внешнего IP-адреса.
Я всегда использую curl http://whatismyip.org
, чтобы получить свой публичный IP-адрес, находясь за NAT.
Если вы хотите получить возможный IP-адрес, который кажется удаленному сайту при обработке вашего трафика, то единственный способ - это получить доступ к удаленному сайту. Во многих ситуациях ваш компьютер может не знать, что IP-адрес изменяется прокси-сервером или NAT-сервером.
Не совсем то, что вы просили, но все же применимо к тому, что вы хотите. Я устанавливаю GMail Notifier на своем домашнем компьютере и перехожу на страницу активности учетной записи, чтобы узнать, с какого IP-адреса осуществляется доступ к моей учетной записи Google. Надежно, просто и работает.
Обратите внимание на изобретение велосипеда, для этого существует стандартный протокол , STUN (с уже существующими реализациями). См. Также Программное обнаружение общедоступного IP-адреса .
Вы также можете получить доступ к этой странице, чтобы получить свой IP