답변:
짧은 대답은 아니고 쉽지 않습니다.
Linux에서 lsof /proc/net/unix
는 UNIX 도메인 소켓에 관한 정보를 검색합니다. 이 인터페이스는 모든 바운드 소켓을 나열하지만 엔드 포인트를 추적 하지는 않습니다 . 따라서 어떤 소켓이 있는지 볼 수 있지만 연결된 소켓 은 볼 수 없습니다. 이 정보 가 추적되는 곳에서 추적되어야합니다. 그렇지 않으면 소켓 연결이 작동하지 않습니다. 연결 정보를 검색하는 메커니즘을 아직 찾지 못했습니다.
스니핑 질문은 약간 더 흥미롭지 만 실망하지는 않습니다. 내가 "쉽지 않다"는 것은 그 데이터를 몰래 들여다 볼 수있는 후크가 없다는 것입니다. 가장 가까운 아날로그는 tcpdump 또는 Wireshark를 사용하는 것입니다. 둘 다 libpcap을 사용하여 실제로 무거운 작업을 수행합니다. 네트워크 (AF_INET)와 UNIX 도메인 (AF_UNIX)은 모두 socket()
함수 호출을 사용하여 만들어 지지만 데이터 connect()
를 연결하고 사용 read()
하고 write()
처리하는 데 사용 되지만 다른 커널 하위 시스템에서 처리됩니다. 이것은 libpcap이 UNIX 도메인 소켓과 작동하도록 설계되지 않은 불행한 부작용이 있습니다.
문제의 측면이 약간 적습니다. 의 매뉴얼 페이지를 살펴보십시오 recv(2)
. 이것은 사용하는 하위 시스템 호출 read()
입니다. 에 대한 플래그가 존재 recv()
라고는 MSG_PEEK
. 이를 통해 UNIX 도메인 소켓을 통과하는 트래픽을 스니핑 할 수 있습니다. 그래서 그것은 밝은면이며, 어두운면은 내가 아는 한, 현재 이것을 위해 설계된 어떤 응용 프로그램도 존재하지 않는다는 것입니다. 그래서 당신은 약간의 개발 노력을보고 있습니다.
난 정말이 소원 이었다 F'YEAH의 좋은 간단한 답변이 질문의 두 부분으로.
예, 당신은 이것을 할 수 있습니다. 필요한 것은 systemtap입니다.
중 하나 고려 예를 들어 SystemTap의 스크립트 것입니다 PID를하고 읽거나 특정 아이 노드를 작성하는 프로그램의 프로세스 이름 인쇄 (그리고 유닉스 도메인 소켓이 바로 그러한 것입니다).
이 스크립트를 간단하게 수정하여 읽고 쓰는 실제 데이터를 인쇄 할 수 있습니다. 독자들에게 연습으로 남겨 두겠습니다.
나는 이것이 주요 질문에 대답하지 않는다는 것을 알고 있지만 소켓에서 통신을 스니핑하는 것을 찾기 위해 여기에서 끝났습니다. 나는 나와 같은 다른 사람들을 위해 게시하기로 결정했습니다. 내가 한 방법은 다음과 같습니다.
$> sudo socat -t100 -x -v UNIX-LISTEN : /var/run/php5-fpm.sock.socat,mode=777,reuseaddr,fork UNIX-CONNECT : /var/run/php5-fpm.sock
-x를 제거하고 ascii 통신을 위해 -v를 그대로 두십시오. 누군가에게 도움이되기를 바랍니다.