日期:2014-05-16  浏览次数:20802 次

一个用来统计当前linux连接某个端口的IP数目的语句
为了要分析连接到当前linux的某个端口,比如80的所有外来IP的数,并且要来个排序
和统计,可以这样:
  netstat -tn 2>/dev/null | grep :80 |grep "ESTABLISHED"| awk '{print $5}' | cut -d: -f 4 | sort | uniq -c | sort -nr | head

下面注意来分析:

1)netstat -tn 2>/dev/null
参数t,只显示tcp连接  -n:只显示数字,则会显示入下的形式:

  tcp        0      0 64.91.*.*:80            114.198.236.100:12763       TIME_WAIT  
tcp        0      0 64.91.*.*:80            175.136.226.244:51950       TIME_WAIT  
tcp        0      0 64.91.*.*:80            175.136.226.244:51951       TIME_WAIT  
tcp        0      0 64.91.*.*:23            202.127.210.2:14517         TIME_WAIT  
tcp        0      0 64.91.*.*:80            149.238.193.121:65268       TIME_WAIT  
tcp        0      0 64.91.*.*:80            114.198.236.100:44088       ESTABLISHED
tcp        0      0 64.91.*.*:80            175.136.226.244:51952       TIME_WAIT

2)但是只要established的,则grep  "ESTABLISHED"

3)然后再AWK一下:
::ffff:   114.198.236.100:12763 
::ffff: 175.136.226.244:51950
::ffff: 175.136.226.244:51951
::ffff: 149.238.193.121:65268
::ffff: 114.198.236.100:44088
::ffff: 175.136.226.244:51952

4)然后注意用cut,提取内容,CUT的用法见:
  http://www.cnblogs.com/dong008259/archive/2011/12/09/2282679.html
cut -d : -f 4
  这里用:分隔符号,结果为:
114.198.236.100
175.136.226.244
175.136.226.244
149.238.193.121
114.198.236.100
175.136.226.244

5) 然后再排序,group一下,然后按连接次数最多的排在前面
  ,最后甚至可以head一下,完成了
3 175.136.226.244
2 114.198.236.100
1 149.238.193.121
甚至再wc -l一下,得出当前连接80端口的estabalished的外部IP的总数

1 楼 funnytime 2012-08-31  
管道真多,不过一次搞定挺好
2 楼 DiaoCow 2012-09-01  
shell有趣的地方就是可以尝试用不同方法解决同一个问题,我也用另外一种方法解决下:
netstat -nt | awk 'NR > 2 {gsub(/:[0-9]+/,"",$5); ip[$5]++;} END {for(i in ip) {print ip[i],i}}' | sort -k1
3 楼 jackyrong 2012-09-01  
DiaoCow 写道
shell有趣的地方就是可以尝试用不同方法解决同一个问题,我也用另外一种方法解决下:
netstat -nt | awk 'NR > 2 {gsub(/:[0-9]+/,"",$5); ip[$5]++;} END {for(i in ip) {print ip[i],i}}' | sort -k1


精彩,我现在是每15分钟统计一次,但其实我想一天下来,自动顺便把一天的所有值求出平均值后,再写到CSV中,这样就不用在EXCEL中再处理了