SNMP-Trap empfangen

Hallo zusammen,

ich bastel in IPS daran den einzelnen Geräten hier im Haushalt (Drucker, Rechner, Router/Switch, NAS, usw.) per SNMP ihre Statusdaten zu entlocken. Das klappt meistens auch schon ganz gut.

Da ich mein Handy (Android) auch zur Anwesenheitserkennung einsetze ist es immer recht „unpraktisch“ wenn der Akku mal schlapp macht und IPS dann denkt ich wäre nicht mehr zu Hause. Daher würde ich gern per SNMP den Akkustand meines Handys abrufen, um mich dann per Stimme warnen lassen zu können. Auch wäre denkbar, dass wenn der Akku dennoch leer läuft zunächst keine Abwesenheit angenommen wird. IPS weiß dann ja, dass der Akku gerade in die Knie gegangen ist. Soweit zum Hintergrund.

Leider habe ich keinen „normalen“ SNMP Agent für Android gefunden, lediglich einen Agenten der SNMP-Traps verschickt in denen auch der Akkustand enthalten ist. Jetzt ist mein Problem, dass IPS keine SNMP-Traps empfangen kann (oder ich hab davon noch nix mitbekommen:rolleyes:).
Hat jemand evtl. eine Idee wie ich meine SNMP-Traps in IPS bekomme?

Ich könnte mir vorstellen, dass diese Funktion auch für andere interessant sein könnte. Gerade wenn im NAS daheim mal eine Festplatte defekt wird oder im Drucker der Toner zur neige geht… . Natürlich kann IPS diese Informationen durch regelmäßiges abfragen holen, aber wenn es Traps empfangen könnte wäre das natürlich optimal.

Was die Soap-Schnittstelle angeht…da hab ich leider 0 Ahnung von. Die würde sich sicherlich gut eignen um über ein externes Programm die Traps in IPS einzuspielen. Ich würde nun mangels besserer Idee und Programmierskill evtl. einen Trap-Receiver suchen, der die Daten filtert (z.B. nur Akkuladestand) und in ein Logfile schreibt. Dieses würde ich dann aus IPS in regelmäßigen Abständen einlesen lassen.
Alles andere als elegant, daher frage ich ob da jemand einen Tipp für mich hat.

Danke schonmal :wink:

Hi!
Ich kenne leider kein Programm mit dem man SNMP Traps empfangen und irgendwie an IPS übergeben könnte. Auch Nagios kann keine SNMP Traps empfangen.
Wenn du Programieren kannst wäre evtl. das hier für dich hilfreich:
Visual Basic .NET SNMP Receive Trap Source Code

Sollte auch mit der kostenlosen Express Edition funktionieren.
Wie heißt denn das Android Programm? Dann kann ichs mir mal anschauen wenn ich Zeit habe.

Viele Grüße
Chris

Hi spaceguy.

Also das Programm heißt SNMP Trap Agent und gibts als 30Tage Testversion. Auf die Vollversion spare ich schon fleißig (86cent);).

Danke für den Link, das werd ich mir mal näher anschauen. Ja etwas programmieren kann ich, aber in die Geschichte müsste ich mich dann schon etwas genauer einlesen.

Grundsätzlich werd ich aber schon etwas mehr Zeit investieren IPS das Empfangen von Traps noch bei zu bringen. Das kann ich einfach für vieles gut gebrauchen und möchte nicht ständig die Geräte per SNMP-Get auslesen müssen…das belastet meinen IPS-Server schon etwas.

Schönen Gruß
Mark

Schau mal hier: SNMP Traps in Windows Server - Microsoft Enterprise Networking Team - Site Home - TechNet Blogs

Vielleicht geht das doch ohne programmieren.
Bei mir kommen die Traps auch brav an… könnte man jetzt in eine Datei umleiten und per IPS auswerten.
Stellt sich nur die Frage ob man das utility irgendwie als Service starten kann. Einen geöffneten Command Prompt auf dem IPS Server ist ja nicht wirklich schön.


Incoming Trap:
  generic    = 6
  specific   = 5
  enterprise = .iso.org.dod.internet.private.enterprises.3244
  agent      = 192.168.3.48
  source IP  = 192.168.3.70
  community  = public
  variable   = .iso.org.dod.internet.private.enterprises.3244.1
  value      = String 354059020659973
  variable   = .iso.org.dod.internet.private.enterprises.3244.2
  value      = String 192.168.3.70
  variable   = .iso.org.dod.internet.private.enterprises.3244.3
  value      = String 84
  variable   = .iso.org.dod.internet.private.enterprises.3244.4
  value      = String 65
  variable   = .iso.org.dod.internet.private.enterprises.3244.5
  value      = String 97
  variable   = .iso.org.dod.internet.private.enterprises.3244.6
  value      = String 7
  variable   = .iso.org.dod.internet.private.enterprises.3244.7
  value      = String  voicesearch taskmanager latin phone system eurotrapfree c
alendar email gapps settings android maps acore maps:NetworkLocationService
  variable   = .iso.org.dod.internet.private.enterprises.3244.8
  value      = String  TaskManagerService NetworkLocationService BackupTransport
Service ImageWallpaper NetworkLocationService BluetoothHeadsetService SyncManage
r EuroptrapSvc GTalkService LatinIME IncomingCallService
  variable   = .iso.org.dod.internet.private.enterprises.3244.9
  value      = String  EurotrapFree Launcher SearchAssetListActivity DialtactsAc
tivity Opera MessageView ConversationList HomeActivity InCallScreen
  variable   = .iso.org.dod.internet.private.enterprises.3244.10
  value      = String  Hafas Camera ResolverActivity Gallery Calculator CarDockA
ctivity RecognitionActivity Main Desktop BrowserActivity SigningInActivity Welco
me Opera ConversationList ForexBoardActivity DeskClock MainActivity TaskManagerA
ctivity Splashscreen RegisterStartScreenActivity Settings EurotrapFree LoginActi
vity SearchActivity AssetBrowserActivity MusicBrowserActivity ConversationListAc
tivityGmail Splash ResolverActivity HomeActivity RootActivity FileManagerActivit
y FRITZApp LaunchActivity Klicktel AliasActivity
  variable   = .iso.org.dod.internet.private.enterprises.3244.11
  value      = String 0.0 0.0
  variable   = .iso.org.dod.internet.private.enterprises.3244.12
  value      = String hehe wasssup

Wo steht der Akkustand?

Jetzt nur noch hoffen das wir daraus einen Service machen können: http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/98a97aee-c62b-4683-94ab-3777899cf7de/

Könnte mir vorstellen das man mit „snmputil.exe trap >c: emp\myPhone.txt“ das ganze in eine Datei umleiten könnte und dann per IPS auswertet.
Viele Grüße
Chris

Hallo,

kannst vileicht das Tool dazu gebrauchen.
guckstu hier
SNMPView Free SNMP Software

Hi,

also der Akkustand ist die 1.3.6.1.4.1.3244.3. In deinem Fall also 84%.
Aus IPS heraus gestartet kann man das Fenster auf unsichtbar schalten, wäre also nicht das Problem.
Nun müsste man die Datei regelmäßig einlesen und am besten auch gleich alle 24h löschen um sich den Server nicht zuzumüllen. Wäre eigentlich eine ganz brauchbare Lösung bis IPS nativ SNMP-Traps unterstützt :D.

Na dann werd ich das mal so umsetzen. Danke für die Hilfe :slight_smile:

nur 100% sauber ist das nicht.
Was wenn dein Akkustand 1% ist und danach kein Trap mehr empfangen wurde.
Ist dann das Telefon aus weil der Akku leer ist und du bist zuhause, oder bist du mit leerem Akku aus dem Haus, weil du im Auto ein Ladegerät hast?

Irgendwie gefällt mir das noch nicht 100%

Viele Grüße
Chris

Ja das stimmt, sauber ist diese Lösung (für meinen Anwendungsfall) wirklich nicht. Ich liebäugel da auch schon eine Weile mit dem AKM-868-System um die Anwesenheit sicher erkennen zu können.

Ich behelfe mir da bisher indem ich weitere Variablen zu Rate ziehe. Beispielsweise die Bewegungsmelder in den Räumen. Darüber hinaus hab ich auf dem Handy noch ein Programm laufen, das an IPS meldet wenn ich den Bereich um meinen Arbeitsplatz betreten habe. Sobald das passiert bin ich logischerweise auch nicht mehr zu Hause. Mir gehts darum, dass im Zweifelsfall IPS lieber ein wenig zu lang annimmt ich wäre noch da, als mir die Heizung abzudrehen und die Verbraucher abzuschalten, nur weil mein Handy-Akku alle ist. Wenn ich aufgrund eines leeren Akkus plötzlich „Abwesend“ bin, dann wird IPS das erstmal nicht als Abwesenheit werten, bis es eine sichere Informationsquelle gibt.

Aber da gibts bei mir noch andere Baustellen in IPS. Auf dieser Spielwiese gibts immer was neues zu entdecken.

Nochmal zu dem Thema SNMP-Traps empfangen:

Ich hab jetzt mal einen UDP-Socket in IPS angelegt der auf Port 162 lauscht. Das ganze an eine Registervariable weitergeschoben und mit ein paar Zeilen Script ausgewertet.

<?php

if ($IPS_SENDER == "RegisterVariable")
{
  $data = $IPS_VALUE;
  $name = substr($data, -8,8); //da steht beim SNMP Trap Agent der eigene String
  if($name == "HTC Mark"){
    $akku = substr($data, -72,4);
    $akku = preg_replace("/[^0-9]/","",$akku); //alles weg was keine Zahl ist
    $akku = $akku/10; //Akkuwert hat noch eine 0 zu viel
    SetValueInteger(23235 /*[Akku HTC Desire]*/,$akku);
  }
}
?>

Da brauch ich kein externes Programm oder ähnliches und hab meinen Akkustand. Da der SNMP-String immer gleich aufgebaut ist, kann man direkt die Stellen rausschneiden. Ansonsten müsste man den String nach Schlüsselwörtern durchsuchen.:loveips:

Saubere Lösung… da hätte man auch gleich drauf kommen können. :slight_smile:

Hi Paule,

wie machst Du das praktisch: Lässt Du WLAN am Android immer an und Die verbindung zu IPS kommt zustande, wenn es sich ins heimische WLAN eingeloggt hat oder greifst Du über GMS und das WAN auf IPS zu ?

Wie machst Du die Anwesenheitserkennung mit Android ?

Gruß
Rolf

Hi Rolf,

Ja du hast es eigentlich schon gesagt, das Handy bucht sich im Wlan ein und ist dann pingbar. Unbeantwortete Pings erhöhen einen Fehlercounter und nach 10 verlorenen Pings, gilt das dann als Abwesenheit. Im Grunde war die Anwesenheitserkennung nur ein Nebenprodukt meines Monitoring Scripts, welches alle Netzwerkgeräte auf diese Weise überwacht.

Einen ganz anderen Ansatz bietet die App „AutomateIt“ (Freeware). Damit erfasse ich schon seit Wochen sehr zuverlässig meine Arbeitszeiten (hab keine Lust diese zu Notieren, bin faul:D). Wenn ich den Bereich meiner Arbeit betrete ruft mein Handy automatisch eine nicht verwendete Nummer bei mir zu Hause an. Über die Fritzbox kann ich diesen Anruf registrieren und in IPS auswerten. IPS erstellt mir dann eine Liste mit meinen Arbeitszeiten und mailt mir die immer Freitags zu. Nebenbei hab ich dadurch eine Live-Anwesenheitserkennung für meinen Arbeitsplatz in IPS (meine Freundin kann sehen ob ich noch auf Arbeit hocke oder schon auf dem Heimweg bin:rolleyes:). Das gleiche Prinzip wäre für die Anwesenheitserkennung daheim genauso umsetzbar. Wenn der Akku leer ist, bleibt der Anruf aus und es wird nicht fälschlicherweise eine Abwesenheit erkannt. Lade ich dann z.B. im Auto auf dem Weg zur Arbeit das Handy wieder auf, weiß IPS spätestens wenn ich auf Arbeit angekommen bin wieder bescheid ;-). Nebenbei…diese Art des Trackings braucht nichtmal eine Datenflat auf dem Handy & die Anrufe kosten nix.

So nun der Nachteil (musste ja kommen :p):
Man benötigt Telefonnummern, die unbenutzt sind. Für jeden Anwendungsfall idealerweise 2 Stück. Eine Nummer wenn man Bereich x betritt und eine wenn man diesen Bereich wieder verlässt. Bei meinem Anbieter hab ich 10 Nummern bekommen, da fällt schon die ein oder andere für solche Experimente ab.

Grüße
Mark

Servus, ich frage über SNMP den Status meines Switches ab. Vielleicht hilft dir das weiter: http://www.ip-symcon.de/forum/f52/switch-ueber-snmp-auslesen-saubere-verarbeitung-12427/

Hallo Mark

Mal ne Frage… ist ne super Idee und funzt bei mir auch… kann in der APC ein Test Trap senden und kommt in IPS an über entsprechenden UPD Port, Reg Variable… aber in den Daten die ich da erhalte kann ich max die Community entziffern… alles andere ist sehr kryptisch… hast du da keine anderen Cutter oder sonst was drinn? Hab mal Echo etc. probiert, aber ausser der snmp community seh ich nur quadrätchen und so…

Würde mich auch interessieren.

Ja diese krytischen Zeichen hab ich leider auch so. Allerdings sind alle Werte die übergeben werden im Klartext und zum Glück auch immer an identischer Position. Ich prüfe also mit einem beliebigen Trap-Empfänger was für Informationen da kommen und schneide die an entsprechender Position raus.
So kann ich auch die Trap´s vom Nas empfangen und auswerten.

Wiki sagt ja zur Kodierung folgendes:

Die Beschreibung der SNMP-Pakete erfolgt durch ASN.1, die Kodierung für den Transport übers Netzwerk mittels Basic Encoding Rules (BER).

Inwieweit man da in PHP in der Lage ist irgendwie aus dem Zeichensalat noch was vernünftiges zu machen…keine Ahnung:(.

Jop stimmt beim testtrap konnte man nix entziffern, tollerweise gabs gestern grad Stromausfall und das testscript war an und da konnte man was entziffern…trotzdem für ne Auswertung wäre die oid natürlich toller als der String auch wenn dessen Inhalt wohl immer gleich bleibt.aber how too…:slight_smile:

Ich kenne leider kein Programm mit dem man SNMP Traps empfangen und irgendwie an IPS übergeben könnte. Auch Nagios kann keine SNMP Traps empfangen.

das ist schlichtweg falsch

[=snmptt"]Domain: nagios-wiki.de](Domain: nagios-wiki.de[)

grüße fireskyer

Wollte das gerade ausprobieren, aber da kommt nichts an…
Kannst Du einen screenshot von Deiner Socket Konfig mal anhängen? Oder was hast Du unter sende-host angegeben (den brauche ich ja nicht)?

gruss Andi