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가 조용히 충돌했다는 것입니다.