Lsof
與 lsof 中的 Unix Socket 互動
我發現
lsof
命令輸出中使用了一個 Unix 套接字: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
?另外,我該如何與之互動?我知道我可以
netcat
用來連接到 Unix 域套接字,但是從線上閱讀範例看來,您必須指定一個文件。
我不知道如何回答您的第一個第二個問題,但是對於第一個問題,您可以使用
+E
標誌 forlsof
來顯示套接字的端點。從手冊頁:+|-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
的
-U
標誌lsof
僅顯示 Unix 套接字文件。請注意,您只會看到偵聽程序的套接字文件的名稱。另一個程序不會顯示 unix 套接字文件的名稱,但使用
+E
lsof 會顯示正在偵聽的套接字文件的 inode,並且還會為偵聽此套接字的程序添加一行(以及套接字文件名)。注意在這個例子中,我們只要求
lsof
顯示命令的文件描述符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
.