Программно определить тип маршрутизатора NAT - PullRequest
4 голосов
/ 22 декабря 2011

Мне нужно программно определить тип NAT маршрутизатора в моей программе. Я посмотрел некоторые ответы, связанные с STUN, и информацию, связанную с UPnP, на SO. Но не получил однозначных ответов.

Я посмотрел на STUN RFC (rfc 5389), и он не указывает, как определить тип NAT. В нем упоминается, что его предыдущая версия (RFC 3489) предоставляла механизм для определения типа NAT. Но также упоминает, что

Кроме того. Классический алгоритм STUN для классификации типов NAT оказался неисправным, так как многие NAT не вписывались точно в типы, определенные там.

Учитывая выше, не могли бы вы посоветовать, как мне следует продолжить определение типа NAT маршрутизатора в моем программном обеспечении. Кроме того, теперь, когда RFC 3489 устарел, есть ли другие способы?

Заранее спасибо.

1 Ответ

5 голосов
/ 22 декабря 2011

RFC 3489 был разделен на три различных RFC:

RFC 5389 - базовый протокол STUN. Базовый протокол запроса привязки STUN и ответ привязки в основном совпадают с RFC 3489. Заголовок протокола обновляется волшебным файлом cookie, занимающим часть поля идентификатора транзакции. Некоторые атрибуты STUN переопределяются. Добавлено несколько новых (в частности - XOR_MAPPED_ADDRESS). Некоторые изменения в том, как выполняется аутентификация STUN. Обсуждение поведения и классификации NAT перенесено в RFC 5780.

RFC 5780 - «Обнаружение поведения Ната с использованием STUN». Основное изменение в обнаружении типа NAT состояло в том, чтобы отличать поведение сопоставления портов NAT от поведения фильтрации NAT. Принимая во внимание, что RFC 3489 попытался бы классифицировать NAT в одно из нескольких сегментов («конус», «ограниченный порт», «симметричный») - что было слишком общим для описания NAT.

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

Из любопытства, я полагаю, полезно знать, работает ли ваше приложение за NAT. Но как знание поведения NAT повлияет на ваш путь к коду?

Бесстыдный плагин - используйте код моего сервера STUN , который размещен на GitHub.

...