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

SNMP编程

开发平台:

C/C++

  1. #!/usr/bin/perl
  2. my ($req,$place,$returnOID,$mode, $IPTABLES,@counters);
  3. $IPTABLES = "iptables"; # cmdline to iptables
  4. $place=".1.3.6.1.4.1.2055";
  5. @counters = loadChains();
  6. main();
  7. sub main {
  8. my ($mode,$req);
  9. if (scalar(@ARGV) == 2) {
  10. ($mode,$req) = @ARGV;
  11. } else {
  12. ($req) = @ARGV;
  13. }
  14. SWITCH: for ($mode) {
  15. /-s/ && exit;
  16. /-n/ && do {
  17. SWITCH: for ($req) {
  18. /$place$/ && do {
  19. $returnOID = "$place.1";
  20. last SWITCH;
  21. };
  22. /$place.1$/ && do {
  23. $returnOID = "$place.2.1.1.1";
  24. last SWITCH;
  25. };
  26. /$place.2$/ && do {
  27. $returnOID = "$place.2.1.1.1";
  28. last SWITCH;
  29. };
  30. /$place.2.1$/ && do {
  31. $returnOID = "$place.2.1.1.1";
  32. last SWITCH;
  33. };
  34. /$place.2.1.1$/ && do {
  35. $returnOID = "$place.2.1.1.1";
  36. last SWITCH;
  37. };
  38. /$place.2.1.1.(.*)$/ && do {
  39. if ($1 < scalar(@counters)-1) {
  40. $returnOID = "$place.2.1.1." . ($1 + 1);
  41. } else {
  42. $returnOID = "$place.2.1.2.1";
  43. }
  44. last SWITCH;
  45. };
  46. /$place.2.1.2.(.*)$/ && do {
  47. if ($1 < scalar(@counters)-1) {
  48. $returnOID = "$place.2.1.2." . ($1 + 1);
  49. } else {
  50. exit;
  51. }
  52. last SWITCH;
  53. };
  54. exit;
  55. }
  56. last SWITCH;
  57. };
  58. SWITCH: for ($req) {
  59. /$place$/ && exit;
  60. /$place.2.1$/ && exit;
  61. /$place.2.1.1$/ && exit;
  62. /$place.2.1.2$/ && exit;
  63. $returnOID = $req;
  64. }
  65. }
  66. print "$returnOIDn";
  67. $_ = $returnOID;  
  68. SWITCH: {
  69. /^$place.1$/ && do {
  70. print "stringn", getHostname() ;
  71. last SWITCH;
  72. };
  73. /^$place.2.1.(1|2).(.*)$/ && do {
  74. ($a, $b) = split ("=", @counters[$2]);
  75. if ($1 == 1) {
  76. print "stringn$an";
  77. } else {
  78. print "countern$bn";
  79. }
  80. last SWITCH;
  81. };
  82. /^$place.2.1.1.3.1.1.(1|2|3)$/ && do {
  83. print "integern$1n";
  84. last SWITCH;
  85. };
  86. /^$place.2.1.1.2.(1|2|3)$/ && do {
  87. SWITCH: for ($1) {
  88. /1/ && do {
  89. print "stringnfiltern";
  90. last SWITCH
  91. };
  92. /2/ && do {
  93. print "stringnnatn";
  94. last SWITCH
  95. };
  96. /3/ && do {
  97. print "stringnmanglen";
  98. last SWITCH
  99. };
  100. }
  101. last SWITCH;
  102. };
  103.  print "stringnack... $returnOID $reqn";
  104. }
  105. }
  106. sub getHostname {
  107. return `/bin/hostname --fqdn`;
  108. }
  109. sub getChainCount {
  110. my ($table);
  111. $table = shift();
  112. return scalar(getChainNames($table));
  113. }
  114. sub getChainNames {
  115. my (@bufLines,$table,@chains);
  116. $table = shift();
  117. @bufLines = `$IPTABLES -t $table -nL`;
  118. foreach (@bufLines) {
  119. if (/^Chain (.*) ((.*)$/) {
  120. push (@chains, $1);
  121. }
  122. }
  123. return @chains;
  124. }
  125. sub getChainCounter {
  126. my (@rules, @count, $value);
  127. $table = shift();
  128. $chain = shift();
  129. @rules=`$IPTABLES -t $table -vnxL $chain`;
  130. splice @rules, 0, 2;
  131. $total=0;
  132. foreach $value (@rules) {
  133. @count=split(' ',$value);
  134. $total += $count[1];
  135. }
  136. return $total;
  137. }
  138. sub getChains {
  139. my ($table, @result, @names, $counter, $name,@buf);
  140. $table = shift();
  141. @chains = getChainNames($table);
  142. foreach $name (@chains) {
  143. $counter = getChainCounter ($table, $name);
  144. push (@result, "$table/$name=$counter");
  145. }
  146. return @result;
  147. }
  148. sub loadChains {
  149. my (@result, @buf, $table);
  150. foreach $table ("filter","nat","mangle") {
  151. @buf = getChains ($table);
  152. push (@result, @buf);
  153. }
  154. return @result;
  155. }