如何查看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的连接数是一项常见的网络监控任务,可用于排查性能瓶颈、安全威胁或异常流量,以下是详细的操作步骤及多种实现方法:

如何查看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实现秒级刷新:

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

使用现代ss工具替代方案

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

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

  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. 典型命令示例

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

    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强大的文本处理

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/91701.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年8月4日 13:51
下一篇 2025年8月4日 14:00

相关推荐

  • linux如何查重启原因

    Linux中,可通过dmesg -T | grep ‘Restarting system’、last -x、journalctl -b -1或查看/var/log/syslog等日志文件来查重启原因

    2025年8月3日
    000
  • Linux密码忘了怎么找回

    Linux系统用户密码以加密哈希值存储在/etc/shadow文件中,普通用户无权查看,即使是root用户,也只能看到加密后的字符串,无法直接获取原始明文密码,如需修改密码,请使用passwd或sudo passwd 用户名命令。

    2025年6月14日
    100
  • 怎样配置Linux开发环境变量?

    配置Linux开发环境变量主要修改用户配置文件(如~/.bashrc),使用export命令设置变量(如export PATH=$PATH:/新路径),修改后执行source ~/.bashrc立即生效。

    2025年6月10日
    100
  • Linux如何导入数据库文件

    使用mysql命令导入:mysql -u 用户名 -p 数据库名 ˂ 数据库文件.sql,也可登录MySQL后执行source 数据库文件.sql。

    2025年7月4日
    000
  • Linux账户安全最佳配置指南

    使用普通账户日常操作,仅需管理员权限时通过sudo提权,强制设置强密码并定期更换,禁用root账户直接远程登录,改用密钥认证,定期审计账户权限。

    2025年6月24日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN