명령 출력에 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
소켓 파일의 이름만 표시됩니다.듣다프로세스. 다른 프로세스는 유닉스 소켓 파일의 이름을 표시하지 않지만 +E
lsof를 사용하면 청취 소켓 파일의 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 도메인 소켓과 통신하는 방법은 무엇입니까?