最常用方法是用netstat提取established连接的远程ip并去重计数:netstat -nt | awk '$6=="established"{split($5,a,":");print a[1]}'|sort|uniq-c|sort-nr;ss命令更高效,等效写法为ss -tn | awk '$1=="estab"{split($5,a,":");print a[1]}'|sort|uniq-c|sort-nr。

直接用 netstat 提取远程 IP,再用 awk 去重计数,是最常用也最可靠的方法。关键在于正确分离 IP 地址字段,并忽略端口号。
提取所有 ESTABLISHED 连接的客户端 IP 并计数
适用于排查异常高连接数的来源 IP:
- netstat -nt | awk '$6 == "ESTABLISHED" {split($5, a, ":"); print a[1]}' | sort | uniq -c | sort -nr
说明:$5 是远程地址(如 192.168.1.100:54321),split($5, a, ":") 把它按冒号切开,a[1] 就是纯 IP;只统计状态为 ESTABLISHED 的连接,更贴近真实活跃会话。
统计所有 TCP 连接(含各种状态)的源 IP 数量
适合全面掌握当前入站连接分布:
- netstat -n | awk '/^tcp/ {split($5, ip, ":"); print ip[1]}' | sort | uniq -c | sort -nr
注意:/^tcp/ 确保只处理 TCP 行; 是远端地址列,无论状态如何都提取;结果按数量降序排列,顶部即最高频访问 IP。
针对特定端口(如 80 或 443)统计访问 IP
常用于 Web 服务压力分析或封禁恶意爬虫:
- netstat -nt | awk '$4 ~ /:80$/ && $6 == "ESTABLISHED" {split($5, a, ":"); print a[1]}' | sort | uniq -c | sort -nr
- 把
:80$换成:443$即可统计 HTTPS 流量来源
说明:$4 ~ /:80$/ 表示本机监听在 80 端口(结尾匹配),&& 同时满足 ESTABLISHED 状态,避免统计 LISTEN 或 TIME_WAIT 等干扰项。
用 ss 替代 netstat(推荐新系统)
ss 更快、更轻量,输出格式略有不同,但逻辑一致:
- ss -tn | awk '$1 == "ESTAB" {split($5, a, ":"); print a[1]}' | sort | uniq -c | sort -nr
- 若需包含非 ESTAB 状态,去掉
$1 == "ESTAB"条件即可
注意:ss -tn 输出中第 5 列是远程地址(格式同 netstat),第 1 列是状态缩写(如 ESTAB、SYN-RECV),无需正则匹配状态名。











