netstat & lsof

本文深入探讨了如何使用netstat和lsof命令在Linux环境下查看网络连接状态及监听端口,包括TCP和UDP协议的具体应用。通过实例展示了如何筛选特定的MAC地址和监听状态,为网络故障排查提供了实用技巧。

netstat

mac
  • netstat -anvp tcp
  • netstat -anvp udp
linux

lsof

mac
  • lsof -nP -iTCP -sTCP:LISTEN
### 功能比较与使用方法 #### 功能定位 `netstat` 是一个网络统计工具,主要用于显示网络连接、路由表、接口统计信息、伪装连接、多播成员等信息。它可以显示 TCP、UDP、ICMP、IP、SCTP 等协议的网络连接状态。该工具常用于网络故障排查和性能调优。例如,使用 `netstat -tulnp` 可以查看系统中所有监听的 TCP 和 UDP 端口,并显示关联的进程信息[^1]。 `lsof`(List Open Files)则是一个更通用的工具,其核心功能是列出系统中所有打开的文件。在 Linux 系统中,网络连接也被视为一种“文件”,因此 `lsof` 也可以用于查看网络连接信息。例如,`lsof -i :80` 可以查看占用 80 端口的进程信息,而 `lsof -i -P | grep LISTEN` 则可以列出所有处于监听状态的网络连接[^2]。 #### 使用方法比较 ##### `netstat` 的常用用法 - **显示所有活动的 TCP 和 UDP 连接**: ```bash netstat -tun ``` 其中 `-t` 表示 TCP,`-u` 表示 UDP,`-n` 表示不解析主机名和服务名。 - **显示所有监听状态的端口**: ```bash netstat -l ``` - **显示监听状态的 TCP 端口及进程信息**: ```bash netstat -lnpt ``` 该命令中 `-p` 表示显示进程信息,需要 root 权限。 - **结合 `grep` 查看特定端口的连接**: ```bash netstat -pan | grep 2809 ``` 可以过滤出与 2809 端口相关的连接信息[^3]。 ##### `lsof` 的常用用法 - **列出所有打开的网络连接**: ```bash lsof -i ``` - **查看特定端口的占用情况**: ```bash lsof -i :80 ``` 可以显示占用 80 端口的进程信息,包括进程名、PID 等。 - **查看特定协议的连接**: ```bash lsof -i tcp ``` 可以仅显示 TCP 协议的连接信息[^3]。 - **查看某个用户打开的网络连接**: ```bash lsof -u username -i ``` 可以筛选出特定用户建立的网络连接[^2]。 - **查看监听状态的网络连接**: ```bash lsof -i -P | grep LISTEN ``` 可以显示所有处于监听状态的网络服务。 #### 信息展示维度 `netstat` 更专注于网络连接状态和协议层面的信息,如连接状态(`ESTABLISHED`、`LISTEN`、`TIME_WAIT` 等)、本地和远程地址、端口等。它适合用于查看整体网络连接情况,尤其是 TCP 的状态转换和 UDP 的无连接通信[^1]。 `lsof` 则更侧重于进程与文件(包括网络连接)的绑定关系。它可以显示某个进程打开了哪些网络连接,或者某个网络连接被哪个进程占用。此外,`lsof` 还能显示用户、文件描述符等更详细的上下文信息,适合用于排查进程级别的网络问题[^2]。 #### 权限要求 `netstat` 在显示进程信息时需要 root 权限,否则可能无法显示完整的 PID 和进程名。例如,使用 `netstat -tulnp` 时,若未使用 `sudo`,可能会出现 `Permission denied` 或 `truncated` 的提示。 `lsof` 同样需要 root 权限才能显示所有进程的详细信息。普通用户执行 `lsof` 时,仅能看到当前用户拥有的进程所打开的文件和网络连接。 #### 性能与替代工具 `netstat` 已逐渐被更现代的工具如 `ss`(Socket Statistics)取代。`ss` 提供了更高效的网络状态查看方式,语法也更简洁。例如,`ss -tulnp` 与 `netstat -tulnp` 功能相同,但运行速度更快[^1]。 `lsof` 目前仍是查看打开文件和网络连接的首选工具之一,尤其是在需要结合用户、进程、文件路径等多维度信息时。它没有直接的替代工具,但在某些特定场景下,可以与 `ps`、`grep` 等命令结合使用以增强排查能力。 #### 总结 `netstat` 更适合用于查看网络连接状态和协议层面的统计信息,而 `lsof` 更适合用于查看进程与网络连接、文件之间的绑定关系。两者各有侧重,在实际使用中可根据需求选择合适的工具[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值