Как узнать тип NAT, за которым стоит данный интерфейс - PullRequest
4 голосов
/ 15 декабря 2008

Я хотел бы узнать тип NAT (FullCone, Restricted Cone, Port Restricted cone, Symmetric), за которым находится заданный сетевой интерфейс.

Я тестировал разные инструменты (http://freshmeat.net/projects/jstun/, http://code.google.com/p/boogu/), но они сообщают о разных результатах для одного и того же интерфейса.

Я ищу окончательный ответ в Python (или других языках, второй вариант - Java, если ничего не доступно).

Ответы [ 3 ]

3 голосов
/ 09 августа 2013

Я второй ответ от @ S.Lott: Невозможно использовать STUN (или любой другой протокол), чтобы со 100% -ной уверенностью определить, за каким типом NAT вы находитесь.

Проблема (как я недавно наблюдал) заключается в том, что NAT иногда может действовать как Адресно-зависимый (Симметричный), а иногда как Независимо от конечной точки (Полный, Ограниченный или Ограниченный по порту) конус).

Когда вы думаете об этом, зависимость от адреса означает, что когда вы отправляете пакеты из одного сокета на клиенте за NAT на два разных сервера, то NAT создаст два пользовательских общедоступных адреса: кортежи портов для каждого из серверов. , В моем случае эти привязки казались совершенно случайными, но если диапазон был небольшим, иногда случалось, что эти кортежи были фактически равны! Что запутало тест.

В то время я использовал эту библиотеку , и иногда она говорила мне, что поведение NAT было зависимым от адреса, а иногда оно было независимым от конечной точки (переключение между ними также казалось совершенно случайным, иногда произошло после того, как я перезапустил устройство, иногда через некоторое время ...).

Это случилось со мной на мобильном устройстве с Slovak Telekom , компанией, в основном принадлежащей Deutsche Telekom , поэтому я думаю, что проблема будет, по крайней мере, общеевропейской.

Я бы сказал, что правило здесь таково: если тест STUN говорит вам, что вы находитесь за Symmetric NAT, чем это имеет место, но если он говорит вам об обратном, вы не можете быть уверены на 100%.

Последнее замечание, простой способ проверить поведение вашего NAT в отношении TCP - это ввести «какой у меня IP-адрес» в google, а затем открыть сначала (скажем) пять страниц. Если страницы не соответствуют вашему IP-адресу, ваше поведение NAT будет зависимым от адреса или зависимым от адреса и порта (симметричным). Но опять же, если они соответствуют, вы просто не можете быть уверены.

3 голосов
/ 16 декабря 2008

http://en.wikipedia.org/wiki/STUN

Устройства NAT реализованы в виде количество разных типов адресов и схемы отображения портов. STUN делает не работает правильно со всеми из них.

Это достаточно определенно? Это всего лишь цитата из Википедии, но, похоже, ваш запрос физически невозможен.

0 голосов
/ 12 марта 2012

Как говорит @ S.Lott, STUN - ваш протокол первого выбора.

А потом, STUN - это просто протокол. Вот мой совет:

1 STUN теперь имеет две версии: старая версия RFC3489 - это упрощенный протокол, который позволяет приложениям обнаруживать наличие и типы NAT и межсетевых экранов между ними и общедоступный интернет (поэтому он в основном и только для определения типа NAT); и новая версия - RFC5389 - это инструмент для других протоколов в работе с обходом NAT.

2 Также имеется расширение реле для STUN с именем TURN RFC5766 . TURN позволяет хосту управлять работой ретранслятора и обмениваться пакетами со своими одноранговыми узлами, используя ретранслятор. TURN отличается от некоторых других протоколов управления ретрансляцией тем, что позволяет клиенту обмениваться данными с несколькими одноранговыми узлами, используя один адрес ретрансляции.

Инструменты:

Примечание: Поскольку TURN является расширением новой версии STUN, сервер TURN также поддерживает новый запрос STUN по RFC5389.

...