![Unix 도메인 소켓을 이동하면 socat이 어떻게 트래픽을 모니터링할 수 있습니까?](https://linux55.com/image/59946/Unix%20%EB%8F%84%EB%A9%94%EC%9D%B8%20%EC%86%8C%EC%BC%93%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%A9%B4%20socat%EC%9D%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%8A%B8%EB%9E%98%ED%94%BD%EC%9D%84%20%EB%AA%A8%EB%8B%88%ED%84%B0%EB%A7%81%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
socat
Unix 도메인 소켓의 트래픽을 모니터링하는 데 사용할 수 있습니다.
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
.