Пользовательский диссектор, поля зависят от порядка пакетов - PullRequest
0 голосов
/ 29 июня 2018

Ситуация

Я пишу специальный диссектор Луа для протокола. Мы фиксируем protocl с помощью специального оборудования, которое дает нам файлы PCAP. Протокол состоит из 64-битных пакетов.

Протокол имеет бит «стартовая транзакция», который указывает начало 8-пакетной транзакции, и в зависимости от того, где мы находимся в этой транзакции, части пакета имеют различное значение, то есть в пакете с битом стартовой транзакции. пакет начинается с заголовка , затем следующий пакет содержит код сообщения в том же месте. Всего существует 8 различных способов интерпретации одного и того же смещения пакета в зависимости от того, где мы находимся в транзакции.

Я хочу разобрать протокол, и поле зависит от того, где мы находимся в транзакции.

Что я пробовал

Я создал простую переменную счетчика последовательности вне функции анализатора, которая сбрасывается, если встречается бит запуска транзакции. и это считается до 8. В зависимости от этого счетчика я выбираю, какие протополи я должен добавить в дерево.

Этот вид работ, если я показываю все различные поля в виде столбцов, они имеют правильные значения в нужных местах. Тем не менее, когда я щелкаю по пакету, детали пакета показывают нет или неправильные имена полей, в зависимости от порядка, в котором я щелкаю пакеты. Например, если я щелкаю пакет с «началом транзакции», тогда информация о пакете правильно отображает данные как «заголовок». Однако, если я затем щелкну любой другой пакет, поле будет показано как «код сообщения».

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

Подходит ли wireshark для того, чтобы основывать способ, которым он анализирует определенный пакет, исключительно на том порядке, в котором он был получен?

Ответы [ 2 ]

0 голосов
/ 21 января 2019

У меня была похожая ситуация с этим.

Моим решением было просто сохранить нужную мне информацию - в вашем случае счетчик - в таблице вне функции диссектора, используя текущий номер пакета (pinfo.number) в качестве индекса для данных.

Как сказал @Christopher Maynard, Wireshark передаст пакеты по порядку при первом проходе. Использование этой информации в сочетании с pinfo.visited позволит вам сохранить информацию счетчика при первом проходе.

Есть одна небольшая оговорка. Если в файле .pcap записаны какие-либо другие протоколы, они будут отображаться в виде пробелов в таблице, поскольку ваш диссектор будет активирован только для указанного протокола. Это исправлено путем вставки простой проверки на ноль при итерации по таблице. (Я не уверен, будет ли это проблемой в вашем случае, но я подумал, что это стоит обсудить)

P.S. Я не думаю, что Wireshark подходит для разбора пакетов по порядку их получения, но мы можем заставить его работать!

0 голосов
/ 30 июня 2018

Подходит ли wireshark для того, чтобы основывать способ, которым он анализирует определенный пакет, исключительно на том порядке, в котором он был получен?

Wireshark будет обрабатывать пакеты по порядку только на 1-м проходе, и вы можете определить, будет ли это первый раз, когда пакет рассекается, используя pinfo.visited. Это будет ложно в первый раз, когда пакет рассекается, и верно для всех остальных раз.

Но одного этого будет недостаточно; вам также нужно сохранить счетчик (1-8) пакета, чтобы вы знали, как снова анализировать этот конкретный пакет при следующем разборе пакета, что может произойти в любое время. В случае диссекторов Си это обычно делается с использованием конструкций разговора, таких как conversation_add_proto_data() и conversation_get_proto_data(), но в этом случае я не совсем уверен, является ли это лучшим подходом или даже поддерживается ли он с диссекторами Lua. Тем не менее, это может быть хорошим местом для начала? Посетите doc/README.request_response_tracking или Wireshark Lua вики-страницы или запросите на Wireshark Q & A возможные идеи от других в сообществе Wireshark. (Прошло некоторое время с тех пор, как я написал диссекторы Lua, и я не помню, что, если вообще, есть в Lua, чтобы удовлетворить ваши потребности.)

...