스 니프 UNIX 도메인 소켓


9

일부 프로세스가 특정 유닉스 도메인 소켓 ( /var/run/asterisk/asterisk.ctl)에 쓰고 있음을 알고 있지만 보낸 사람의 pid를 알지 못합니다. 누가 소켓에 쓰고 있는지 어떻게 알 수 있습니까? 나는 시도했다 :

sudo lsof /var/run/asterisk/asterisk.ctl

소켓의 소유자 만 나열합니다. 누가이 소켓에 쓰기 / 읽기를하는지 알고 싶습니다. 또한 데이터를 스니핑하고 싶습니다. 이것이 가능한가?

답변:


4

짧은 대답은 아니고 쉽지 않습니다.

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의 좋은 간단한 답변이 질문의 두 부분으로.


11

예, 당신은 이것을 할 수 있습니다. 필요한 것은 systemtap입니다.

중 하나 고려 예를 들어 SystemTap의 스크립트 것입니다 PID를하고 읽거나 특정 아이 노드를 작성하는 프로그램의 프로세스 이름 인쇄 (그리고 유닉스 도메인 소켓이 바로 그러한 것입니다).

이 스크립트를 간단하게 수정하여 읽고 쓰는 실제 데이터를 인쇄 할 수 있습니다. 독자들에게 연습으로 남겨 두겠습니다.


4

나는 이것이 주요 질문에 대답하지 않는다는 것을 알고 있지만 소켓에서 통신을 스니핑하는 것을 찾기 위해 여기에서 끝났습니다. 나는 나와 같은 다른 사람들을 위해 게시하기로 결정했습니다. 내가 한 방법은 다음과 같습니다.

$> 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를 그대로 두십시오. 누군가에게 도움이되기를 바랍니다.


완벽하게 작동
— JSmyth

-1

socat -t100 UNIX-LISTEN : /tmp/file.sock,mode=777,reuseaddr, 포크 STDOUT

출력 중복, 순환 출력은 없습니다. 이전 댓글 ".sock.socat"의 오류


2
유용한 명령이지만 설명 / 설명을 추가하십시오 ( 이 답변 과 어떻게 다른 가요?)
— HBruijn

죄송 해요. 출력 중복, 순환 출력은 없습니다. ".sock.socat"이전 주석의 오류
— srvf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.