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


33

在/ 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
使用socat....
heemayl

Answers:


40

命令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您感兴趣的套接字。

我很确定一个命令可以组合所有命令,但这足以让您入门。


谢谢!已接受并接受。我确实在lsof中看到一个套接字显示为“ unix 0xffff88002704d380 0t0 1423733559套接字”,如何挖掘0xffff88002704d380是什么?
Benhsu 2015年

1
“ unix 0xfff ...”似乎是unix_sock结构的内核内存地址。该结构包含一个指向套接字端点的指针。看一看grep -rni ffff88002704d380 /proc。在/ proc /下的某个位置可能是您的答案,cat找到了文件grep。但是请不要把我固定在这...这里可能是可怕的错误。
pidi 2015年

lsof读取关于从插座的其它信息/proc/net/tcp/proc/net/tcp6/proc/net/udp,等等取决于插座类型。
Jesin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.