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行を変更しました。例:

#!/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に再び横説説を送るようです。 (ティーを通るパイプがsocatに生データを含まないのと同じであると仮定しますか?)

それでは、PTYのデータを垣間見る最善の方法は何ですか?

興味をそそるために、トンネルの反対側から受け取るデータは時々少し混ざっています。たとえば、長さが100で、その後に0x7eと10バイトが追加されたIPパケットを含むpppフレームを受信できます。他のフレーム(追加のバイトがあるフレームの前後に複数のフレームが到着する可能性があります)は、8バイトが欠落しているIPパケットで到着します。この追加チャンクを取り出して最後に追加すると、正しいIPパケットとFCSを取得できます。 PTYスヌープを使用する目的は、pppdがそのようなデータを送信していることを確認することです(欠落しているブロックの前には常に0x7eバイトがあるため、そうである可能性が高い)。または、転送中に奇妙なことが起こるかどうかを確認することです。

答え1

問題は、EXEC: "/ usr / sbin / pppd ..."のオプションとして ",pty"を含めることを忘れてしまったので、pppdが静かにクラッシュしたことです。

関連情報