首页/安全/应急响应速查/lsof 按进程或端口反查网络

lsof 按进程或端口反查网络

万能文件查看器:既能看到进程开了哪些网络文件,也能从端口反查监听者,配合过滤参数精确定位。

应急响应速查安全更新于 2026-10-13

lsof 是什么

lsof 的本职工作是列出进程打开的文件,而 Linux 上套接字也是一种文件,所以它天然具备双向查询能力:既可以从进程出发看它开了哪些网络连接,也可以从端口或对端地址出发反查到持有它的进程。它的数据来源是 /proc/<PID>/fd 与 /proc/net/ 下的内核表。相比 ss 侧重连接状态,lsof 的优势在于同时给出用户、进程名与文件描述符编号,便于与取证记录对照。

基本信息

适用平台Linux 与多数 Unix;Windows 用 handle 或 Get-NetTCPConnection
常用选项-i 网络文件 -p 指定进程 -u 指定用户 -c 指定命令名 -d 指定 fd
解析控制-n 不解析主机名 -P 不解析端口名,排查时必加
性能提醒lsof 会遍历进程的文件描述符表,业务高峰期整机执行开销较大
权限要求查看其他用户的进程需要 root 或具备 CAP_SYS_PTRACE 能力
特殊用法lsof +L1 列出已删除但仍被进程占用的文件,处置木马时非常有用

典型使用场景

  • 已知端口要反查占用它的进程,决定处置顺序
  • 已知可疑进程 PID 要看它的全部网络连接与打开文件
  • 确认某账号名下的进程打开了哪些文件,判断是否在读写敏感数据
  • 处置木马时找出「文件已删除但进程仍在运行」的样本,从 /proc 里把二进制捞出来
  • 与 ss 结果交叉比对,提高连接证据的可信度

常用示例

常用示例
sudo lsof -i -nP | head -n 30                    # 全部网络文件,加 -nP 避免解析
sudo lsof -i :22 -nP                             # 按端口反查进程
sudo lsof -p 1234 | grep -iE 'tcp|udp'           # 按进程看它的网络连接
sudo lsof -i @203.0.113.10 -nP                   # 到指定地址的连接
sudo lsof -i -sTCP:LISTEN -nP                    # 只看监听
sudo lsof +L1 | head -n 20                       # 已删除但被占用的文件
sudo lsof -u www-data -nP | grep -c ESTABLISHED  # 按用户统计已建立连接

输出逐列读法

列含义异常信号
COMMAND / PID / USER进程名、进程号与运行账号低权限账号持有对外长连接
FD文件描述符编号与模式,如 3u、5w大量相同编号说明程序反复新建连接未释放
TYPE文件类型:IPv4、IPv6、REG、DIR、FIFO、unixunix 套接字大多为本地服务,需按进程判断
DEVICE / SIZE/OFF设备号与文件大小或偏移偏移持续增长说明文件正在被持续写入
NODEinode 编号可与 /proc/<PID>/fd 对照,也用于找回被删文件
NAME具体对象:路径或 本地地址:端口 到 对端地址:端口(状态)对端为陌生公网地址且端口高位,重点排查
lsof +L1 的实战价值很高:木马的二进制被删掉但进程还在跑时,文件会显示为 (deleted),此时用 cp /proc/<PID>/exe 就能把样本完整捞出来做哈希与检测,这是清理前必须完成的一步。
lsof 与 ss、ps 一样属于可能被 rootkit 污染的命令:结果异常或明显缺失时,回到 /proc/<PID>/fd 与 /proc/net/tcp 直接核对,或用静态编译的 busybox lsof 复核,不要只信单一工具的输出。

交叉验证

交叉验证
sudo ss -antp | grep -E 'ESTAB|LISTEN' | head -n 20     # ss 视角,输出更紧凑
sudo ls -l /proc/1234/fd | head -n 20                    # 内核视角的文件描述符
sudo cat /proc/1234/net/tcp | head -n 10                 # 该进程命名空间下的 TCP 表
sudo ls -l /proc/1234/exe                                # 可执行文件是否已删除
sudo lsof -p 1234 | wc -l                                # 与 ls -l /proc/1234/fd 行数对照
输出量大时务必先过滤:在连接数上万的主机上直接跑 lsof -i 会消耗明显 CPU 与内存,建议先 ss 缩小范围,再用 lsof 对具体 PID 做精细核对。
与 ss 的分工:先用 ss 快速圈出可疑连接,再用 lsof 对具体 PID 做精细核对,两者结果不一致时以 /proc 里的内核数据为准。这样既控制开销,也避免只依赖单一工具造成误判。

易错点

  • 不加 -nP 就跑:反向解析主机名与端口名会拖慢输出,甚至长时间卡住,还会在 DNS 侧留下查询记录
  • 把 lsof 输出当唯一依据:rootkit 可以过滤它的结果,必须与 /proc 与 ss 交叉核对
  • 忘记 +L1:被删除仍运行的木马样本就藏在里面,清理后无法再取回
  • 在业务高峰整机执行不带过滤的 lsof:读全表开销大,可能拖慢关键服务
  • 把 unix 套接字也当成网络外联:本地服务大量使用 unix socket,需要按进程与路径判断

数据来源与参考

  • man 8 lsof

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌