Снифф последовательный порт на Linux

25

Как я могу прослушивать пакеты, передаваемые через последовательный порт в Linux?

Питер Мортенсен
источник
1
Если некоторые ответы предоставили ответ на ваш вопрос, вы должны принять его ( meta.serverfault.com/questions/1033/… )
Olli

Ответы:

27

Есть несколько вариантов:

  • sersniff - это простая программа для туннелирования / прослушивания между двумя последовательными портами.

  • Serial to Network Proxy (ser2net) предоставляет пользователю способ подключения из сетевого подключения к последовательному порту.

  • SerialSpy действует как последовательное сквозное устройство. Он прослушивает входящие данные через два последовательных порта и передает их таким образом, чтобы устройства действовали так, как если бы они были напрямую подключены. Это также регистрирует данные, поскольку это перемещается через порты.

  • sercd - это перенаправитель последовательного порта, совместимый с RFC 2217. Это позволяет вам использовать последовательный порт через сеть. Это основано на Sredird. Протокол RFC2217 является расширением для telnet и позволяет изменять параметры порта связи.

  • SerLooK - это приложение KDE для проверки данных, передаваемых по последовательным линиям. Он может работать как бинарный терминал, который отправляет и получает данные через определенный порт (режим «точка-точка») и отображает их в отдельных представлениях. Каждое представление может быть настроено для отображения данных в шестнадцатеричном, десятичном, восьмеричном, двоичном и необработанном ASCII. Также возможно выполнить ввод / вывод через представления эмуляции терминала и определить вторичный порт и контролировать трафик между двумя внешними хостами, используя кабель "Y" (режим Snooper).

  • nullmodem создает виртуальную сеть псевдо-терминалов. Его можно использовать в качестве адаптера для подключения двух программ, для которых обычно требуются карты последовательного интерфейса.

  • ttywatch контролирует, регистрирует и мультиплексирует терминальный ввод-вывод. Он имеет встроенную полную ротацию логов и может использовать как telnet, так и локальные порты TTY.

  • Анализатор последовательной линии (slsnif) - это утилита регистрации последовательного порта. Он слушает указанный последовательный порт и регистрирует все данные, проходящие через этот порт в обоих направлениях.

hlovdal
источник
2
Вы можете достичь этого с помощью стандартных инструментов socatи tee. 1) socat -d -d pty,raw,echo=0 pty,raw,echo=0. Выход выдаст вам два порта ...N PTY is /dev/pts/27... N PTY is /dev/pts/28. 2) sudo cat /dev/ttyS0 | tee /dev/pts/27и в другом терминале sudo cat /deb/pts/27 | tee /dev/ttyS0. Наконец 3) Подключите вашу программу к /dev/tty/28. Две команды tee сбросят оба направления на консоль и перенаправят в / из фактического последовательного порта. Обратите внимание, что параметры порта, такие как скорость передачи данных, должны быть настроены заранее.
Jtpereyda
Вы можете сохранить тройник материал в файл, тоже: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-capsи xxdпомогут , если это двоичный протокол: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd.
Jtpereyda
@jtpereyda похоже, что ваш третий шаг должен быть связан с программой / dev / ttyS0. например, когда я подключаю PUTTY к / dev / ttyS0, он корректно показывает мне вывод на шаге 2, а также общается с реальной встроенной платой. Кстати у вас опечатка /deb/pts/27должна быть /dev/pts/27. Также cat /deb/pts/27 | tee /dev/ttyS0должно бытьcat /dev/pts/27 | sudo tee /dev/ttyS0
энтузиастик
Этот ответ очень старый, пожалуйста, рассмотрите перехват для
прослушивания
1
Вы могли бы предоставить это как другой ответ. @CharlesB Объяснять, почему так лучше, было бы неплохо.
птенцы
12

Я попытался перехватить ( копия на GitHub ), и успешно его использовал. Сначала я запустил его в интересующем порту:

interceptty /dev/ttyACM0 

Затем я подключил тестируемую программу к псевдотерминалу, /dev/pts/5который создал перехват.


Я попытался использовать slsnif , но обнаружил, что получил ошибку:

Failed to open a pty: No such file or directory

Этот элемент списка рассылки указывает, что slsnif поддерживает только «устаревшие» псевдо-терминалы (и /dev/ttyp0т. Д.) , Которые , вероятно, не используются в современных ядрах Linux.

Крейг МакКуин
источник
1
Благодарность! Та же ошибка здесь, на моем встроенном устройстве. Тогда я использую intercepttyи сделал работу!
Gfleck
Как узнать, какой псевдо-терминал он создает?
Чу
@chwi Вы можете задать ему второй параметр, который представляет собой имя «front-device», которое является символической ссылкой на псевдотерминал, который он создает.
Крейг МакКуин
Спасибо. Я обнаружил, что по умолчанию он создает / dev / intercepttydummy. Я был в состоянии наблюдать за трафиком назад и вперед, но входящие данные с устройства были прочитаны только перехватом, а не моим программным обеспечением, запускающим pyserial.
Чу
3

Попробуйте использовать jpnevulator (в комплекте с Debian) или slsniff . Обратите внимание, что slsniff использует устаревшую модель эмуляции терминала.

sntg
источник