查看连接数的方法

1. 直接统计总连接数

# 统计当前所有连接跟踪条目总数
wc -l /proc/net/nf_conntrack

# 或者更精确地(去掉表头)
cat /proc/net/nf_conntrack | wc -l

2. 按连接状态统计

# 按 TCP 状态分类统计
cat /proc/net/nf_conntrack | awk '/tcp/ {print $5}' | sort | uniq -c | sort -rn

# 按协议类型统计
cat /proc/net/nf_conntrack | awk '{print $3}' | sort | uniq -c | sort -rn

3. 查看 conntrack 表大小和占用率

# 查看当前连接跟踪数
cat /proc/sys/net/netfilter/nf_conntrack_count

# 查看最大连接跟踪数(表大小)
cat /proc/sys/net/netfilter/nf_conntrack_max

# 计算占用百分比
echo "当前连接数: $(cat /proc/sys/net/netfilter/nf_conntrack_count)"
echo "最大连接数: $(cat /proc/sys/net/netfilter/nf_conntrack_max)"

4. 使用 conntrack 工具(更直观)

如果系统安装了 conntrack-tools

# 安装
# Debian/Ubuntu: apt install conntrack
# OpenWrt: opkg install conntrack

# 统计总连接数
conntrack -C

# 按协议统计
conntrack -L -p tcp | wc -l
conntrack -L -p udp | wc -l

# 查看连接状态分布
conntrack -L -o extended | awk '{print $4}' | sort | uniq -c

5. 实时监控连接数变化

# OpenWrt 上的 watch 包名
opkg install procps-ng-watch

# 或者安装完整的 procps-ng 套件
opkg install procps-ng

# 每秒刷新显示当前连接数
watch -n 1 'cat /proc/sys/net/netfilter/nf_conntrack_count'

# 或者同时显示详细信息
watch -n 1 'echo "当前连接: $(cat /proc/sys/net/netfilter/nf_conntrack_count) / $(cat /proc/sys/net/netfilter/nf_conntrack_max)"'

输出字段说明

cat /proc/net/nf_conntrack 的典型输出格式:

plain复制

ipv4     2 tcp      6 431999 ESTABLISHED src=192.168.1.2 dst=1.2.3.4 sport=54321 dport=443 src=1.2.3.4 dst=192.168.1.2 sport=443 dport=54321 [ASSURED] mark=0 use=1
字段 含义
ipv4 地址族
2 协议编号(TCP=6, UDP=17)
tcp 协议名称
6 协议号
431999 超时时间(秒)
ESTABLISHED 连接状态
src/dst/sport/dport 源/目的 IP 和端口

路由器上的实用场景

# 查看某个 IP 的连接数(如内网某台设备)
cat /proc/net/nf_conntrack | grep "src=192.168.1.100" | wc -l

# 查看某个端口的连接数
cat /proc/net/nf_conntrack | grep "dport=443" | wc -l

# 查看处于 TIME_WAIT 状态的连接
cat /proc/net/nf_conntrack | grep "TIME_WAIT" | wc -l

如果你的路由器是 OpenWrt,也可以直接通过 Web 界面查看:
状态 → 防火墙 → 连接跟踪(需要安装 luci-app-conntrack)。