Блог им. sck

Декодирование пакетов от тестового FAST UDP Multicast MOEX

    • 26 января 2024, 14:14
    • |
    • sck
  • Еще

Всем добрый день!

Подключился к тестовому контуру FAST от MOEX и возникли трудности с декодированием UDP пакетов, поэтому решил обратиться за помощью к сообществу.
Написал небольшой скрипт на NodeJS для получения данных от сервера FAST.
При попытке вывода получаемых сообщений в консоль вылезают нечитабельные символы (декодирую в ASCII, также проверял UTF8 — там тоже есть проблемы с читабельностью):
Декодирование пакетов от тестового FAST UDP Multicast MOEX

Пробую перехватывать эти же пакеты с помощью Wireshark и вижу следующее:
Декодирование пакетов от тестового FAST UDP Multicast MOEX

Кроме того пробовал загрузить в Wireshark дампы пакетов с ftp сервера ftp.moex.com/pub/FAST/ASTS/dump/ они имеют следующий вид:
Декодирование пакетов от тестового FAST UDP Multicast MOEX

Вопрос в следующем: действительно ли так должны выглядеть пакеты от тестового FAST UDP (как в Wireshark) или я делаю что то неправильно?

PS: на сколько я понимаю сообщение должно прилетать примерно такого вида:

8=FIXT.1.19=47535=d49=MOEX34=1355252=200116063011036670460=3423=1911=279261128=9347=UTF-855=RU000A1011E948=RU000A1011E922=4461=DBXXXX167=CORP107=SberIOS 001P-167R 1Y SX5E T-W15=RUB120=RUB5217=4B0217201481B001P5385=RPS969=0.01223=0.00015508=10005850=6489997595=648999350=37351=СберИОС 001Р-167R 1Y SX5E T-W5382=175383=СберИОС167541=20201204224=2020120464=20200116870=2871=27872=2871=8872=3721310=1561=11309=1336=PSOB326=179680=3625=N10=052

7 комментариев
То что вы привели в конце топика, это не fast, это FIX. И они действительно читабельны.

А FAST по UDP хрен «зачитаешь» глазами, за исключением некоторых текстовых полей и то не полностью. Там данные нужно распаковывать по специальному алгоритму и потом парсить
avatar
Андрей К, Спасибо за комментарий. Посоветуйте, пожалуйста, что можно почитать по теме декодирования FAST. Документацию на ftp биржи читал, но так и не понял по какому принципу декодировать, видимо сказывается отсутствие опыта в данном направлении. 
avatar
sck, да вроде знаете, гуглится много статей, например jettekfix.com/education/fix-fast-tutorial/

для меня сейчас это как холодный душ, всопмнить все это и написать высокопроизводительный FAST парсер со всеми нюансами ). Будут какие то локальные вопросы, задавайте

для начала попринтуйте seq_num FAST пакета и его template_id.
seq_num хоть не пакуется и не кодируется и инкрементируется, будет видно наглядно

template_id дешифруется тож достаточно быстро
avatar
Андрей К, благодарю!
avatar
sck, получилось сделать?
sck, Добрый день, такая же проблема с декодирование, случайно наткнулся на эти комметарии) 
 

Мне приходит такое сообщение (это шаблон сердцебиения): \xe1.\x01\x00\xc0\x10\xbc\x04]\xe1\x03,$\x07\x0be[\x0e\xc3

После того как убираю первые 4 байта (преамбулу). Получаю:
\xc0\x10\xbc\x04]\xe1\x03,$\x07\x0be[\x0e\xc3

Смотрю на первый байт С0 = 1100 0000. pmap = 1000 000, но в этом сообщение (сообщение сердцебиения) вообще нет опциональных полей.

Буду очень благодарен подсказке)
Сам шаблон:
<template name=«0» id=«2108» xmlns="http://www.fixprotocol.org/ns/fast/td/1.1"><string name=«MessageType» id=«35»><constant value=«0» /></string><string name=«BeginString» id=«8»><constant value=«FIXT.1.1»/></string><string name=«SenderCompID» id=«49»><constant value=«MOEX»/></string><uInt32 name=«MsgSeqNum» id=«34»></uInt32><uInt64 name=«SendingTime» id=«52»></uInt64></template>  
кстати если nodejs умеет импортировать c++ библиотеки, то проще конечно взять готовый парсер на c++ и попробовать его залинковать подключить в nodejs, если я корректно выразился 
avatar

теги блога sck

....все тэги



UPDONW
Новый дизайн