如何找到有关 /proc/fd 中套接字文件的更多信息?

如何找到有关 /proc/fd 中套接字文件的更多信息?

查看 /proc/$mypid/fd/,我看到这些文件

lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted)
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868]
lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 5 -> socket:[1424055882]

因为我可以访问代码,所以我知道这些套接字与 TCP 连接相关联(一个是到某些机器上的端口 5672 的连接,另一个是到其他机器上的端口 3306 的连接),但我想知道哪个套接字是绑定到哪个连接。我怎样才能做到这一点?

更一般地说,我如何询问操作系统套接字另一端是什么?

答案1

命令lsof

一个不错的选择可能是lsof。正如man lsof所述,它可以方便地获取有关 的信息open files such as Internet sockets or Unix Domain sockets


使用它

首先,了解一下/proc/$PID/fd/列出的插座编号。
例如,socket:[14240]您可能感兴趣。

然后用于lsof -i -a -p $PID打印所有网络文件使用的列表$PID

  • -i生成属于用户或进程的网络文件列表

  • -a逻辑组合或 AND 给定的参数

  • -p $PID仅选择有关您的流程的信息

我的浏览器以 PID 运行的典型输出2543可能是:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
browser 2543 pidi   55u  IPv4  14240      0t0  TCP  pidi.router.lan:55038->stackoverflow.com:https (ESTABLISHED)

以及更多类似的线路。

伟大的!现在仔细看看该DEVICE专栏。它与我们之前列出的插座相匹配/proc/$PID/fd/
通过这一NAME部分,我们可以知道套接字的另一端是什么。

在现实世界中,您可能会获得大量输出,但只是过滤或grep用于您感兴趣的套接字。

我很确定可以组合所有命令,但这应该足以让您开始。

相关内容