socat - 標準CP2102シリアルアダプタのUSBポート監視

socat - 標準CP2102シリアルアダプタのUSBポート監視

私はCP2102シリアルコンバータチップに送受信される内容の16進ダンプを取得しようとしました。人々が監視するケースを見つけることができます。ハードウェアシリアルポート/dev/TTYS0など

socat -d -d pty,link=/dev/ttyUSB0,raw,echo=0 pty,link=/dev/ttyUSB1,raw,echo=0

このようなUSBポートを監視する方法を教えてくれるリソースを知っている人はいますか?これまで何も効かなかった。たぶん、シリアルモニタリングや他のものの再ルーティングの側面を理解していないかもしれません。

答え1

最も簡単な方法は、可能であれば16進数を解放するようにソフトウェアを調整することです。ほとんどのソフトウェアにはすでに対応sdio.hするエントリ(またはそれに対応するエントリ)があり、16進シリアルデータにはprintfシリアルファイル記述子に入って来るデータへの呼び出し(またはそれに対応するエントリ)のみが必要です。データを送受信する複雑な追加プロセスはなく、事実上追加の待ち時間もありません。

緊急の場合stracesysdig SystemTapなど)を使用して通信を記録することができますが、これによりstraceプロセスが大幅に遅くなり、出力に後処理が必要になる可能性があります。適していません。

strace -xx -y -e trace=read,write -p $pid_of_your_program_here

ハードウェアレベルでは、バスの違法コピーや同様の行為が通信を悪用する別の方法になる可能性があります。

これまでsocat(1)便利な16進オプションがあるようです-x

   -x     Writes  the  transferred  data not only to their target streams,
          but also to stderr. The output format is  hexadecimal,  prefixed
          with  ">  "  or "< " indicating flow directions. Can be combined
          with -v .

いくつかの実験の後、私はランダムなArduinoを聞くことができました。

socat -x PTY,link=/dev/blah,raw,wait-slave /dev/serial/by-id/usb-Arduino...

その後、ソフトウェアを開くことができます/dev/blah(またはソフトウェアを実行して実行できますかEXEC?)。パスを設定しようとするとエラーが発生するため、パスのraw後にオプションは指定されません。出力には次の事後処理が必要な場合があります。/dev/serial/by-id/usb-Arduino...tcgetattr(6, ...): Inappropriate ioctl for devicesocatsocat

--
2017/10/09 16:32:20 socat[30806] I transferred 1 bytes from 6 to 5
< 2017/10/09 16:32:20.475916  length=31 from=2042 to=2072
 52 65 71 75 65 73 74 69 6e 67 20 74 65 6d 70 65  Requesting tempe
 72 61 74 75 72 65 73 2e 2e 2e 44 4f 4e 45 0a     ratures...DONE.
--

関連情報