Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192134
  • 博文数量: 40
  • 博客积分: 2265
  • 博客等级: 大尉
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-23 17:01
文章分类

全部博文(40)

文章存档

2014年(1)

2013年(2)

2012年(6)

2011年(5)

2010年(26)

我的朋友

分类:

2010-09-28 18:18:15

tcpdump  -v port $myport  获取经过具体某个端口的数据包;
数据包的信息为:
16:25:12.052300 IP (tos 0x0, ttl 114, id 20678, offset 0, flags [DF], proto: TCP (6), length: 40) x.x.x.125.63444 > 192.168.238.96.webcache: ., cksum 0x37b4 (correct), ack 2578740717 win 65535


length: 40)为这个数据包的大少;通过统计这些数据包的大少就得出流量。(不知道我这种想法对不对)





不过在尝试阶段,继续了解。


具体代码:

#!/bin/bash
PATH="/var/PROGRAM/MANAGEMENT/modules/xbash:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:"
LANG=zh_CN
export PATH LANG

usage="-t : which module (perl or bash shell) to be used;"
usage2="-p : which port to be watched;"

if [[ $# -eq 0 ]]
   then
      echo $usage
      echo $usage2
      exit
fi

NUM=100

TYPE=p
PORT=80

while getopts "t:p:" options;do
        case $options in
                t) TYPE="$OPTARG" ;;
                p) PORT="$OPTARG";;
                *) echo  usage
                   echo  usage2;;
        esac
done


if echo $TYPE | grep -q "p"
  then
    for myport in `echo $PORT | sed "s/:/ /g" | xargs`
      do
        tcpdump -c $NUM -v port $myport | perl -ne '$rev=substr($_,index($_, "length: ")); print $rev' | perl -ne '$rev=$rev=substr($_,length("length: "),index($_,")")-index($_,": ")-2); print $rev,"\n"'  | awk 'BEGIN{sum=0}{sum+=$1;}END{print "Total_Network:" sum" bytes"}'
      done
else if echo $TYPE | grep -q "s"
     then
       for myport in `echo $PORT | sed "s/:/ /g" | xargs`
         do
          tcpdump  -c $NUM -v port $myport | grep length:*  | awk '{print $(17)}' | sed "s#)##" | awk 'BEGIN{sum=0}{sum+=$1};END{print "Total_Network:" sum" bytes"}'
         done
     fi

fi
阅读(1000) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-29 14:32:58

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com