Autor Thema: Presence über SNMP an Cisco WLC2504 abfragen  (Gelesen 340 mal)

Offline Aki1988

  • New Member
  • *
  • Beiträge: 16
Presence über SNMP an Cisco WLC2504 abfragen
« am: 30 Mai 2016, 09:05:47 »
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.

 

decade-submarginal