查看 /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
用于您感兴趣的套接字。
我很确定可以组合所有命令,但这应该足以让您开始。