Получить мой WAN IP-адрес - PullRequest
3 голосов
/ 07 октября 2008

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

Ответы [ 4 ]

8 голосов
/ 07 октября 2008

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

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

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

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

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

2 голосов
/ 07 октября 2008

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

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

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

2 голосов
/ 07 октября 2008

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

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

1 голос
/ 07 октября 2008

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

<?php
echo $_SERVER['REMOTE_ADDR'];
?>
...