@anton13ms

Как отправить UDP пакет через командную строку Linux?

Имеется устройство, на котором периодически "уходит" время.
Время синхронизируется с помощью фирменной программы.
Это не очень удобно, по этому возникла мысль автоматизировать этот процесс.
Проблема в том, что я не особо понимаю в передачи сетевого трафика.
Программой Wireshark перехватил трафик, который генерируется при нажатии кнопки синхронизации в фирменном приложении.
В Data вижу нечно подобное:
Data: a5a5a5a5a5a5a5a50080feff05005202000001800084018f…


Подскажите пожалуйста, как это заслать через командную строку или объясните почему ни чего ен получится?
  • Вопрос задан
  • 1723 просмотра
Решения вопроса 1
CityCat4
@CityCat4
//COPY01 EXEC PGM=IEBGENER
Окей, гугл
libdnet

Хотя конечно же можно и самому налабать простую программку, которая выдает по UDP (обычно такие вещи идут по UDP) данное сообщение. Только надо учесть, что там не просто буквоцифры, а может быть целый протокол, в котором еслит тупо реплеить - нифига не сработает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Просто послать строку проблем нет (ip и порт меняете на свои):
echo -ne '\xa5\xa5\xa5...' > /dev/udp/192.168.0.1/5000

Тут сложнее разобраться в формате строки, что там за данные и как их подготовить.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
или объясните почему ни чего ен получится?

Потому что передача по сети - это протокол обмена. И это не UDP или TCP, это протокол более высокого уровня. Протокол обмена должны поддерживать обе стороны, иначе это будет разговор слепого с глухим. Протокол включает в себя формат пакета/потока (список данных, описание данных и двоичного представления этих данных). Без знания протокола вряд ли получится что-то передать так, что бы принимающая сторона это восприняла как свой родной пакет и предприняла бы соответствующие действия.
Протоколы могут быть двоичные и текстовые. В текстовом протоколе (HTTP, SMTP, ...) визуально видны части пакета и в принципе по анализу перехваченных данных можно сделать какие-то выводы.
В двоичном протоколе без описания формата вряд ли что-то можно разобрать. Разве что что-то очень простое. У вас двоичный протокол.
Поэтому, обычно, что бы что-то отправить по какому-то протоколу требуется специализированная утилита, реализующая этот протокол. Например для HTTP утилита - это браузер или какой-нибудь curl.
Бывает, что протокол открытый, т.е. описание доступно в свободном доступе (или его можно купить). Так же часто используются закрытые протоколы, описание которых есть только у его разработчиков. Если у вас открытый протокол то шансы что-то скостылить есть.

Поищите у производителя устройства (спросите на форуме поддержки) фирменную утилиту работающую из командной строки или описание протокола (или конкретно данного пакета для установки времени).

Раз у вас пакет установки времени, то в данных должно присутствовать время. Это может быть какой-то вариант timestamp, например Unix timestamp. Можете попробовать поискать в дампе таймстамп на момент отправки пакета. Имея несколько вариантов пакета можно попытаться сделать какой-то его анализ и попробовать разобрать пакет на составляющие его поля. Сделать реверс инжиниринг.

Еще немного. Обычно для установки времени не достаточно просто отправить 1 пакет с новым временем. Т.е. можно и так, конечно. Но в этом случае потенциально может быть большая не точность, т.к. доставка пакета не моментальна, могут быть задержки при передаче и приеме и все это практически не предсказуемо. И когда приемная сторона установит у себя полученное время, то это время уже может стать не точным. Поэтому для минимизации побочных эффектов задержек используют отдельные протоколы для установки времени и там уже как правило не один пакет.
Для примера можете немного посмотреть в сторону протокола NTP - он используется для синхронизации времени через интернет, это открытый протокол, доступно его описание. Например ваша винда наверняка синхронизируется с каким-то NTP сервером от микрософт, фиг знает где находящимся.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
UDP пакеты можно слать через утилиту netcat (nc) но мне кажется что решение твоей проблемы не в этом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы