| #!/usr/bin/perl |
| |
| # Persistent perl script to respond to pass-through smnp requests |
| |
| # put the following in your snmpd.conf file to call this script: |
| # |
| # Unix systems and Cygwin: |
| # pass_persist .1.3.6.1.4.1.8072.2.255 /path/to/pass_persisttest |
| # Windows systems except Cygwin: |
| # pass_persist .1.3.6.1.4.1.8072.2.255 perl /path/to/pass_persisttest |
| |
| # Forces a buffer flush after every print |
| $|=1; |
| |
| # Save my PID, to help kill this instance. |
| $PIDFILE=$ENV{'PASS_PERSIST_PIDFILE'} || "/tmp/pass_persist.pid"; |
| open(PIDFILE, ">$PIDFILE"); |
| print PIDFILE "$$\n"; |
| close(PIDFILE); |
| |
| use strict; |
| |
| my $counter = 0; |
| my $place = ".1.3.6.1.4.1.8072.2.255"; |
| |
| while (<>){ |
| if (m!^PING!){ |
| print "PONG\n"; |
| next; |
| } |
| |
| my $cmd = $_; |
| my $req = <>; |
| my $ret; |
| chomp($cmd); |
| chomp($req); |
| |
| if ( $cmd eq "getnext" ) { |
| if (($req eq "$place") || |
| ($req eq "$place.0") || |
| ($req =~ m/$place\.0\..*/) || |
| ($req eq "$place.1")) { $ret = "$place.1.0";} # netSnmpPassString.0 |
| elsif (($req =~ m/$place\.1\..*/) || |
| ($req eq "$place.2") || |
| ($req eq "$place.2.0") || |
| ($req =~ m/$place\.2\.0\..*/) || |
| ($req eq "$place.2.1") || |
| ($req eq "$place.2.1.0") || |
| ($req =~ m/$place\.2\.1\.0\..*/) || |
| ($req eq "$place.2.1.1") || |
| ($req =~ m/$place\.2\.1\.1\..*/) || |
| ($req eq "$place.2.1.2") || |
| ($req eq "$place.2.1.2.0")) { $ret = "$place.2.1.2.1";} # netSnmpPassInteger.1 |
| elsif (($req =~ m/$place\.2\.1\.2\..*/) || |
| ($req eq "$place.2.1.3") || |
| ($req eq "$place.2.1.3.0")) { $ret = "$place.2.1.3.1";} # netSnmpPassOID.1 |
| elsif (($req =~ m/$place\.2\..*/) || |
| ($req eq "$place.3")) { $ret = "$place.3.0";} # netSnmpPassTimeTicks.0 |
| elsif (($req =~ m/$place\.3\..*/) || |
| ($req eq "$place.4")) { $ret = "$place.4.0";} # netSnmpPassIpAddress.0 |
| elsif (($req =~ m/$place\.4\..*/) || |
| ($req eq "$place.5")) { $ret = "$place.5.0";} # netSnmpPassCounter.0 |
| elsif (($req =~ m/$place\.5\..*/) || |
| ($req eq "$place.6")) { $ret = "$place.6.0";} # netSnmpPassGauge.0 |
| else { |
| print "NONE\n"; |
| next; |
| } |
| } else { |
| if ($req eq $place) { |
| print "NONE\n"; |
| next; |
| } else { |
| $ret = $req; |
| } |
| } |
| |
| print "$ret\n"; |
| |
| if ($ret eq "$place.1.0") { |
| print "string\nLife, the Universe, and Everything\n"; |
| } elsif ($ret eq "$place.2.1.2.1") { |
| print "integer\n42\n"; |
| } elsif ($ret eq "$place.2.1.3.1") { |
| print "objectid\n$place.99\n"; |
| } elsif ($ret eq "$place.3.0") { |
| print "timeticks\n363136200\n"; |
| } elsif ($ret eq "$place.4.0") { |
| print "ipaddress\n127.0.0.1\n"; |
| } elsif ($ret eq "$place.5.0") { |
| $counter++; |
| print "counter\n$counter\n"; |
| } elsif ($ret eq "$place.6.0") { |
| print "gauge\n42\n"; |
| } else { |
| print "string\nack... $ret $req\n"; |
| } |
| } |