首页/网络/抓包与流量分析速查/lsof 反查端口与文件描述符
抓包工具链61 条

lsof 反查端口与文件描述符

lsof -i :PORT 列出占用端口的进程:与抓包时间线结合,可确认"谁在发这些包";对守护进程与重启场景尤为直观。

按端口反查占用进程

lsof 用来列出进程打开的文件,加上 -i 参数就能按端口或地址反查占用者,是回答「这些包是谁发的」这个问题最直接的来源之一。与抓包时间线结合,还能看出进程是否在特定时间发生了重启或句柄变化,对守护进程类场景尤其直观。

基本信息

适用平台Linux,部分系统需要单独安装 lsof 包
常用参数lsof -nP -i :443、lsof -p PID
参数含义-n 不解析主机名、-P 不解析端口名,输出更快
权限要求查看其他用户的进程通常需要 root

典型使用场景

  • 按端口反查占用进程
  • 确认某个进程打开了哪些网络连接
  • 排查文件描述符泄漏
  • 与服务重启时间点对照,确认连接归属变化
  • 结合抓包确定异常流量的来源程序

常用命令

常用命令
lsof -nP -i :443
# 不解析主机名与端口名,输出更快更稳定
lsof -nP -i TCP@10.0.0.5:5432
# 只看连接指定地址与端口的进程
lsof -p 1234 | head -20
# 查看指定进程打开的句柄,包含网络连接与普通文件

输出列读法

列含义注意
COMMAND进程名同名多实例需要看 PID
PID进程号与服务重启时间对照
USER运行用户权限异常时重点检查
TYPE句柄类型IPv4、IPv6 等
NAME连接地址与状态括号内通常标注连接状态
与 ss 相比,lsof 更偏文件描述符视角,能看到进程打开的连接与普通文件。排查句柄泄漏或文件占用时它更直接,两个工具结合使用,证据链会更完整。
在高频循环里反复调用 lsof 开销可观,脚本里要控制调用频率。内核态或旁路服务可能不显示常规文件描述符,查不到时应结合 ss 佐证,不要轻率得出「没有进程」的结论。

排查顺序

  • 从抓包确定可疑的地址与端口
  • 用 lsof 按端口反查占用进程与 PID
  • 查看该进程打开的全部句柄,确认连接数量是否异常
  • 与进程启动时间对照,判断连接归属是否发生变化
  • 查不到记录时用 ss 交叉验证,再判断是否属于内核态服务

易错点

  • 在循环里高频调用:本身开销可观,会干扰被观测系统
  • 忽略权限限制:普通用户看不到他人进程,容易误判为进程不存在
  • 容器与宿主 PID 命名空间不同:对照时需带容器前缀才不会认错
  • 把看不到句柄当成没进程:内核态服务用常规方式查不到,需要交叉验证

数据来源与参考

  • man 8 lsof
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌