首页/安全/取证与溯源速查//proc/net 与 socket inode 关联
Linux 取证135 条

/proc/net 与 socket inode 关联

/proc/net/tcp 等文件用十六进制表示地址与端口,并带 inode 列;把 inode 与进程 fd 关联,可还原 ss 之外的套接字归属。

取证与溯源速查安全更新于 2026-10-13

连接与 inode 关联

/proc/net/tcp 与 /proc/net/udp 列出内核维护的连接表,但地址与端口以十六进制呈现,IPv4 地址还是小端字节序。表中每行带一个套接字 inode 号,用它去 /proc/<pid>/fd 下匹配 socket 链接,就能回答「这条连接由哪个进程持有」。

基本信息

文件/proc/net/tcp、/proc/net/udp、/proc/net/tcp6、/proc/net/unix
地址格式十六进制小端,需按字节反转后转为点分十进制
端口格式十六进制整数
inode 列连接行中的套接字编号
关联方式/proc/<pid>/fd/ 下形如 socket:[编号] 的链接
权限要求查看全部进程的 fd 需要 root

典型使用场景

  • 找出外联连接对应的持有进程
  • 确认监听端口由哪个服务进程占用
  • 配合 unix 套接字分析本地进程间通信
  • 内存镜像分析时校验连接的归属
  • 排查被隐藏进程持有的网络连接

最小示例

最小示例
cat /proc/net/tcp                                          # 原始连接表
awk 'NR>1 {print $2, $3, $4, $10}' /proc/net/tcp | head     # 地址、端口、状态、inode
# 校验换算:0100007F:0019 对应 127.0.0.1:25
python3 -c "import socket,struct; print(socket.inet_ntoa(struct.pack('<I', int('0100007F',16))))"
ls -l /proc/*/fd 2>/dev/null | grep 'socket:\[' | head     # 用 inode 反查持有进程
ss -tanp | head                                             # 已解析好的对照视图

输出逐列读法

列含义注意
local_address本地地址与端口十六进制,需按小端解码
rem_address远端地址与端口全为 0 表示尚未连接
st连接状态码01 为已建立,0A 为监听
inode套接字编号用于关联到持有进程
uid创建套接字的用户与进程属主交叉核对
地址与端口都按十六进制显示,解码前先确认字节序:IPv4 是四字节小端,直接按整数读会得到错误地址。
inode 号会随连接建立与关闭而变化,采集到的连接表只代表那一刻的状态,需要与 ss 输出一起记录采集时间。
处于 TIME_WAIT 等结束态的连接不再对应进程的 fd,这类条目不应算作活跃连接。
在容器内查看该文件得到的是容器网络命名空间的连接表,与宿主上的视图并不相同;跨命名空间比对前先确认所处环境。
遍历大量进程的 fd 目录会在高负载主机上造成明显 IO 压力,建议先用 ss 缩小待查范围。

易错点

  • 按十进制读十六进制字段:地址与端口都会被误解,结论完全错误
  • 忽略字节序:IPv4 地址是小端存储,不按字节反转会还原出错误地址
  • 把连接表当历史记录:它只反映采集那一刻的状态,连接关闭后条目即消失
  • 只看连接不看 inode:反查不到持有进程,最终只得到一份孤立的地址列表

数据来源与参考

  • man 5 proc(/proc/net 说明)
  • Linux 内核文档 networking/proc_net_tcp.txt
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌