Мультипортовый сниффер
Nov. 7th, 2016 10:00 pmБета-версия мультипортового сниффера готова! Пока он умеет немногое, но основное свое предназначение выполняет.
Написан он был для прослушивания нескольких портов (скажем, общения того же "кофейника" с модемом). Для каждого порта создается свой лог-файл, общая же информация выводится в стандартный вывод (+ можно писать ее в дополнительный файл, чтобы вручную команду tee не вызывать). Каждая очередная порция данных снабжается меткой — временем (в секундах) с момента самой первой записи.
Для проверки работоспособности я воткнул в USB два конвертера USB<->TTL, соединил их Rx/Tx перекрестно, и запустил мониторинг.
Проверочный ввод:
Запуск с выводом в терминал:
Вывод индивидуальных логов:
Справка:
Бодрейт по умолчанию 57600, его можно изменить параметром -b (для одного порта) или -t (для всех). Параметр -t имеет приоритет над -b.
Общий выходной файл можно задать ключом -o, индивидуальные же имеют вид "log_XXX.txt", где XXX - basename файла устройства.
Задать имена файлов TTY можно как при помощи параметров -p, так и свободными аргументами командной строки (в т.ч. вперемешку). Общее количество портов не ограничено. Но если порты должны иметь разные настройки скоростей, параметров -b должно быть ровно столько, сколько задано портов.
Если необходимо перезаписать логи (и затереть общий лог), утилита вызывается с параметром -r. Без него существующие индивидуальные логи вызовут аварийное завершение, если же их нет, но есть общий лог, он не будет перезаписан, а будет дописан.
Еще одна возможность — символьный режим, когда очередная порция данных выводится не после получения символа конца строки, а после отсутствия данных на входе в течение 10мс после получения последнего символа. В этом случае если в конце порции данных нет символа конца строки, он будет добавлен в логи, чтобы не вызывать путаницы.
Выход из утилиты — нажатием ctrl+c или kill. Несброшенные буферы при этом будут дозаписаны в лог-файлы.
Возможно, кто-то уже создавал подобную утилиту, я особо не искал.
Написан он был для прослушивания нескольких портов (скажем, общения того же "кофейника" с модемом). Для каждого порта создается свой лог-файл, общая же информация выводится в стандартный вывод (+ можно писать ее в дополнительный файл, чтобы вручную команду 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. Несброшенные буферы при этом будут дозаписаны в лог-файлы.
Возможно, кто-то уже создавал подобную утилиту, я особо не искал.
no subject
Date: 2016-11-07 09:03 pm (UTC)