![netstat (/proc/net):为什么用户与套接字根关联?如何获取“远程”进程的用户ID?](https://linux22.com/image/107971/netstat%20(%2Fproc%2Fnet)%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%E7%94%A8%E6%88%B7%E4%B8%8E%E5%A5%97%E6%8E%A5%E5%AD%97%E6%A0%B9%E5%85%B3%E8%81%94%EF%BC%9F%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E2%80%9C%E8%BF%9C%E7%A8%8B%E2%80%9D%E8%BF%9B%E7%A8%8B%E7%9A%84%E7%94%A8%E6%88%B7ID%EF%BC%9F.png)
ubuntu 16.04
我有 2 个节点应用程序,app-1 和 app-2,用户名与其应用程序名称匹配,在同一实例上本地监听(分别在端口 8001 和 8002 上)。当 app-1 向 app-2 发出请求时,我可以找到处理来自 app-2 的请求的套接字的 RemoteHost。然后,当我尝试通过 netstat 查找此 RemoteHost 并检索一些用户/进程信息时,我发现与套接字关联的用户是uid: 0
或root
。我的期望是与此连接关联的用户是app-1
,因为这是生成请求的应用程序。所以我的问题的第一部分是:为什么是用户root
而不是app-1
?
第 2 部分:我的目标是仅根据remoteHost
(例如 127.0.0.1:53900)中的信息获取远程进程的用户 id。在我看来,操作系统应该确切地知道哪个进程/用户 ID 正在使用该主机/端口组合。因此,假设netstat
行不通,由于上一段中提到的原因,我可以查看哪些其他系统调用或实用程序来获取此信息?
答案1
令人尴尬的是,我认为第 1 部分中的问题是我只是在一侧已关闭连接(状态为time-wait
)后才检查连接。作为测试,我将连接类型更改为保持活动状态,现在用户信息按预期显示。
第 2 部分的答案将是读取与netstat
(/proc/net/*) 相同的文件并搜索remoteHost
.