Presence über SNMP an Cisco WLC2504 abfragen

Begonnen von Aki1988, 30 Mai 2016, 09:05:47

Vorheriges Thema - Nächstes Thema

Aki1988

Hallo,

Mit folgendem Modul kann ich per SNMP den Anwesenheitsstatus an einem Cisco WLC abrufen.

per SNMP auf ".1.3.6.1.4.1.9.9.599.1.3.1.1.2.X.X.X.X.X.X" abfragen. Die X.X.X.X.X.X ist die WLAN Mac Adresse als Dezimalzahl des abzufragenden Gerätes. Diese Zahlen werden der Funktion übergeben.
Hier gibt es folgende Stati:
4 = associated
6 = Probing
8 = Disconnected

Mein Code fragt einfach ab ob zu einem bestimmten eintrag der Status "4" zurück kommt - also ein WLAN Gerät da ist.

Beispiel: Mein iPhone hat folgende WIFI Mac Adresse: AA:BB:CC:DD:EE:FF Daraus wird (Hex to Dec):
AA: 170
BB: 187
CC: 204
DD: 221
EE: 238
FF: 255
define iPhone PRESENCE function {snmpCheck("170.187.204.221.238.255")} 30 120

Benötigt wird das Perl Modul Net::SNMP
Hier ist mein Code der in die 99_MyUtils rein kommt:

#Presence with SNMP@Cisco WLC
###############################################################################
#
#  Abfrage des Anwesenheitstatus auf dem Cisco WLC2504 per SNMP
#  benötigt perl Modul Net::SNMP
#
#  Aufruf: snmpCheck(WIFI MAC als Dezimalzahl)
#
###############################################################################
use Net::SNMP;
sub
snmpCheck($)
{
  my ($client)= @_;

  my $community = "public";
  my $hostname = "192.168.0.10";
  my $oidgeneral = ".1.3.6.1.4.1.9.9.599.1.3.1.1.2.";
  my $oid = $oidgeneral . $client;
  my $status;

  my ($session, $error) = Net::SNMP->session(
      -hostname  => $hostname,
      -community => $community,
      -version => 2,
  );

  if (!defined $session) {
    printf "ERROR: %s.\n", $error;
    exit 1;
  }

  my $result = $session->get_request(-varbindlist => [ $oid ],);

  if (!defined $result) {
    printf "ERROR: %s.\n", $session->error();
    $session->close();
    exit 1;
  }
 
  if ($result->{$oid} eq "4") {
    $status= 1;
  }
  else {
    $status=0;
  }
  return $status;
  $session->close();
}


sicherlich kann man diesen Code noch verbessern da ich mich mit Perl nicht besonders gut auskenne.