当前位置:首页 > Linux > 正文

如何查看linux系统每个ip的连接数

Linux中,可通过 netstat -nat | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nrss -ant | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr命令查看每个IP的连接数并排序

Linux系统中,查看每个IP的连接数是一项常见的网络监控任务,可用于排查性能瓶颈、安全威胁或异常流量,以下是详细的操作步骤及多种实现方法:

通过 netstat + 文本处理工具链

此方案适用于传统RHEL/CentOS等基于net-tools的环境,核心思路是提取目标字段后进行聚合统计。

  1. 基础命令组合

    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:按连接数降序排列结果。
  2. 处理IPv6干扰的特殊场景:若输出中混入类似ffff::::的无效地址(常见于启用了IPv6的系统),建议临时关闭IPv6或增加正则过滤逻辑,例如添加egrep -v "^::"排除空地址。

  3. 实时监控变体:如需动态观察变化,可结合watch实现秒级刷新:

    如何查看linux系统每个ip的连接数  第1张

    watch -n 1 'netstat -an | grep ESTABLISHED | wc -l'

使用现代ss工具替代方案

ss命令作为新一代网络分析工具,性能更优且语法更简洁,推荐优先使用。

  1. 标准统计流程

    ss -tan state established | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr
    • ss -tan:显示TCP协议下的所有监听/已连接套接字;
    • state established参数直接指定状态,避免额外过滤步骤;
    • 后续处理逻辑与netstat方案完全一致。
  2. 协议版本控制技巧:通过-4-6参数可分别限定IPv4/IPv6连接统计:

    ss -t4an state established # 仅查看IPv4连接
    ss -t6an state established # 仅查看IPv6连接
  3. 进程关联分析扩展:若需进一步定位到具体应用,可添加-p参数获取PID信息:

    ss -tapn | awk '{print $5,$6}' # 同时显示IP和对应进程ID

利用lsof进行深度排查

当需要跨协议(含UNIX域套接字)全面审计时,lsof提供更强大的文件描述符级视角。

  1. 典型命令示例

    sudo lsof -i -n -P | grep TCP | wc -l
    • -i:关注网络相关文件句柄;
    • -n:禁止解析主机名(加速输出);
    • -P:不转换端口号为服务名称;
    • grep TCP:聚焦TCP协议连接。
  2. 精准计数实现:若希望看到每个IP的具体进程分布,可采用如下管道:

    sudo lsof -iTCP | awk '{print $9}' | cut -d: -f1 | sort | uniq -c | sort -nr

多维度对比表

特性 netstat方案 ss方案 lsof方案
执行效率 中等 较低(依赖全盘扫描)
IPv6支持 需要额外处理 原生分离 自动适配
进程关联能力 支持(-p参数) 强(显示完整命令路径)
输出可读性 较差(需二次加工) 较好 最佳(含文件路径上下文)
适用场景 快速统计 常规监控 故障排查

常见问题解答(FAQs)

  1. 问:为什么执行netstat时报找不到命令?
    答:现代Linux发行版(如Ubuntu 18.04+/CentOS 8+)已移除net-tools预装包,解决方案是手动安装:对于Debian系用apt install net-tools;RedHat系用yum install net-tools,建议优先使用原生支持的ss命令替代。

  2. 问:如何筛选特定端口的范围?
    答:在所有三种方法中均可通过管道追加端口过滤条件,例如查看80端口周边的流量:| grep ':8[0-9]'或精确匹配| grep ':8080',对于大范围扫描,推荐结合egrep实现正则表达式匹配。

根据实际需求选择合适的工具组合,本质上都是通过提取网络连接中的IP地址字段,再利用Linux强大的文本处理

0