Serial-Port

如何監聽程序和串口之間的通信?

  • June 2, 2015

在 Gentoo Linux 機器上,一個程序通過串列埠 ( /dev/ttyS1) 與另一台電腦通信。我想在沒有進一步干擾的情況下收聽這種通信(即程序發送/接收的內容)。

如何僅使用基本的 Linux 工具來實現這一點?我什至可以更改程序正在與之通信的串列埠,所以也許我可以“快捷方式”兩個設備(/dev/ttyS1和)在所有輸出轉發到/dev/xxx時監聽所有通信,反之亦然。但是我該怎麼做呢?有什麼?/dev/ttyS1``/dev/xxx``socat

一種方法(不一定是最好的……)是附加strace到程序(或者,為了處理競爭條件,附加到該程序的包裝腳本exec),設置strace為最大字元串長度,然後擷取所有read()s和write()s (或任何你的過程使用)。之後,您使用正確的文件描述符 grep 行(應該始終相同;如果不是,那麼您也必須擷取open()s)。

攔截看起來像你想要的。

我從這個Ubuntu 頁面發現

攔截 - 攔截進出串列埠的流量。

例子

如果您想使用攔截器作為外部串列監視器

$$ connected to two serial ports on your machine and relaying between them, while recording the output $$ 您可以使用一台設備作為後端,並使用 -p 選項告訴前端不要創建它自己的 tty,而只需使用您告訴它的那個:

interceptty -s 'ispeed 19200 ospeed 19200' /dev/ttyS0 -p /dev/ttyS1 -

輸出

攔截以一種相當不吸引人、令人痛苦的格式列印其輸出。但是,其他程序很容易解析。有關如何將此輸出後處理為適合您所攔截的任何內容的範例,請參閱包含的 Perl 腳本interceptty-nicedump。

輸出行採用以下通用格式:

< 0x54 (T)

> > > &gt; 0x4b (K) ^ Direction ^^^^ Hex code (to real device) &gt; ^^^ ASCII character (to real device) &gt; ^^^^ Hex code (from real device) &gt; ^^^ ASCII character (from real device) The direction marker is a '&lt;' if this character was sent to the backend device, and &gt; &gt; > > ‘>’ 如果它是從後端設備接收的。它後面總是跟一個空格。如果字元是從真實設備接收的,接下來會出現一個選項卡(這使得輸出更容易理解)。之後是字元的十六進制程式碼,如果是 ASCII 字元,則是字元的 ASCII 表示。 > > >

引用自:https://unix.stackexchange.com/questions/116702