Как получить ip адрес компьютера c

Обновлено: 02.07.2024


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

Поколение WWW сильно удивится, но такой протокол давно существует, стандартизирован и широко применяется в IP-телефонии, и кое-где для других сервисов мультимедиа. Протокол называется STUN и специфицирован в 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-телефонии.

Читайте также: