Unix 도메인 소켓을 이동하면 socat이 어떻게 트래픽을 모니터링할 수 있습니까?

Unix 도메인 소켓을 이동하면 socat이 어떻게 트래픽을 모니터링할 수 있습니까?

socatUnix 도메인 소켓의 트래픽을 모니터링하는 데 사용할 수 있습니다.

sudo mv /path/to/sock /path/to/sock.original
sudo socat -t100 -x -v UNIX-LISTEN:/path/to/sock,mode=777,reuseaddr,fork UNIX-CONNECT:/path/to/sock.original

나는 이 메커니즘이 어떻게 작동하는지 잘 이해하지 못하며 누군가가 그것을 설명할 수 있기를 바랍니다. 특히, 프로세스가 이미 듣고 있는 경우 소켓 파일 이동은 어떻게 작동합니까? 또한 이동 후: 어느 쪽도 결과를 반환 lsof /path/to/sock하지 않습니다 /path/to/sock.original.

답변1

모니터링하려는 서버가 현재 수신 대기 중인 동안 이러한 명령을 실행해야 합니다 /path/to/sock. 그런 다음 이름을 바꾸면 /path/to/sock서버는 영향을 받지 않습니다.

socat명령은 중개자를 삽입합니다. /path/to/socks클라이언트의 모든 트래픽을 수신 하여 전달합니다 /path/to/socks.original(그리고 프로세스에 기록합니다 -v).

이는 다음에만 적용됩니다.개울콘센트 유형( 사용 UNIX-RECVFROM/UNIX-RECV데이터그램소켓), 그리고 클라이언트가 보조 데이터나 기타 멋진 것들을 사용하는 read/write/send/recv대신 해당 소켓만 사용하는 경우에만 가능합니다.sendmsg()

lsof수신 프로세스( socat및 소켓 수신 및 수락 서버)만 보고됩니다. 일반적으로 연결이 불가능합니다.연결됨클라이언트의 소켓 간 경로입니다.

당신이 그렇게한다면앞으로서버를 시작하면 서버가 시도하므로 작동하지 않습니다.듣다이미 듣고 있었기 /path/to/socks때문에 켜지고 실패했습니다. socat아니면 서버에게 수신하라고 지시해야 합니다 /path/to/sock.original.

관련 정보