원래 연결을 방해하지 않고 유닉스 소켓에서 응답을 모니터링하고 처리를 위해 스크립트로 파이프하고 싶습니다.
tcp 연결을 위해 tcpdump를 사용 하여이 작업을 수행하는 방법을 알고 있지만 로컬 유닉스 소켓에 대한 솔루션을 찾지 못하는 것 같습니다.
이것이 가능합니까?
답변
두 소켓 사이의 게이트웨이 역할을하는 앱을 만들고 흐르는 모든 데이터를 로깅하여 그렇게 주장하는 사람이 있습니다. 따라서 소켓을 탭 할 수는 없지만 서비스를 다시 시작 하고이 녀석 앱을 사용하도록 조정하면 모든 트래픽을 볼 수 있습니다.
게시물에 대한 링크는 다음과 같습니다. Unix Socket Sniffer
소켓에 연결된 프로세스 ID를 찾은 다음 lsof를 사용하여 소켓의 파일 설명자를 찾은 다음 strace를 사용하여 파일 설명자를 누르십시오.
클라이언트 / 서버가 소켓을 사용하는 것을 중단하고 재구성 할 수 있다면 항상 첫 번째 방법, 두 번째 방법을 권장하는 것이 까다 롭고 일부 응용 프로그램에서는 충돌을 일으킬 수있는 현재 프로세스를 탭해야합니다.
누군가가 anoter 방식으로 우리를 계몽하기를 바랍니다 🙂
행운을 빕니다
답변
socat을 사용할 수 있습니다.
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
위에서 일어나는 일 : 먼저 원래 소켓을 sock.original로 옮깁니다. Socat은 원본 위치에 새로운 소켓 ( ‘UNIX-LISTEN’)을 생성하고 모든 것을 원본 ( ‘UNIX-connect’)으로 전달합니다. -v는 socat에게 출력을 STDERR로 인쇄하도록 지시합니다.
답변
소켓 양쪽의 프로세스 중 하나에서 strace를 사용해보십시오. 이는 쓰기 / 읽기 내용을 볼 수 있기 때문입니다. 나는 프로덕션 환경에서 socat이 없지만 strace가 있습니다.
유용한 목적을 위해, -s를 큰 것으로 설정하는 것은 필수입니다.
답변
// backup the socket
sudo mv /var/run/docker.sock /var/run/docker.sock.original
// use tcp port 8089 proxy the original socket
sudo socat TCP-LISTEN:8089,reuseaddr,fork UNIX-CONNECT:/var/run/docker.sock.original
// use the new socket to proxy the 8089 port
sudo socat UNIX-LISTEN:/var/run/docker.sock,fork TCP-CONNECT:127.0.0.1:8089
그때:
sudo tcpdump -i lo -netvv port 8089