如何捕获 PTY 上传输的数据?

如何捕获 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

一切都运行良好,除了另一侧的接收错误计数不断增加。我想比较离开隧道之前和之后的 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 中的原始数据?)。

那么窥探 PTY 中数据的最佳方法是什么?

为了增加兴趣,我在隧道另一侧收到的数据有时会被打乱一点。例如,我可能会收到一个 ppp 帧,其中包含长度为 100 的 IP 数据包,后跟 0x7e 和 10 个附加字节。另一个帧(可能在带有额外字节的帧之前或之后到达多个帧)将带着缺少 8 个字节的 IP 数据包到达。如果我要取出这个额外的块并将其附加到末尾,那么我可能会得到正确的 IP 数据包加上 FCS。我使用 PTY snoop 的目的是验证 pppd 是否正在发送这样的数据(因为丢失的块总是前面有一个 0x7e 字节,我认为这很可能),或者在传输过程中是否发生了奇怪的情况。

答案1

问题是我忘记包含“,pty”作为 EXEC:“/usr/sbin/pppd ...”的选项,因此 pppd 默默地崩溃了。

相关内容