天天看点

查看当前nat连接数的脚本

查看当前nat连接数的脚本

今天在CU搜索帖子的时候,看到一个统计nat连接数的脚本

原脚本每次运行的时候只是把当前的所有连接显示出来

自己对脚本进行了改进

#!/bin/bash 

case "$1" in

#case语句表示设置程序运行的参数,$1表示第一个参数

-t) 

#while : 

echo "Input ctrl+c to Quit" 

#do

#while : 这是一个永远的循环,因为后面的条件省略了,看我同事写的

while [ "1" -eq "1" ] 也可以。(废话,1当然永远等于1了)

cat -n /proc/net/ip_conntrack |grep tcp |awk '{print $5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$11}'> temp.log 

#从/proc/net/ip_conntrack去拿我们想要的数据

m=1 

for i in `cat temp.log|awk '{print $6}'| sed 's/bytes=//'` 

do 

if (( $i/1024 > 100 )) 

then 

size=`expr $i / 1024` 

#sed -n "${m}p" temp.log | awk '{print $1,$2,$3,$4,$5}' | sed "a\kbytes=${size}k"

sed -n "${m}p" temp.log | sed "s/bytes.*/&\tkbytes=${size}k/"

fi 

((m++)) 

done 

#这个for循环上一篇文章介绍过了。这里要处理的是bytes=XXXXX这一列的内容,取出来进行比较。m这个变量表示当前行,循环第一次就是第一行,依次类推,取出当前行的内容后再次进行处理,在bytes的结尾添加kbytes=xxxk,这样直观。(m++))表示变量自增,开始我用的是C的语法,m=m+1,结果不对。

echo 

sun= cat /proc/net/ip_conntrack|grep -c src 

#sleep 10 

#done 

;; 

-u) 

cat -n /proc/net/ip_conntrack |grep udp |awk '{print $2"\t"$5"\t"$6"\t"$7"\t"$8"\t"$10}'|more 

-a) 

cat -n /proc/net/ip_conntrack |grep tcp |awk '{print $2"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$11}'|more 

*) 

echo "Usage {-t Tcp | -u Udp }" 

echo "Changed By coolerfeng at 2008.4.20"

exit 1 

esac 

exit 0 

#最后的这个*)表示当直接运行这个shell的时候显示一个提示。告诉使用者的用法,很多程序都是这样做的。

把红色行的注释符号去掉则可以10s刷新一次,按Ctrl+c可以退出。

只把大于100k的包显示出来,呵呵,现在可以知道谁在下载东西了。小样的。kill you。哈哈

只修改了关于tcp的部分,其他部分未修改

试图实现按Q退出程序。暂时还不知道如何弄。另有一个想法就是对大于多少K的数据彩色显示。或者高亮。这样更容易看。

回家吃饭了。剩余功能来日再完成之。