Андрей К
Андрей К личный блог
24 июня 2017, 14:26

Фишечка-рюшечка для протоколов. 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, что тоже удобно.

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


19 Комментариев
  • Lev Novikov
    24 июня 2017, 14:52
    Только удобнее его без gui использовать, на мой взгляд.
      • Lev Novikov
        24 июня 2017, 15:22
        Андрей К, если совсем честно, то я тоже часто забываю про wireshark и руки сами набирают tcpdump. Но у акулы больше возможностей, когда надо что-то хитрое отловить.
  • God
    24 июня 2017, 16:17
    а еще лучше использовать правильные сетевухи, дающие таймстемпы пакетов.
      • God
        24 июня 2017, 16:27
        Андрей К, ваершарк вообще не применим в реальной системе, только для тестов. Потому что он сильно тормозит сетевой траффик когда работает его снифер.
          • God
            24 июня 2017, 17:12
            Андрей К, с обоими такая фигня. на винде.
  • Евгений
    24 июня 2017, 18:21
    Разве протокол FIX и так не открыт?
      • Евгений
        24 июня 2017, 21:08
        Андрей К, а зачем его парсить? Он же текстовый?
  • Cristopher Robin
    25 июня 2017, 08:03
    Реально что-ли парсер FAST на LUA написал? Вот это жесть))
      • Cristopher Robin
        25 июня 2017, 14:48
        Андрей К, нашел способ читать malwared packets? Там если в заголовке некоторая последовательность байтов встречается, он такие фреймы упорно отказывается считать как UDP
          • Cristopher Robin
            26 июня 2017, 11:31
            Андрей К, фиолетовым цветом в гуи подсвечивает, обрати внимание. Если делать экспорт из pcap стандартными стредствами, он такие пакеты выкидывает и получается битый фид.
          • flextrader
            27 июня 2017, 20:32
            Андрей К, поправочка
            не привязывается к 

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

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн