Wie kann ich analysieren eine raw SNMP-trap in Perl?

Vor ein paar Wochen schrieb ich einen SNMP-relayer für unser ops-Gruppe. Sie haben einige dumme Geräte, die nur senden von traps an eine einzige IP, und wir haben ein monitoring-system überwacht, auf mehrere IPs für die Verfügbarkeit. Der code ist tot einfach und praktisch:

while (recv($packet)) {
  foreach $target (@targets) {
    send($target, $packet);
  }
}

Es wird gearbeitet, im Grunde genommen, aber jetzt ist das offensichtlich zu kurz kommen, dass es nicht die Absender-IP ist ein Problem (anscheinend die erste Klasse des Geräts, inklusive der info, wie ein varbind und einige neue Klasse nicht).

Was ich tun möchte ist mein code so etwas wie dieses:

while ($server->recv($packet)) {
  my $obj = decompile($packet)
  if (!$obj->{varbind}{snmpTrapAddress}) {
    $obj->{varbind}{snmpTrapAddress} = inet_ntoa($server->peeraddr());
  }
  $packet = compile($obj);
  foreach $target (@targets) {
    send($target, $packet);
  }
}

In anderen Worten, wenn mein sender ist nicht darunter snmpTrapAddress, fügen Sie es hinzu. Das problem ist, dass jeder SNMP-Paket habe ich mir angeschaut, für Perl scheint sehr stark konzentriert auf die Infrastruktur der Empfang von traps und darstellende bekommt.

Also: gibt es eine einfache Perl-Modul, dass wird mir erlauben, zu sagen "hier ist ein Daten-blob repräsentiert eine snmp-trap. Sie entschlüsseln in etwas ich kann leicht manipulieren, dann kompilieren Sie es wieder in einen blob, die ich werfen kann, die über das Netzwerk"?

Wenn die Antwort, die Sie geben, ist "verwenden von SNMP-dummy", bieten Sie Beispiele dafür? Ich kann nur blind sein, sondern von der Ausgabe von perldoc SNMP es ist mir nicht klar, wie es zu benutzen auf diese Weise.

EDIT:

Stellt sich heraus, nachdem Sie sich ein wenig um, dass "SNMP-encoding" ist wirklich ASN.1 BER (Basic Encoding Rules). Auf dieser Basis bin ich mit einem gehen mit Convert::BER. Ich würde es dennoch begrüßen alle leicht brechen/Bearbeiten/neu erstellen-Tipps für SNMP.

  • Ich weiß nicht, etwas über SNMP aber Net-SNMP hat eine Net::SNMP::Message Klasse.
InformationsquelleAutor jj33 | 2009-07-14
Schreibe einen Kommentar