Advertisement
Guest User

traffic

a guest
Feb 27th, 2015
346
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.37 KB | None | 0 0
  1. #!/bin/sh
  2. alias a=alias
  3. a p=sleep
  4. a e=echo
  5. a i=iptables
  6. rp=/etc/traff
  7. [ -d $rp ]||mkdir -p $rp
  8. l=/var/lock/traff
  9. [ -f $l ]&&[ -d /proc/$(cat $l) ]&&exit 1
  10. read p _</proc/self/stat
  11. e $p>$l
  12. f=/tmp/traff_last
  13. touch $f ${f}_logs
  14. l=br-lan
  15. w=eth1
  16. s=192.168.1.1
  17. a=${s%.*}.0/24
  18. c=BWTRAFF
  19. while :
  20. do eval "$(i -nL FORWARD --line-numbers|awk -vc=$c '$2==c{if($1!=1)r++
  21. else f=1}END{if(r)for(i=r+f;i>0;i--)x=(x?x RS:"") "i -D FORWARD -j " c
  22. if(!f||r)x=(x?x RS:"") "i -I FORWARD -j " c
  23. print x}')"
  24. eval "$(i -nL $c|awk -vl=$l -vw=$w -va=$a -vc=$c -vs=$s 'FNR==NR{if(NR<3)next
  25. if($4~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)u[$4]=1
  26. else d[$5]=1
  27. 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}
  28. 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)"
  29. read t _</proc/uptime
  30. n=$(date +%s)
  31. eval "$(i -nvxL $c|awk -vt=$t -vn=$n -vf=$f -vp=100 'FNR==NR{if(NR<3)next
  32. if($8~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/){u[$8]+=$2
  33. d[$8]+=0}if($9~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)d[$9]+=$2
  34. next}FNR==1{m=$1
  35. o=$2/p
  36. next}{ld[$1]=$2
  37. lu[$1]=$3}END{if(!m)m=n
  38. else{"date -d@" n " +%H"|getline h
  39. "date -d@" m " +%H"|getline l
  40. if(h!=l){"date -d@" m " +%F"|getline c
  41. while((getline<f "_logs")>0)if(NF>1){a=$1
  42. for(i=2;i<NF;i+=3){z=$i
  43. x=$(i+1)
  44. y=$(i+2)
  45. if(x||y){k=1
  46. q[z]=1
  47. qt[z]+=a}if(x){qd[z]+=x
  48. qx[z]+=a
  49. w=x*p/a
  50. if(w>qm[z])qm[z]=w
  51. qi[z]=qi[z] (qi[z]?"\n":"") int(w*p)}if(y){qu[z]+=y
  52. qy[z]+=a
  53. w=y*p/a
  54. if(w>qn[z])qn[z]=w
  55. qj[z]=qj[z] (qj[z]?"\n":"") int(w*p)}}if(k)s+=a}if(k){g=sprintf("e \"%i %i",l,s)
  56. for(z in q){split(z,v,".")
  57. 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
  58. print g}m=n
  59. printf ""|"mv " f "_logs " f "_old&&touch " f "_logs"}}if(o){v=int((t-o)*p)
  60. for(z in d){if(ld[z]&&lu[z]&&(ld[z]!=d[z]||lu[z]!=u[z])){x=d[z]-ld[z]
  61. if(x<0)x=0
  62. y=u[z]-lu[z]
  63. if(y<0)y=0
  64. if(x||y)v=v sprintf(" %s %.0f %.0f",z,x,y)}ld[z]=d[z]
  65. lu[z]=u[z]}print v>>f "_logs"}printf "%.0f %.0f",m,t*p>f
  66. for(z in ld){printf "\n%s %.0f %.0f",z,ld[z],lu[z]>>f}}function m(r){if(!r)return 0
  67. j=0
  68. while(("echo -n \"" r "\"|sort -n"|getline b)>0)e[++j]=b
  69. return(e[int(j/2)+1]+e[int((j+1)/2)])/2}' - $f)"
  70. p 5
  71. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement