通过套接字的路径名查找套接字的详细信息?

通过套接字的路径名查找套接字的详细信息?

我在客户端应用程序失败上运行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

相关内容