Linuxのシリアルポートを介して通信されるパケットを探知するにはどうすればよいですか?
Linuxのシリアルポートを介して通信されるパケットを探知するにはどうすればよいですか?
回答:
いくつかのオプションがあります。
sersniffは、2つのシリアルポート間でトンネル/スニッフィングを行う簡単なプログラムです。
ネットワークプロキシへのシリアル(ser2net)は、ユーザーがネットワーク接続からシリアルポートに接続する方法を提供します。
SerialSpyは、シリアルパススルーデバイスとして機能します。2つのシリアルポートで着信データをリッスンして転送し、デバイスが直接接続されているかのように動作します。また、ポートを通過するデータも記録します。
sercdは、RFC 2217準拠のシリアルポートリダイレクタです。ネットワークを介してシリアルポートを共有できます。これはsredirdに基づいています。RFC2217プロトコルはtelnetの拡張であり、通信ポートのパラメーターを変更できます。
SerLooKは、シリアル回線を通過するデータを検査するためのKDEアプリケーションです。定義されたポート(ポイントツーポイントモード)を介してデータを送受信し、それらを個別のビューに表示するバイナリターミナルとして機能します。各ビューは、データを16進数、10進数、8進数、2進数、および生のASCIIで表示するように構成できます。端末エミュレーションビューを使用してI / Oを実行し、セカンダリポートを定義し、「Y」ケーブルを使用して2つの外部ホスト間のトラフィックを監視することもできます(スヌーパーモード)。
nullmodemは、擬似端末の仮想ネットワークを作成します。通常シリアルインターフェイスカードを必要とする2つのプログラムを接続するためのアダプターとして使用できます。
ttywatchは、端末I / Oを監視、ログ、および多重化します。完全なログローテーションが組み込まれており、TelnetとローカルTTYポートを使用できます。
シリアルラインスニファー(slsnif)は、シリアルポートロギングユーティリティです。指定されたシリアルポートをリッスンし、このポートを通過するすべてのデータを双方向で記録します。
socat
とを使用して、標準ツールでこれを実現できtee
ます。1)socat -d -d pty,raw,echo=0 pty,raw,echo=0
。出力には2つのポートがあります...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
。2つのteeコマンドは、コンソールへの両方の方向をダンプし、実際のシリアルポートとの間で転送します。ボーレートなどのポート設定は事前に設定する必要があることに注意してください。
cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps
し、xxd
それはバイナリプロトコルだ場合に役立ちます:cat /dev/pts/27 | sudo tee /dev/ttyS0 serial-caps | xxd
。
/deb/pts/27
はずです/dev/pts/27
。またするcat /deb/pts/27 | tee /dev/ttyS0
必要がありますcat /dev/pts/27 | sudo tee /dev/ttyS0
傍受(GitHubでコピー)を試みましたが、使用に成功しました。まず、目的のポートで実行しました。
interceptty /dev/ttyACM0
次に/dev/pts/5
、インターセプティが作成した擬似端末にテスト対象プログラムを接続しました。
slsnifを使用しようとしましたが、エラーが発生しました。
Failed to open a pty: No such file or directory
このメーリングリストの項目は、slsnif /dev/ttyp0
が、現在のLinuxカーネルではおそらく使用されない「レガシー」疑似端末(など)のみをサポートすることを示しています。
interceptty
して仕事をしました!
jpnevulator(debianパッケージ)またはslsniffを使用してみてください。slsniffは非推奨の端末エミュレーションモデルを使用することに注意してください。