스 니프 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.