tcpdump와 같은 로컬 유닉스 도메인 소켓을 모니터링 할 수 있습니까? 스크립트로 파이프하고

원래 연결을 방해하지 않고 유닉스 소켓에서 응답을 모니터링하고 처리를 위해 스크립트로 파이프하고 싶습니다.

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


답변