按端口反查占用进程
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 交叉验证,再判断是否属于内核态服务