Netbsd

如何擷取 PTY 上傳輸的數據?

  • August 13, 2014

我正在執行 NetBSD 6.1.4,並且我有一個具有以下配置的 stunnel 實例:

[https service]
accept = 443
CAfile = /u01/usbtether/CA/certs/rootCA.crt
cert = /usr/pkg/etc/stunnel/stunnel.pem
pty = yes
exec = /usr/sbin/pppd
execargs = pppd call phone
verify = 2
client = no

一切都很好,除了在另一邊不斷增加的 rx 錯誤計數。我想比較它離開隧道之前和之後的 ppp 流量。到目前為止,我的策略是使用 socat。我將 exec 行更改為指向 shell 腳本,例如

#!/bin/sh
socat -,echo=0,raw SYSTEM:'tee /root/pppd-in.log | socat -,echo=0,raw EXEC:"/usr/sbin/pppd call phone" | tee /root/pppd-out.log'

但我似乎無法將我的鴨子排成一排。我已經設法回送其他 pppd 發送的所有內容,或者忽略其他 pppd 發送的所有內容,但是我無法正確地使用語法在 stunnel 和 pppd 之間實際傳遞數據,同時還將輸入和輸出轉儲到文件中(儘管我只關心關於輸出)。

我也試過

#!/bin/sh
/usr/sbin/pppd call phone | tee /root/serial-out.log

但我似乎只是將胡言亂語發送回呼叫 pppd(我假設通過 tee 的管道就像在 socat 中不包括 raw 一樣?)。

那麼窺探 PTY 中數據的最佳方法是什麼?

為了增加興趣,我在通道另一邊收到的數據偶爾會有點混亂。例如,我可能會收到一個帶有長度為 100 的 IP 數據包的 ppp 幀,後跟一個 0x7e,以及 10 個額外的字節。另一個幀(可能在幀之前或之後到達幾個幀,帶有額外的字節)將到達一個缺少 8 個字節的 IP 數據包。如果我要取出那個額外的塊並將其粘貼到最後,我大概會擁有正確的 IP 數據包和 FCS。我使用 PTY snoop 的目的是驗證 pppd 是否正在發送這樣的數據(因為失去的塊總是前面有一個 0x7e 字節,我認為這很可能),或者在傳輸過程中是否發生了奇怪的事情。

問題是我忘記將 “,pty” 作為 EXEC 的一個選項:"/usr/sbin/pppd …" 所以 pppd 默默地崩潰了。

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