如何監聽程序和串口之間的通信?
在 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)
> > >
> 0x4b (K) ^ Direction ^^^^ Hex code (to real device) > ^^^ ASCII character (to real device) > ^^^^ Hex code (from real device) > ^^^ ASCII character (from real device) The direction marker is a '<' if this character was sent to the backend device, and > >
> > ‘>’ 如果它是從後端設備接收的。它後面總是跟一個空格。如果字元是從真實設備接收的,接下來會出現一個選項卡(這使得輸出更容易理解)。之後是字元的十六進制程式碼,如果是 ASCII 字元,則是字元的 ASCII 表示。 > > >