#networking #tcp #network-programming #application-layer
#сеть #tcp #сетевое программирование #прикладной уровень
Вопрос:
Я пишу программу, которая может обнаруживать протоколы, используемые в сетевых пакетах. Для каждого полученного пакета он будет пытаться обнаружить протоколы на таких уровнях, как сеть и транспорт. Обнаружение протоколов на этих двух уровнях было очень простым, потому что где-то в пакете у нас есть несколько байтов, которые сообщают нам о протоколах. Но для прикладных уровней это намного сложнее, насколько я знаю. Нет, где в HTTP-пакете не упоминается протокол (насколько я знаю). И еще одна трудность при обнаружении протоколов прикладного уровня заключается в том, что возможно, что весь HTTP-запрос или ответ занимает более одного пакета, и объединить несколько пакетов намного сложнее.
Я хочу знать теоретически, как я могу обнаружить эти протоколы.
Комментарии:
1. Многие приложения даже имеют собственные протоколы прикладного уровня. Например, в Skype это было до того, как Microsoft купила его и все изменила. Многие люди спрашивали о том, как это расшифровать, но это всегда держалось в секрете.
Ответ №1:
К сожалению, простого ответа нет. Хотя существует не так много протоколов сетевого и транспортного уровней, а те, которые существуют, хорошо стандартизированы, уровень приложений намного сложнее.
Один из способов угадать протокол приложения — посмотреть на различные «подсказки», такие как номер порта, наличие определенных строк в определенных местах (например, «HTTP»), длины пакетов и т.д. Но это не пуленепробиваемый. Я могу легко запустить некоторый пользовательский протокол на порту 80, который содержит «HTTP» в полезной нагрузке, но не является HTTP. Вот почему даже специализированные инструменты, такие как wireshark, иногда не могут определить правильный протокол. Кстати, вы могли бы использовать исходный код wireshark для получения подробной информации о том, как он анализирует различные протоколы.
Что касается протоколов, отправляемых более чем в одном пакете — это проще. Ваш анализатор должен обрабатывать TCP как потоковый протокол, которым он является. Отдельные пакеты не имеют смысла в TCP, и ваш анализатор должен отслеживать поток по нескольким пакетам.
Комментарии:
1. » Хотя протоколов сетевого и транспортного уровней не так много, а те, которые существуют, хорошо стандартизированы «, Существуют десятки протоколов транспортного уровня. См. Страницу IANA, на которой поддерживаются присвоенные номера интернет-протоколов . Легко просто перевести номер протокола в заголовке IPv4 или значение следующего заголовка в заголовке IPv6 в таблицу со страницы IANA.