|
Packit |
667938 |
#!/usr/bin/perl
|
|
Packit |
667938 |
|
|
Packit |
667938 |
my ($req,$place,$returnOID,$mode, $IPTABLES,@counters);
|
|
Packit |
667938 |
|
|
Packit |
667938 |
$IPTABLES = "iptables"; # cmdline to iptables
|
|
Packit |
667938 |
$place=".1.3.6.1.4.1.2055";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
@counters = loadChains();
|
|
Packit |
667938 |
|
|
Packit |
667938 |
main();
|
|
Packit |
667938 |
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub main {
|
|
Packit |
667938 |
my ($mode,$req);
|
|
Packit |
667938 |
if (scalar(@ARGV) == 2) {
|
|
Packit |
667938 |
($mode,$req) = @ARGV;
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
($req) = @ARGV;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
SWITCH: for ($mode) {
|
|
Packit |
667938 |
/-s/ && exit;
|
|
Packit |
667938 |
/-n/ && do {
|
|
Packit |
667938 |
SWITCH: for ($req) {
|
|
Packit |
667938 |
/$place$/ && do {
|
|
Packit |
667938 |
$returnOID = "$place.1";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.1$/ && do {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.1.1";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.2$/ && do {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.1.1";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.2\.1$/ && do {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.1.1";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.2\.1\.1$/ && do {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.1.1";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.2\.1\.1\.(.*)$/ && do {
|
|
Packit |
667938 |
if ($1 < scalar(@counters)-1) {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.1." . ($1 + 1);
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.2.1";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/$place\.2\.1\.2\.(.*)$/ && do {
|
|
Packit |
667938 |
if ($1 < scalar(@counters)-1) {
|
|
Packit |
667938 |
$returnOID = "$place.2.1.2." . ($1 + 1);
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
exit;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
exit;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
SWITCH: for ($req) {
|
|
Packit |
667938 |
/$place$/ && exit;
|
|
Packit |
667938 |
/$place\.2\.1$/ && exit;
|
|
Packit |
667938 |
/$place\.2\.1\.1$/ && exit;
|
|
Packit |
667938 |
/$place\.2\.1\.2$/ && exit;
|
|
Packit |
667938 |
$returnOID = $req;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
print "$returnOID\n";
|
|
Packit |
667938 |
$_ = $returnOID;
|
|
Packit |
667938 |
SWITCH: {
|
|
Packit |
667938 |
/^$place\.1$/ && do {
|
|
Packit |
667938 |
print "string\n", getHostname() ;
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/^$place\.2\.1\.(1|2)\.(.*)$/ && do {
|
|
Packit |
667938 |
($a, $b) = split ("=", @counters[$2]);
|
|
Packit |
667938 |
if ($1 == 1) {
|
|
Packit |
667938 |
print "string\n$a\n";
|
|
Packit |
667938 |
} else {
|
|
Packit |
667938 |
print "counter\n$b\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/^$place\.2\.1\.1\.3\.1\.1\.(1|2|3)$/ && do {
|
|
Packit |
667938 |
print "integer\n$1\n";
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/^$place\.2\.1\.1\.2\.(1|2|3)$/ && do {
|
|
Packit |
667938 |
SWITCH: for ($1) {
|
|
Packit |
667938 |
/1/ && do {
|
|
Packit |
667938 |
print "string\nfilter\n";
|
|
Packit |
667938 |
last SWITCH
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/2/ && do {
|
|
Packit |
667938 |
print "string\nnat\n";
|
|
Packit |
667938 |
last SWITCH
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
/3/ && do {
|
|
Packit |
667938 |
print "string\nmangle\n";
|
|
Packit |
667938 |
last SWITCH
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
last SWITCH;
|
|
Packit |
667938 |
};
|
|
Packit |
667938 |
|
|
Packit |
667938 |
print "string\nack... $returnOID $req\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub getHostname {
|
|
Packit |
667938 |
return `/bin/hostname --fqdn`;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub getChainCount {
|
|
Packit |
667938 |
my ($table);
|
|
Packit |
667938 |
$table = shift();
|
|
Packit |
667938 |
return scalar(getChainNames($table));
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
sub getChainNames {
|
|
Packit |
667938 |
my (@bufLines,$table,@chains);
|
|
Packit |
667938 |
$table = shift();
|
|
Packit |
667938 |
@bufLines = `$IPTABLES -t $table -nL`;
|
|
Packit |
667938 |
foreach (@bufLines) {
|
|
Packit |
667938 |
if (/^Chain (.*) \((.*)$/) {
|
|
Packit |
667938 |
push (@chains, $1);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
return @chains;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub getChainCounter {
|
|
Packit |
667938 |
my (@rules, @count, $value);
|
|
Packit |
667938 |
$table = shift();
|
|
Packit |
667938 |
$chain = shift();
|
|
Packit |
667938 |
@rules=`$IPTABLES -t $table -vnxL $chain`;
|
|
Packit |
667938 |
splice @rules, 0, 2;
|
|
Packit |
667938 |
$total=0;
|
|
Packit |
667938 |
foreach $value (@rules) {
|
|
Packit |
667938 |
@count=split(' ',$value);
|
|
Packit |
667938 |
$total += $count[1];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
return $total;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub getChains {
|
|
Packit |
667938 |
my ($table, @result, @names, $counter, $name,@buf);
|
|
Packit |
667938 |
$table = shift();
|
|
Packit |
667938 |
@chains = getChainNames($table);
|
|
Packit |
667938 |
foreach $name (@chains) {
|
|
Packit |
667938 |
$counter = getChainCounter ($table, $name);
|
|
Packit |
667938 |
push (@result, "$table/$name=$counter");
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
return @result;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
sub loadChains {
|
|
Packit |
667938 |
my (@result, @buf, $table);
|
|
Packit |
667938 |
foreach $table ("filter","nat","mangle") {
|
|
Packit |
667938 |
@buf = getChains ($table);
|
|
Packit |
667938 |
push (@result, @buf);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
return @result;
|
|
Packit |
667938 |
}
|