Снифф последовательный порт на Linux
Как я могу прослушивать пакеты, передаваемые через последовательный порт в Linux?
Если некоторые ответы предоставили ответ на ваш вопрос, вы должны принять его ( meta.serverfault.com/questions/1033/… )
- sersniff — это простая программа для туннелирования / прослушивания между двумя последовательными портами.
- Serial to Network Proxy (ser2net) предоставляет пользователю способ подключения из сетевого подключения к последовательному порту.
- SerialSpy действует как последовательное сквозное устройство. Он прослушивает входящие данные через два последовательных порта и передает их таким образом, чтобы устройства действовали так, как если бы они были напрямую подключены. Это также регистрирует данные, поскольку это перемещается через порты.
- sercd — это перенаправитель последовательного порта, совместимый с RFC 2217. Это позволяет вам использовать последовательный порт через сеть. Это основано на Sredird. Протокол RFC2217 является расширением для telnet и позволяет изменять параметры порта связи.
- SerLooK — это приложение KDE для проверки данных, передаваемых по последовательным линиям. Он может работать как бинарный терминал, который отправляет и получает данные через определенный порт (режим «точка-точка») и отображает их в отдельных представлениях. Каждое представление может быть настроено для отображения данных в шестнадцатеричном, десятичном, восьмеричном, двоичном и необработанном ASCII. Также возможно выполнить ввод / вывод через представления эмуляции терминала и определить вторичный порт и контролировать трафик между двумя внешними хостами, используя кабель «Y» (режим Snooper).
- nullmodem создает виртуальную сеть псевдо-терминалов. Его можно использовать в качестве адаптера для подключения двух программ, для которых обычно требуются карты последовательного интерфейса.
- ttywatch контролирует, регистрирует и мультиплексирует терминальный ввод-вывод. Он имеет встроенную полную ротацию логов и может использовать как telnet, так и локальные порты TTY.
- Анализатор последовательной линии (slsnif) — это утилита регистрации последовательного порта. Он слушает указанный последовательный порт и регистрирует все данные, проходящие через этот порт в обоих направлениях.
Вы можете достичь этого с помощью стандартных инструментов 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 сбросят оба направления на консоль и перенаправят в / из фактического последовательного порта. Обратите внимание, что параметры порта, такие как скорость передачи данных, должны быть настроены заранее.
Вы можете сохранить тройник материал в файл, тоже: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps и xxd помогут , если это двоичный протокол: cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd .
@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
Вы могли бы предоставить это как другой ответ. @CharlesB Объяснять, почему так лучше, было бы неплохо.
Я попытался перехватить ( копия на GitHub ), и успешно его использовал. Сначала я запустил его в интересующем порту:
Затем я подключил тестируемую программу к псевдотерминалу, /dev/pts/5 который создал перехват.
Я попытался использовать slsnif , но обнаружил, что получил ошибку:
Failed to open a pty: No such file or directory
Этот элемент списка рассылки указывает, что slsnif поддерживает только «устаревшие» псевдо-терминалы (и /dev/ttyp0 т. Д.) , Которые , вероятно, не используются в современных ядрах Linux.
Благодарность! Та же ошибка здесь, на моем встроенном устройстве. Тогда я использую interceptty и сделал работу!
@chwi Вы можете задать ему второй параметр, который представляет собой имя «front-device», которое является символической ссылкой на псевдотерминал, который он создает.
Спасибо. Я обнаружил, что по умолчанию он создает / dev / intercepttydummy. Я был в состоянии наблюдать за трафиком назад и вперед, но входящие данные с устройства были прочитаны только перехватом, а не моим программным обеспечением, запускающим pyserial.
Попробуйте использовать jpnevulator (в комплекте с Debian) или slsniff . Обратите внимание, что slsniff использует устаревшую модель эмуляции терминала.
Кто слушает порт в Linux
Открытый доступ к порту хоть и является угрозой безопасности системы, но по сути ничего плохого не представляет до тех пор, пока его не начинает использовать программа. А чтобы выяснить какая программа слушает какой порт можно использовать утилиты «netstat» (или «ss») и «lsof».
Чтобы узнать информацию о программе, которая прослушивает определённый порт, можно воспользоваться командой «lsof» со следующими ключами:
Здесь «номер_порта» — это цифра.
Пример результата выполнения команды с 53 портом:
$: sudo lsof -i :53 COMMAND PID USER TYPE NODE NAME systemd-r 818 systemd-resolve IPv4 UDP localhost:domain systemd-r 818 systemd-resolve IPv4 TCP localhost:domain (LISTEN)
Но рекомендуем чаще запускать команду для получения списка программ, которые используют какие-либо tcp/udp порты. В этом помогает «netstat» или «ss»:
- -l показать только прослушиваемые «LISTEN» порты.
- -n показывать адреса как ip, а не пытаться определять домены.
- -t показывать TCP порты.
- -u показывать UDP порты.
- -p показать название программы, которая слушает порт.
$: sudo netstat -lntup Prt Local Addr State PID/Program tcp 0.0.0.0:443 LISTEN 204/nginx tcp 0.0.0.0:80 LISTEN 202/nginx tcp 0.0.0.0:22 LISTEN 174/sshd udp 127.0.0.1:323 233/chronyd
По результату можно заметить какая программа прослушивает какой порт. Если ip в секции «Local Address» равен «127.0.0.1», то это локальное обращение. Такой порт можно не закрывать фаерволом — он и так не будет доступен извне. Но ip с нулями «0.0.0.0» говорят о том, что программа слушает все адреса. То есть она примет любой запрос, в том числе внешний.