Как я могу программно получить IP-адрес моей сети, видимый из Интернета? Очевидно, это свойство, к которому мой маршрутизатор имеет доступ, когда он подключается к интернет-провайдеру. Есть ли способ получить эту информацию от маршрутизатора, используя стандартный протокол. Мой единственный другой вариант - либо найти WS, который возвращает мой IP-адрес (на удивление сложно сделать), либо просто перейти к чему-то вроде whatismyip.com и удалите весь HTML (очень грязный и подверженный изменениям). Есть ли другой способ???
Получить мой WAN IP-адрес
Ответы (4)
Не очищайте whatismyip.com, см. здесь, как можно вызвать их API, который просто возвращает ваш адрес.
Если вы не используете это, вы должны написать что-то подобное самостоятельно, то есть хост за пределами вашего маршрутизатора, который может сообщить ваш кажущийся адрес.
Обратите внимание, что веб-сервер может не видеть ваш реальный IP-адрес WAN, потому что:
ваш интернет-провайдер может прозрачно проксировать HTTP-трафик, и сервер увидит IP-адрес прокси-сервера. В этом случае вам, как правило, потребуется найти и проанализировать X-Forwarded-For заголовок.
или, как заметил Олаф, между вами и широко открытым Интернетом может быть другой маршрутизатор NAT, другими словами, адрес WAN вашего маршрутизатора находится в частной сети. Лучшее, что вы получите от такого сервиса, как whatismyip.com, — это IP-адрес самого удаленного маршрутизатора NAT.
Если ваш маршрутизатор поддерживает snmp, вы можете использовать его, чтобы спросить его о внешнем IP-адресе. Небольшой пример находится здесь:
http://www.rohitab.com/discuss/index.php?showtopic=31901
Я проголосовал за ответ Пола Диксона, потому что он казался полным, но есть еще один аспект:
- Ваш интернет-провайдер может предоставить вам частные адреса — это действительно происходит с некоторыми интернет-провайдерами. В зависимости от того, что вы ожидаете, вам может понадобиться маршрутизируемый адрес, которого у вас нет.
- Информация о прокси-сервере, которую упоминает Пол (HTTP-Header X-Forwarded-For), может быть немаршрутизируемым адресом, если у вас есть прокси-сервер.
- на основе смешивания всех этих аспектов (получение немаршрутизируемого адреса от вашего интернет-провайдера и наличие прокси-сервера у себя) вы можете получить странные результаты.
Эти аспекты не являются типичной повседневной ситуацией, но в зависимости от ваших потребностей вы можете принять их во внимание.
Я не вижу спецификацию языка, но я сделал это здесь, на питоне: Поиск общедоступного IP-адреса в Python?
По сути, нет способа сделать это, не полагаясь на внешний сервер, в этом случае я использую http://www.whatismyip.com/automation/n09230945.asp, которые предоставляют только IP-адрес. В качестве альтернативы вы можете использовать свой собственный скрипт, который на PHP будет выглядеть так:
<?php
echo $_SERVER['REMOTE_ADDR'];
?>