Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

Мультипортовый сниффер

Бета-версия мультипортового сниффера готова! Пока он умеет немногое, но основное свое предназначение выполняет.

Написан он был для прослушивания нескольких портов (скажем, общения того же "кофейника" с модемом). Для каждого порта создается свой лог-файл, общая же информация выводится в стандартный вывод (+ можно писать ее в дополнительный файл, чтобы вручную команду tee не вызывать). Каждая очередная порция данных снабжается меткой — временем (в секундах) с момента самой первой записи.
Для проверки работоспособности я воткнул в USB два конвертера USB<->TTL, соединил их Rx/Tx перекрестно, и запустил мониторинг.
Проверочный ввод:
echo -en "To be or not to be... " | tee /dev/ttyUSB1 > /dev/ttyUSB0
echo  "That is a question!" | tee /dev/ttyUSB1 > /dev/ttyUSB0
echo -en "Rest of data" | tee /dev/ttyUSB1 > /dev/ttyUSB0

Запуск с выводом в терминал:
/multiterm   /dev/ttyUSB* -t115200  -o comomon.txt -r
0: /dev/ttyUSB0
To be or not to be... That is a question!
0: /dev/ttyUSB1
To be or not to be... That is a question!
^C29.5733: /dev/ttyUSB0
Rest of data
29.5733: /dev/ttyUSB1
Rest of data
Exit! (2)

Вывод индивидуальных логов:
cat log_ttyUSB0.txt 
0
To be or not to be... That is a question!
29.5733
Rest of data

cat log_ttyUSB1.txt 
0
To be or not to be... That is a question!
29.5733
Rest of data

Справка:
./multiterm -h

Usage: multiterm [args] [ports]

	Where args are:

  -b, --baudrate        baudrate for given port
  -c, --char-mode       use character mode instead of lines
  -h, --help            show this help
  -o, --all-log=arg     filename of common log
  -p, --port            input port (also you can name it without any key)
  -r, --rewrite         rewrite existing log files
  -t, --totalrate=arg   global baudrate for all interfaces


Бодрейт по умолчанию 57600, его можно изменить параметром -b (для одного порта) или -t (для всех). Параметр -t имеет приоритет над -b.
Общий выходной файл можно задать ключом -o, индивидуальные же имеют вид "log_XXX.txt", где XXX - basename файла устройства.
Задать имена файлов TTY можно как при помощи параметров -p, так и свободными аргументами командной строки (в т.ч. вперемешку). Общее количество портов не ограничено. Но если порты должны иметь разные настройки скоростей, параметров -b должно быть ровно столько, сколько задано портов.
Если необходимо перезаписать логи (и затереть общий лог), утилита вызывается с параметром -r. Без него существующие индивидуальные логи вызовут аварийное завершение, если же их нет, но есть общий лог, он не будет перезаписан, а будет дописан.
Еще одна возможность — символьный режим, когда очередная порция данных выводится не после получения символа конца строки, а после отсутствия данных на входе в течение 10мс после получения последнего символа. В этом случае если в конце порции данных нет символа конца строки, он будет добавлен в логи, чтобы не вызывать путаницы.
Выход из утилиты — нажатием ctrl+c или kill. Несброшенные буферы при этом будут дозаписаны в лог-файлы.

Возможно, кто-то уже создавал подобную утилиту, я особо не искал.
Tags: c, snippets
Subscribe

  • M$ teams…

    Начал с сегодняшнего дня студентам ЮФУ удаленно лекции читать. У них все завязано на различные корпорации зла. И базовая работа - через teams. ОК,…

  • Почему systemd — дерьмо

    Уже давно на эту статейку натыкался, но все забывал в "закладки" добавить. Вот, добавляю: "systemd — отстой". Советую эту статейку почитать…

  • Разбираемся с утечками

    Занялся полным рефакторингом кода системы управления оптоволоконным спектрографом. А глаз уже "замыленный": ну вот не могу сходу обнаружить, где я…

promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic
  • 4 comments