Мониторинг обмена данными с serial-портом
Иногда надо сниффать serial-порт на предмет того, что туда пишется/читается софтиной.
Есть сниффер jpnevulator.
jpnevulator --timing-print --tty /dev/ttyACM0
Но он не совсем удобен. Так как он не сниффер на смом деле, а простой ридер-писатель для порта.
Поэтому если запустить его совместно с другой софтиной, то она данных на порту не увидит.
А нам нужен именно сниффер.
Можно создать виртуальный порт с помощью pyserial. И читать/писать данный и реального в виртуальный порт и наоборот (MITM), но стоит ли? :)
Воспользуемся strace!
$ strace -e trace=read,write python terminal.py
# тут я вырезал кусок, который относится к питону
write(3, "P", 1) = 1
write(3, "P", 1) = 1
read(3, "P", 1) = 1
read(3, ";\26\225\320\0k,\r\0", 9) = 9
write(1, "3B 16 95 D0 0 6B 2C D 0\n", 243B 16 95 D0 0 6B 2C D 0
) = 24
write(3, "S\3\377\0\377", 5) = 5
read(3, "\377\0\377", 3) = 3
write(1, "FF 0 FF\n", 8FF 0 FF
) = 8
write(3, "S\5\240\244\0\0\2", 7) = 7
read(3, "\244", 1) = 1
write(3, "S\2?\0", 4) = 4
read(3, "\237#", 2) = 2
write(1, "9F 23\n", 69F 23
) = 6
write(3, "S\5\240\300\0\0#", 7) = 7
read(3, "\300\0\0Z\0?\0\1\0\0\0\0\0\26\263\3\7\4\0\203\212\203\212\0\3\0\0Z\0\0\0Z"..., 38) = 38
write(1, "C0 0 0 5A 0 3F 0 1 0 0 0 0 0 16 "..., 89C0 0 0 5A 0 3F 0 1 0 0 0 0 0 16 B3 3 7 4 0 83 8A 83 8A 0 3 0 0 5A 0 0 0 5A 0 2F 6 2 90 0
) = 89
write(3, "H", 1) = 1
+++ exited with 0 +++
И вот уже вожделенный протокол обмена на экране. :)
Категории: Разработка