查看当前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的数据彩色显示。或者高亮。这样更容易看。
回家吃饭了。剩余功能来日再完成之。