Блог им. karat39

Фишечка-рюшечка для протоколов. Wireshark

Введение

      Для меня в свое время стало огромным сюрпризом, что WireShark поддерживает lua. Это открывает отличные возможности для анализа сетевого траффика. Наверняка, не все об этом знают. Поделюсь некоторыми возможностями.

Для кого и для чего

    Речь пойдет об анализе сетевого траффика. В первую очередь, анализом траффика, пользуются алгоритмисты и разработчики для прямого доступом к рыночным данным. На нашей бирже задействованы целый ряд протоколов, под UDP — это в первую очередь FAST (протокол распространения рыночных данных), под TCP — это транзакционные протоколы FIX, TWIME, мульти протоколы (рыночные данные + транзакции) Bridge, Plaza.
   У таких разработчиков и алгоритмистов должны частенько, или периодически, вставать вопросы, что там вообще происходит с торговыми роботами. Во сколько пришли на сетевую карту данные, во сколько отправил заявки, во сколько получил ответы и тд. Ставить временные метки внутри программы и выводить их на экран бывает не совсем то что надо. Во первых, это своего рода лишние задержки выполнения задач, а это уже отвлечение от боевых условий. Во вторых, если железо поддерживает, лучше всего брать временные метки у железа и смотреть во сколько приходят данные с самого сетевого кабеля и во сколько уходят данные в сам сетевой кабель. Это уже будет хороший и точный уровень расчетов.

Решение задачи

     На мой взгляд, решение таких задач можно решить двумя путями.

1) Это создание своего сниффера. Программа будет висеть в системе, «слушать» весь траффик и отфильтровывать себе нужные сетевые пакеты, разбирать их, сохранять, выводить на экран и тд. Плюс такого подхода очевидный. При таком подходе можно узко заточить программу сниффер под свои задачи. Ну например, сниффить полученные котировки по FAST и выводить на экран только по фьючерсу RTS. Ну или, сниффить все исходящие пакеты, искать, которые пошли по протоколу TWIME, и выводить на экран свои посланные заявки только по фьючерсу RTS.
Минус такого подхода тоже очевиден. Трудозатраты. Иногда бывают задачи настолько простые, что писать под них софт не является целесообразным, хоть это займет и пару часов.

2) Второй способ гораздо проще. Берем готовый сниффер и записываем абсолютно весь сетевой траффик. Потом открываем его в программе анализаторе и изучаем. Примером такого софта, служит программа сниффер tcpdump. Анализатор Wireshark. Чтоб вы понимали, насколько затратен такой способ про ресурсам, небольшой пример. Чтобы записать весь траффик за определенный час по протоколу FAST, уйдет примерно гигабайтов 10, не меньше. А если это день разворота инструментов на рынке, то в два раза больше.

Wireshark

    Дальше будет для подготовленных специалистов. Которые понимают о чем речь. Я мигом пропущу, как записывать весь траффик, как накладывать фильтр на траффик и тд. Речь про поддержку lua. Оказывается он его поддерживает. И можно написать много скриптов. Например скрипт анализа пакета. Как только я это узнал, не за медлительно создал парсер fast, потом парсер twime, fix. Стало безмерно удобно пользоваться им.
   Небольшой пример, как lua упрощает жизнь.
1) Согласитесь, что когда вот так выводятся пакеты, становится гораздо читабельней. Не унылые протоколы TCP, UDP, а уже конкретное название потока данных. Так же в колонке INFO можно вывести дополнительные данные из самого пакета (в моем случае seq_num и template).
Фишечка-рюшечка для протоколов. Wireshark

2) Либо когда хотим заглянуть во внутрь сетевого пакета и посмотреть что в нем.
Фишечка-рюшечка для протоколов. Wireshark



3) Потом все эти колонки можно даже экспортировать в Excel, что тоже удобно.

Если вдруг кого заинтересовало, то начало мануала тут


  • Ключевые слова:
  • lua
★10
19 комментариев
Только удобнее его без gui использовать, на мой взгляд.
avatar
Lev, до вашего комментария, я даже не подозревал что есть консольный tshark, еще и с поддержкой lua, еще и не виндовый
я по старинке через tcpdump =))

но если речь про специфичное железо, боюсь он не зацепит его, то есть временные метки сетевой карты (hw timestamp)
avatar
Андрей К, если совсем честно, то я тоже часто забываю про wireshark и руки сами набирают tcpdump. Но у акулы больше возможностей, когда надо что-то хитрое отловить.
avatar
а еще лучше использовать правильные сетевухи, дающие таймстемпы пакетов.
avatar
God, я вроде об этом постарался упамянуть. Что это будет самый точный расчет. И tcpdump может цеплять это время
avatar
Андрей К, ваершарк вообще не применим в реальной системе, только для тестов. Потому что он сильно тормозит сетевой траффик когда работает его снифер.
avatar
God, вы про консольный?
avatar
Андрей К, с обоими такая фигня. на винде.
avatar
Разве протокол FIX и так не открыт?
avatar
Евгений, да, wireshark умеет его парсить. Но иногда нужно выгрузить в табличный ексель. Тут луа помогает
avatar
Андрей К, а зачем его парсить? Он же текстовый?
avatar
Евгений, ну когда нужно глазами быстро пробежать весь сетевой траффик, гораздо читабельный уже распарсенные поля смотреть, чем в наборе символов выискивать значения и их интерпретацию
avatar
Реально что-ли парсер FAST на LUA написал? Вот это жесть))
avatar
Cristopher Robin, какие то потоки шаблоны частично, какие то полностью, очень надо было
avatar
Андрей К, нашел способ читать malwared packets? Там если в заголовке некоторая последовательность байтов встречается, он такие фреймы упорно отказывается считать как UDP
avatar
Cristopher Robin, слушай, а я впервые об этом слышу. Надо почитать. Наверное потому что с этим не сталкивался. В парсере lua заголовки пакетов не трогает, не привязывается к сетевому протоколу (tcp, udp), у него там привязка по сетевому порту идет и все.
avatar
Андрей К, фиолетовым цветом в гуи подсвечивает, обрати внимание. Если делать экспорт из pcap стандартными стредствами, он такие пакеты выкидывает и получается битый фид.
avatar
Cristopher Robin, спасибо, по изучаю сей момент. Но фиолетовым ни разу не видел. Может под windows и linux сниффы по разному как то пишут.
avatar
Андрей К, поправочка
не привязывается к 

протоколу трансп. уровня
avatar

теги блога Андрей К

....все тэги



UPDONW