Получить мой WAN IP-адрес

Как я могу программно получить IP-адрес моей сети, видимый из Интернета? Очевидно, это свойство, к которому мой маршрутизатор имеет доступ, когда он подключается к интернет-провайдеру. Есть ли способ получить эту информацию от маршрутизатора, используя стандартный протокол. Мой единственный другой вариант - либо найти WS, который возвращает мой IP-адрес (на удивление сложно сделать), либо просто перейти к чему-то вроде whatismyip.com и удалите весь HTML (очень грязный и подверженный изменениям). Есть ли другой способ???


person Community    schedule 07.10.2008    source источник
comment
Вы можете использовать api.ipify.org   -  person Liviu Trifoi    schedule 18.09.2016


Ответы (4)


Не очищайте whatismyip.com, см. здесь, как можно вызвать их API, который просто возвращает ваш адрес.

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

Обратите внимание, что веб-сервер может не видеть ваш реальный IP-адрес WAN, потому что:

  • ваш интернет-провайдер может прозрачно проксировать HTTP-трафик, и сервер увидит IP-адрес прокси-сервера. В этом случае вам, как правило, потребуется найти и проанализировать X-Forwarded-For заголовок.

  • или, как заметил Олаф, между вами и широко открытым Интернетом может быть другой маршрутизатор NAT, другими словами, адрес WAN вашего маршрутизатора находится в частной сети. Лучшее, что вы получите от такого сервиса, как whatismyip.com, — это IP-адрес самого удаленного маршрутизатора NAT.

person Paul Dixon    schedule 07.10.2008
comment
По состоянию на 8 января 2014 г. whatismyip.com/automation.asp возвращает ошибку 404. Кто-нибудь знает, где новая документация по API есть? - person thom_nic; 08.01.2014

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

http://www.rohitab.com/discuss/index.php?showtopic=31901

person Fuzzy76    schedule 07.10.2008

Я проголосовал за ответ Пола Диксона, потому что он казался полным, но есть еще один аспект:

  • Ваш интернет-провайдер может предоставить вам частные адреса — это действительно происходит с некоторыми интернет-провайдерами. В зависимости от того, что вы ожидаете, вам может понадобиться маршрутизируемый адрес, которого у вас нет.
  • Информация о прокси-сервере, которую упоминает Пол (HTTP-Header X-Forwarded-For), может быть немаршрутизируемым адресом, если у вас есть прокси-сервер.
  • на основе смешивания всех этих аспектов (получение немаршрутизируемого адреса от вашего интернет-провайдера и наличие прокси-сервера у себя) вы можете получить странные результаты.

Эти аспекты не являются типичной повседневной ситуацией, но в зависимости от ваших потребностей вы можете принять их во внимание.

person Olaf Kock    schedule 07.10.2008

Я не вижу спецификацию языка, но я сделал это здесь, на питоне: Поиск общедоступного IP-адреса в Python?
По сути, нет способа сделать это, не полагаясь на внешний сервер, в этом случае я использую http://www.whatismyip.com/automation/n09230945.asp, которые предоставляют только IP-адрес. В качестве альтернативы вы можете использовать свой собственный скрипт, который на PHP будет выглядеть так:

<?php
echo $_SERVER['REMOTE_ADDR'];
?>
person UnkwnTech    schedule 07.10.2008
comment
Обратите внимание, что это не принимает во внимание прокси-серверы - см. ответ Пола Диксона на этот вопрос: возможно, вы захотите проанализировать http-заголовки. - person Olaf Kock; 07.10.2008