lsof에 있는 Unix 소켓과 상호 작용

lsof에 있는 Unix 소켓과 상호 작용

명령 출력에 Unix 소켓이 사용된 것을 확인했습니다 lsof.

COMMAND    PID  TID TASKCMD               USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
screen    110970         username    4u     unix 0xffff91fe3134c400       0t0   19075659 socket

"DEVICE" 열에는 메모리 주소처럼 보이는 것이 들어 있습니다. lsof 매뉴얼 페이지에 따르면:

DEVICE     contains the device numbers, separated by commas, for a character special, block special, regular, directory or NFS file;

                  or ``memory'' for a memory file system node under Tru64 UNIX;

                  or the address of the private data area of a Solaris socket stream;

                  or a kernel reference address that identifies the file (The kernel reference address may be used for FIFO's, for example.);

                  or the base address or device name of a Linux AX.25 socket device.

                  Usually only the lower thirty two bits of Tru64 UNIX kernel addresses are displayed.

내 질문은 다음 중 어느 것이 가치가 있는지를 찾는 것입니다 0xffff91fe3134c400.

또한 어떻게 상호작용할 수 있나요? Unix 도메인 소켓에 연결하는 데 사용할 수 있다는 것을 알고 있지만 netcat온라인에서 예제를 읽어보면 파일을 지정해야 하는 것 같습니다.

답변1

UNIX 소켓과 연관된 파일을 찾으려면 플래그를 사용하여 소켓의 끝점을 표시할 수 +E있습니다 lsof. 매뉴얼 페이지에서:

+|-E +E Linux 파이프, Linux UNIX 소켓 및 Linux 의사 터미널 파일이 엔드포인트 정보와 함께 표시되고 엔드포인트의 파일도 표시되도록 지정합니다.

예를 들어, 이것은 다음과 같습니다.질문누군가 프로세스 fd 6의 끝점을 찾으려고 했습니다 top.

# lsof -d 6 -U -a +E -p $(pgrep top)
COMMAND     PID       USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
dbus-daem   874 messagebus   12u  unix 0xffff9545f6fee400      0t0 366381191 /var/run/dbus/system_bus_socket type=STREAM ->INO=366379599 25127,top,6u
top       25127       root    6u  unix 0xffff9545f6fefc00      0t0 366379599 type=STREAM ->INO=366381191 874,dbus-daem,12u

플래그는 Unix 소켓 파일 -U만 표시합니다.lsof

소켓 파일의 이름만 표시됩니다.듣다프로세스. 다른 프로세스는 유닉스 소켓 파일의 이름을 표시하지 않지만 +Elsof를 사용하면 청취 소켓 파일의 inode가 표시되고 이 소켓을 청취하는 프로세스에 대한 행도 추가됩니다(소켓 파일 이름과 함께).

lsof이 예에서는 show 명령의 파일 설명 자만 요청했지만 top다른 lsof줄을 추가했습니다 dbus-daem. 이는 수신 대기 프로세스이고 수신 대기하는 소켓 파일은 입니다 /var/run/dbus/system_bus_socket.

  • Pid 25127(inode 366379599) 은 inode 366381191( )과 type=STREAM ->INO=366381191 874,dbus-daem,12u상호 작용합니다 .
  • Inode 366381191은 pid 874에 속하며 이 프로세스에는 두 번째 프로세스의 수신 측에 fd()가 있는 것을 볼 수 있습니다 /var/run/dbus/system_bus_socket type=STREAM ->INO=366379599 25127,top,6u. 여기서 소켓 파일 이름은 입니다 /var/run/dbus/system_bus_socket.

또한 어떻게 상호작용할 수 있나요?

이제 UNIX 소켓의 파일 이름이 있으므로 다음과 같은 다양한 방법으로 상호 작용할 수 있습니다.

socat - UNIX-CONNECT:/run/dbus/system_bus_socket
nc -U /run/dbus/system_bus_socket

자세한 내용은: Debian Squeeze에서 쉘을 통해 Unix 도메인 소켓과 통신하는 방법은 무엇입니까?

관련 정보