как wireshark идентифицирует трафик DNS, если он также использует порт Radius в порту UDP? И как я могу сказать?

Моя программа выполняет анализ пакетов. Теперь у меня проблема с DNS/Radius. DNS использует UDP-порт 53. Radius использует UDP-порт 1645/1646/1812/1813.

Логика такова, если я вижу 53, то это пакет DNS; если я вижу 1812... это пакеты Radius. Затем возникает проблема, некоторые пакеты DNS также используют порты Radius, например. Порт UDP src 53/dst 1812 или наоборот. Тогда моя программа не может справиться с этим.

Но wireshark не путается, мне интересно, как он способен знать истинный протокол. Пытается ли он декодировать полезную нагрузку? а потом рассказывать? или подчеркивание libpcap или что-то еще может указать истинный тип протокола. Итак, если я могу использовать код из libpcap, предоставляет ли libpcap функциональность для указания протоколов переноса?

Кто-нибудь может помочь? Я некоторое время гуглил, но пока не получил результатов.

Спасибо Канг


person user5509213    schedule 31.10.2015    source источник


Ответы (2)


Wireshark использует различные методы для идентификации протоколов. Для DNS и RADIUS это делается на основе номера порта. Код, который делает это, сначала ищет меньший в числовом отношении номер порта и, если он не находит анализатора для этого номера порта, ищет в числовом отношении больший номер порта, поэтому пакет, проходящий между портами 53 и 1812, будет идентифицирован как DNS. а не RADIUS, потому что 53, порт для DNS, численно меньше, чем 1812, порт для RADIUS.

Если между портами 1812 и 53 возникнет RADIUS-трафик, Wireshark запутается.

Единственный способ обойти это — заставить диссектор DNS попытаться просмотреть данные пакета и угадать, является ли это DNS, или заставить диссектор RADIUS попытаться просмотреть пакет и угадать, является ли он RADIUS и, если это не пакет для этого диссектора вернуть индикацию «это не для меня», чтобы можно было попробовать другой диссектор.

Не существует никакого волшебного решения, которое гарантировало бы правильную идентификацию всех протоколов, работающих через TCP или UDP. Есть только эвристики, основанные на номерах портов и содержимом пакетов; они могут получить правильный ответ в 99 44/100% случаев, но все равно будут те 56/100% времени, когда это не сработает, и вам придется вмешиваться вручную (например, с помощью «Декодировать Как..." в Wireshark или эквивалент командной строки -d в TShark).

И нет, как указал Штеффен Ульрих, libpcap не делает этого за вас; разные приложения, использующие libpcap (tcpdump, Wireshark и т. д.), могут делать это по-разному.

person Community    schedule 31.10.2015

libpcap не предоставляет такой функциональности. Во-первых, wireshark просматривает пакеты и определяет их структуру, но ограничивает поиск используемыми портами/протоколами. Другое дело, что обычно вы не найдете пакет на радиус-сервер, исходящий из порта 53, или пакет на DNS-сервер из порта 1812, потому что клиенты обычно неявно используют эфемерный порт, который намного выше.

person Steffen Ullrich    schedule 31.10.2015