Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- alias a=alias
- a p=sleep
- a e=echo
- a i=iptables
- rp=/etc/traff
- [ -d $rp ]||mkdir -p $rp
- l=/var/lock/traff
- [ -f $l ]&&[ -d /proc/$(cat $l) ]&&exit 1
- read p _</proc/self/stat
- e $p>$l
- f=/tmp/traff_last
- touch $f ${f}_logs
- l=br-lan
- w=eth1
- s=192.168.1.1
- a=${s%.*}.0/24
- c=BWTRAFF
- while :
- do eval "$(i -nL FORWARD --line-numbers|awk -vc=$c '$2==c{if($1!=1)r++
- else f=1}END{if(r)for(i=r+f;i>0;i--)x=(x?x RS:"") "i -D FORWARD -j " c
- if(!f||r)x=(x?x RS:"") "i -I FORWARD -j " c
- print x}')"
- eval "$(i -nL $c|awk -vl=$l -vw=$w -va=$a -vc=$c -vs=$s 'FNR==NR{if(NR<3)next
- if($4~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)u[$4]=1
- else d[$5]=1
- next}FNR>1&&$6==l&&$3!="0x0"&&$1!=s{if(!d[$1]){x=(x?x RS:"") "i -I " c " -d " $1 " ! -s " a " -i " w " -o " l " -m state --state ESTABLISHED,RELATED -j RETURN";d[$1]=1}
- if(!u[$1]){x=(x?x RS:"") "i -I " c " -s " $1 " ! -d " a " -o " w " -i " l " -m state --state ESTABLISHED,NEW,RELATED -j RETURN";u[$1]=1}}END{print x}' - /proc/net/arp)"
- read t _</proc/uptime
- n=$(date +%s)
- eval "$(i -nvxL $c|awk -vt=$t -vn=$n -vf=$f -vp=100 'FNR==NR{if(NR<3)next
- if($8~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/){u[$8]+=$2
- d[$8]+=0}if($9~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)d[$9]+=$2
- next}FNR==1{m=$1
- o=$2/p
- next}{ld[$1]=$2
- lu[$1]=$3}END{if(!m)m=n
- else{"date -d@" n " +%H"|getline h
- "date -d@" m " +%H"|getline l
- if(h!=l){"date -d@" m " +%F"|getline c
- while((getline<f "_logs")>0)if(NF>1){a=$1
- for(i=2;i<NF;i+=3){z=$i
- x=$(i+1)
- y=$(i+2)
- if(x||y){k=1
- q[z]=1
- qt[z]+=a}if(x){qd[z]+=x
- qx[z]+=a
- w=x*p/a
- if(w>qm[z])qm[z]=w
- qi[z]=qi[z] (qi[z]?"\n":"") int(w*p)}if(y){qu[z]+=y
- qy[z]+=a
- w=y*p/a
- if(w>qn[z])qn[z]=w
- qj[z]=qj[z] (qj[z]?"\n":"") int(w*p)}}if(k)s+=a}if(k){g=sprintf("e \"%i %i",l,s)
- for(z in q){split(z,v,".")
- g=g sprintf(" %i %i %i %.0f %i %.0f %.0f %.0f %.0f %.0f",v[4],qt[z],qx[z],qd[z],qy[z],qu[z],m(qi[z]),m(qj[z]),qm[z]*p,qn[z]*p)}g=g "\">>$rp/" c
- print g}m=n
- printf ""|"mv " f "_logs " f "_old&&touch " f "_logs"}}if(o){v=int((t-o)*p)
- for(z in d){if(ld[z]&&lu[z]&&(ld[z]!=d[z]||lu[z]!=u[z])){x=d[z]-ld[z]
- if(x<0)x=0
- y=u[z]-lu[z]
- if(y<0)y=0
- if(x||y)v=v sprintf(" %s %.0f %.0f",z,x,y)}ld[z]=d[z]
- lu[z]=u[z]}print v>>f "_logs"}printf "%.0f %.0f",m,t*p>f
- for(z in ld){printf "\n%s %.0f %.0f",z,ld[z],lu[z]>>f}}function m(r){if(!r)return 0
- j=0
- while(("echo -n \"" r "\"|sort -n"|getline b)>0)e[++j]=b
- return(e[int(j/2)+1]+e[int((j+1)/2)])/2}' - $f)"
- p 5
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement