透過套接字的路徑名稱尋找套接字的詳細資訊?

透過套接字的路徑名稱尋找套接字的詳細資訊?

我在客戶端應用程式失敗上運行strace並獲得以下資訊:

socket(PF_LOCAL, SOCK_SEQPACKET|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
setsockopt(3, SOL_SOCKET, SO_PASSCRED, [1], 4) = 0
connect(3, {sa_family=AF_LOCAL, sun_path="/path/to/socket"}, 19) = -1 EPROTOTYPE (Protocol wrong type for socket)
close(3)                                = 0
exit_group(2)                           = ?
+++ exited with 2 +++

然後我嘗試猜測透過使用各種參數來模擬套接字socat,但沒有效果。

我還查看了這個答案中的程式碼這裡,但它似乎正在製作一個套接字,而不是使用現有的套接字,而且我似乎無法找到如何從路徑獲取套接字。

在不深入原始程式碼的情況下,是否有一種簡單的方法可以從套接字的路徑(如果存在)確定現有套接字的詳細資訊(例如協定類型)?

答案1

您可以使用lsof /path/to/socket

COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
hindsight 19619 root    6u  unix 0xffff88038612b480      0t0 257123917 /path/to/socket

了解了PID您可以找到有關該過程本身的更多資訊:

cat /proc/19619/io 
rchar: 11635200437
wchar: 2722080850
syscr: 16905056
syscw: 920240
read_bytes: 36397568
write_bytes: 3515994112
cancelled_write_bytes: 760422400

或者您可以用於ss顯示所有 Unix 套接字。

ss -x
  • -x顯示 Unix 域套接字
  • -e顯示詳細的套接字訊息
  • -m顯示套接字記憶體使用情況

您可以過濾某種類型:

ss -x -A unix_stream

相關內容