域名城

结合netstat和awk命令来统计网络连接数

已有 310 次阅读2012-10-11 13:47 |个人分类:linux| netstat, 统计, 网络连接

文章转载自:http://hi.baidu.com/thinkinginlamp/blog/item/afbcab64b1ad81f3f6365453.html

Shell写起来很简单,效果却很神奇,你可以先尝试执行一下这条命令:

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

会得到类似下面的结果,具体数字会有所不同:

LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669

也就是说,这条命令可以把当前系统的网络连接状态分类汇总.

下面解释一下为啥要这样写:

一个简单的管道符连接了netstat和awk命令.

------------------------------------------------------------------

先来看看netstat:

netstat -n

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT

你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了.

------------------------------------------------------------------

再来看看awk:

/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录.

state[]
相当于定义了一个名叫state的数组

NF
表示记录的字段数,如上所示的记录,NF等于6

$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT

state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数

++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一

END
表示在最后阶段要执行的命令

for(key in state)
遍历数组

print key,"\t",state[key]
打印数组的键和值,中间用\t制表符分割,美化一下.

------------------------------------------------------------------

解释完了,如果这样你还看不明白命令,那我也无能为力了

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

易介集团旗下品牌 - 域名城| 国域| 中付通| 中介通| 中华知识产权网| 商标城| DoName| 域名论坛

电信与信息服务业务经营许可证 京ICP证090790号  京ICP备10003495号  电信业务审批[2010]字第598号函  京公网安备110108903585号

Archiver|手机版|小黑屋|侵权投诉|Club.domain.cn 中国域名论坛 论坛管理员邮箱:club@domain.cn

Powered by Discuz!X3.2GMT+8, 2024-5-19 02:49 © 2001-2024 Comsenz Inc.

返回顶部