ipchainacc
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:3k
源码类别:

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. # ipchainacc version 1.0.2
  3. # Author: John Lange, john@darkcore.net
  4.   Ilya Konstantinov, mrtg-ipchains@future.galanet.net
  5. # Date: Sep 06, 2000
  6. #
  7. # This script was written to provide output for MRTG
  8. #  (multi router traffic grapher) via ipchains.
  9. #
  10. # http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/mrtg.html
  11. #
  12. ## USAGE EXAMPLE (line from mrtg.conf)
  13. #
  14. # Target[traffic]: /usr/local/mrtg-2/bin/ipchainacc 0 0
  15. #
  16. # The arguments 0 0 mean it should report the bytes count
  17. # for the 1st (1st is 0, 2st is 1 and so on) rule in
  18. # the 'acctin' chain (supposed to be the incoming traffic)
  19. # and the 1st rule in the 'acctout' chain.
  20. #
  21. ## Changelog
  22. # v1.0.2 Made it actually account bytes instead of packages.
  23. #  Now ipchainacc requires 2 command-line arguments.
  24. #  This allows having more than one rule in the accounting
  25. #   chains, so you could have traffic cuts by protocol
  26. #  or IP blocks which match your rules.
  27. # v1.0.1 added -x to ipchains to expand byte counters
  28. # v1.0.0 Inital Release
  29. #
  30. #
  31. #   This command must return 4 lines of output:
  32. #     Line 1 : current state of the 'incoming bytes counter'
  33. #     Line 2 : current state of the 'outgoing bytes counter'
  34. #     Line 3 : string, telling the uptime of the target.
  35. #     Line 4 : string, telling the name of the target.  
  36. # This script relies on you having setup your ipchains rules beforehand
  37. ## edit for your system
  38. $ipchains='/sbin/ipchains';   # path to ipchains
  39. $host=`/bin/hostname --fqdn`;  # local hostname (for information only)
  40. # if you use the ipchains rules above, you don't have to change these
  41. $inrule='acctin';  # name of input accounting rule
  42. $outrule='acctout'; # name of output accounting rule
  43. ## -- don't edit below here ----
  44. # get command line params
  45. my ($in_rule,$out_rule) = @ARGV;
  46. # fetch the status from ipchains
  47. @rules=`$ipchains -L $inrule -v -n -x`;
  48. splice @rules, 0, 2;
  49. @in_bytes=split(' ',$rules[$in_rule]);
  50. @rules=`$ipchains -L $outrule -v -n -x`;
  51. splice @rules, 0, 2;
  52. @out_bytes = split(' ',$rules[$out_rule]);
  53. print "$out_line";    # just for debugging
  54. #$c=1;
  55. #foreach $value (@in_bytes) {
  56. #  printf "$c: $valuen";
  57. #  $c++;
  58. #};
  59. # uptime of the machine
  60. my $upTimeLine = `uptime`;
  61. my $upTime;
  62. if ($upTimeLine =~ /s+?.*?s+?up (d+ days,s+.*?),/)
  63. {
  64.         $upTime = $1;
  65. }
  66. # 4 lines of output only.
  67. if (!$in_bytes[1]) { $in_bytes[1] = 0; }
  68. if (!$out_bytes[1]) { $out_bytes[1] = 0; }
  69. print "$in_bytes[1]n",
  70. "$out_bytes[1]n",
  71. "$upTimen$host";
  72. #print ($in_bytes[1] ne ''?$in_bytes[1]:'0'),"n",
  73. #      ($out_bytes[1] ne ''?$out_bytes[1]:'0'),"n",
  74. # "$upTimen$host";