Netbsd
如何擷取 PTY 上傳輸的數據?
我正在執行 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 默默地崩潰了。