如何查看linux系统每个ip的连接数
- Linux
- 2025-08-04
- 4
netstat -nat | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
或
ss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr
命令查看每个IP的连接数并排序
Linux系统中,查看每个IP的连接数是一项常见的网络监控任务,可用于排查性能瓶颈、安全威胁或异常流量,以下是详细的操作步骤及多种实现方法:
通过 netstat
+ 文本处理工具链
此方案适用于传统RHEL/CentOS等基于net-tools的环境,核心思路是提取目标字段后进行聚合统计。
-
基础命令组合:
netstat -an | grep ESTABLISHED | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr
netstat -an
:列出所有网络连接(包含TCP/UDP);grep ESTABLISHED
:过滤出已建立的稳定连接;- 第一个
awk '{print $5}'
:提取第五列(格式为IP:端口
); - 第二个
awk -F: '{print $1}'
:以冒号分割,仅保留纯IP地址; sort
+uniq -c
:对IP排序并计数重复项;sort -nr
:按连接数降序排列结果。
-
处理IPv6干扰的特殊场景:若输出中混入类似
ffff::::
的无效地址(常见于启用了IPv6的系统),建议临时关闭IPv6或增加正则过滤逻辑,例如添加egrep -v "^::"
排除空地址。 -
实时监控变体:如需动态观察变化,可结合
watch
实现秒级刷新:watch -n 1 'netstat -an | grep ESTABLISHED | wc -l'
使用现代ss
工具替代方案
ss
命令作为新一代网络分析工具,性能更优且语法更简洁,推荐优先使用。
-
标准统计流程:
ss -tan state established | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr
ss -tan
:显示TCP协议下的所有监听/已连接套接字;state established
参数直接指定状态,避免额外过滤步骤;- 后续处理逻辑与
netstat
方案完全一致。
-
协议版本控制技巧:通过
-4
或-6
参数可分别限定IPv4/IPv6连接统计:ss -t4an state established # 仅查看IPv4连接 ss -t6an state established # 仅查看IPv6连接
-
进程关联分析扩展:若需进一步定位到具体应用,可添加
-p
参数获取PID信息:ss -tapn | awk '{print $5,$6}' # 同时显示IP和对应进程ID
利用lsof
进行深度排查
当需要跨协议(含UNIX域套接字)全面审计时,lsof
提供更强大的文件描述符级视角。
-
典型命令示例:
sudo lsof -i -n -P | grep TCP | wc -l
-i
:关注网络相关文件句柄;-n
:禁止解析主机名(加速输出);-P
:不转换端口号为服务名称;grep TCP
:聚焦TCP协议连接。
-
精准计数实现:若希望看到每个IP的具体进程分布,可采用如下管道:
sudo lsof -iTCP | awk '{print $9}' | cut -d: -f1 | sort | uniq -c | sort -nr
多维度对比表
特性 | netstat方案 | ss方案 | lsof方案 |
---|---|---|---|
执行效率 | 中等 | 高 | 较低(依赖全盘扫描) |
IPv6支持 | 需要额外处理 | 原生分离 | 自动适配 |
进程关联能力 | 弱 | 支持(-p 参数) |
强(显示完整命令路径) |
输出可读性 | 较差(需二次加工) | 较好 | 最佳(含文件路径上下文) |
适用场景 | 快速统计 | 常规监控 | 故障排查 |
常见问题解答(FAQs)
-
问:为什么执行
netstat
时报找不到命令?
答:现代Linux发行版(如Ubuntu 18.04+/CentOS 8+)已移除net-tools预装包,解决方案是手动安装:对于Debian系用apt install net-tools
;RedHat系用yum install net-tools
,建议优先使用原生支持的ss
命令替代。 -
问:如何筛选特定端口的范围?
答:在所有三种方法中均可通过管道追加端口过滤条件,例如查看80端口周边的流量:| grep ':8[0-9]'
或精确匹配| grep ':8080'
,对于大范围扫描,推荐结合egrep
实现正则表达式匹配。
根据实际需求选择合适的工具组合,本质上都是通过提取网络连接中的IP地址字段,再利用Linux强大的文本处理