» » Как узнать свой внешний IP из программы

 

Как узнать свой внешний IP из программы

Автор: admin от 31-08-2017, 17:31, посмотрело: 109

Как узнать свой внешний IP из программы


При написании различных программ для работы с сетью, особенно p2p систем, время от времени возникает необходимость узнать внешний IP своего компьютера из программы (тот адрес, по которому Ваш компьютер доступен из Большого Интернета). Часто возникает искушение пойти легким путем и использовать внешние WEB-сервисы, которые по http возвращают Вам IP, или самому развернуть таковой. Хотя такой способ решения задачи и работоспособен, он тем не менее, имеет ряд недостатков:




  • При использовании собственного сервера – нужно где-то его держать и поддерживать, заодно и c соответствующим доменным именем. В случае выхода его из строя, или принудительного отзыва домена, вся Ваша p2p сеть выходит из строя.

  • При использовании внешнего сервера – Вы вводите зависимость своей системы как от его работоспособности, так и от формата ответов, который вообще никак не стандартизирован, и который владелец сервера может поменять в любой момент. С теми же последствиями для вашей сети.

  • http, которым советуют пользоваться – базируется на tcp, то есть протокол сравнительно тяжеловесный, требующий установки соединения и тп. В общем, пользоваться можно, но перерасход ресурса как компьютера, так и сети налицо.





rfc5389.



Это легковесный протокол, основанный на UDP, и при его использовании, получение внешнего IP через STUN не требует установления TCP-соединения и тп. По сравнению с www, это и снижает нагрузку на вычислительные ресурсы, и сокращает время определения адреса. Всего два пакета, каждый примерно 50 байт – и адрес известен.



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



Итак, лёгкий и стандартный протокол, оказывается, есть. Теперь нужен STUN-сервер, к которому Ваша программа будет отправлять запросы. К счастью, такие сервера есть, каждая уважающая себя VOIP-компания держит таковой. Нам известно о нескольких сотнях таких серверов, что существенно больше, чем публичных web-серверов аналогичного назначения. И все – стандартные, и не надо к каждому из них «особый подход» в декодировании ответа. Ниже приведёт список известных нам публичных STUN-серверов.



Теперь, когда с протоколом и серверами определились, осталось где-то найти STUN-клиент, который легко интегрировать в Вашу программу. Здесь мы может Вам посоветовать взять из нашего проекта Emercoin файл stun.cpp, содержащий законченную подсистему определения внешнего IP через STUN. Благо что проект Open Source, и распространяется под лицензией GPL.



Файл содержит функцию GetExternalIPbySTUN(), которая псевдослучайным образом в цикле опрашивает список предопределённых STUN-серверов до тех пор, пока не получит ответ от какого-то из них. Таким образом, выход из строя части серверов просто замедлит работу подсистемы, но не приведёт к отказу в обслуживании. А так как список содержит более двухсот серверов, вероятность выхода из строя всех их одновременно представляется ничтожной.



Псевдослучайный порядок обхода списка гарантирует, что не существует такой конфигурации выхода из строя части серверов, которая приведёт к замедлению работы всех клиентов одновременно. Кроме того, этот алгоритм рассеивает запросы по множеству серверов, что исключает перегрузку какого-то выделенного сервера. То есть нагрузка равномерно распределяется по всему пулу серверов.



Также предприняты меры для анонимизации запросов, путём генерации случайного ID каждого запроса. В комбинации с рассеиванием по серверам, владельцу любого сервера становится практически невозможно «вычислить» Вашу p2p сеть. Он получает менее 0.5% запросов, и не может однозначно отделить Ваши запросы от запросов, исходящих от оборудования IP-телефонии.





Ниже приведёт список известных нам публичных STUN-серверов в формате:



Источник: Хабрахабр

Категория: Программирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *