我在客戶端應用程式失敗上運行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