linux ss命令统计tcp连接数

linux统计tcp连接相关的命令:ss或者netstat结合awk。

ss命令

ss -s

 -t: tcp

 -a: all

 -l: listening 列出所有已打开的网络连接。

 -s: summary   显示Sockets摘要。

 -p: progress

 -n: numeric     不解析服务名称。

 -r: resolve    解析服务名称。

 -m: memory   显示内存情况。

netstat命令

统计80端口连接数:

netstat -nat|grep -i "80"|wc -l

统计httpd协议连接数:

ps -ef|grep httpd|wc -l

统计状态为established的连接数:

netstat -na|grep ESTABLISHED|wc -l

IP连接数排序:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

统计nginx访问量前10的url:

cat /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -nr | head -n 10

统计访问次数前10的ip:

 cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10

统计访问量前10的时间段:

 cat /var/log/nginx/access.log |grep -P "\[{1}(.+)]" -o|cut -c 14-15|sort|uniq -c|sort -nr|head

日志格式如下:

207.46.13.241 - - [11/Apr/2020:13:49:07 +0800] "GET /css3 HTTP/1.1" 200 33702 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" "

说明:先通过grep正则截取时间,通过cut命令截取时间段,然后执行统计排序。

按状态分类统计:

netstat -tan |grep ^tcp |awk '{++a[$6]} END{for (i in a) print i, a[i]}'

统计TCP状态为:TIME_WAIT/CLOSE_WAIT/ESTABLISHED/LISTEN的连接数。

ESTABLISHED:连接已经建立,可以传输数据。

LISTEN:Server端Socket正在监听来自客户端TCP请求。

TIME_WAIT:主动关闭连接的一方收到另一方发送的FIN包后返回ACK包,释放网络资源。

CLOSE_WAIT:表示被动关闭连接的一方等待关闭连接。收到对方发送的FIN包后返回ACK包,进入CLOSE_WAIT状态。