MIB-Übernahme in andere Systeme

SNMP, Telnet, Syslog, Statustools, RTools, ...

Moderatoren: TommyTC, alf, Petrus, andreastc, DSL-Hexe, nobody

MIB-Übernahme in andere Systeme

Beitragvon Ruth » Do 22.09.2005 - 13:39

Hallo Forum,
eine allg. Frage: wenn ich mit SNMP auf best. MIBs auf einem best. Server zugreifen möchte, muss ich dann nur die jeweilige MIB in form einer RFC in das System hineinkopiern? Und wenn ja spielt der Speicherort keine Rolle? Oder wie wird das normalerweise gehändelt. Beispiel: RFC1628 beinhaltet Infos über die USV. Ich hab jetzt einen REchner, auf dem USV installiert ist und möchte mir hierzu die Version und den SysName, SysDesc anzeigen lassen. Kann ich dann die RFC als RFC1628.MIB.iso.org.dod.internet.mgmt.mib-2.txt oder als RFC1628.MIB dort abspeichern?
Ruth
User
 
Beiträge: 14
Registriert: Fr 09.09.2005 - 12:40

Beitragvon kdd » Do 22.09.2005 - 16:52

Moin,
wenn ich mit SNMP auf best. MIBs auf einem best. Server zugreifen möchte, muss ich dann nur die jeweilige MIB in form einer RFC in das System hineinkopiern?
Nein,
so einfach geht das nicht. Nur die Standard MIB's werden in den RFC's beschrieben, und Anweisungen heissen dann auch entsprechend. Diese MIB's sollte jede NMS (Network Management Station) kennen. Darüber hinaus gibt es Enterprise MIB's, die von den Herstellern der Geräte genutzt und vertrieben werden. D.h. die kosten i.d.R. Geld.

In deinem Fall möchtest Du aber ja gar keine Enterprise MIB's, sondern nur Standard Variable
Version und den SysName, SysDesc anzeigen lassen
. Die sollten, -sofern das Gerät (USV?) SNMP unterstützt-, sowieso abzufragen sein. Dafür ist schliesslich der Standard da. Der RFC 1628 erweitert den Standard lediglich um Variable für USV Geräte. Bei den USV Geräten sollte dann dabei stehen, ob sie
-- a) SNMP unterstützen, und wenn ja
-- b) RFC 1628 Variablen nutzen und die MIB dabei ist.

Ist a) nicht gegeben, geht SNMP eh nicht mit der USV. Ist b) nicht gegeben können zwar Standard MIB's verwendet, aber die Standard USV Variablen nicht abgefragt werden. Ist b) gegeben, so hat der Lieferant sicherlich auch die entsprechende Datei zum Einbinden in das NMS geliefert bzw. rückt es auf Anfrage heraus.
Ggf. findest du aber auch hier eine RFC 1628 konforme MIB.
TelAs: T-ISDN Call & Surf
DSLAs: TDSL Call & Surfl; dn/up = 11300/1000
HW: FBF 7390 mit LCR; FW FRITZ!OS 05.21
als DSL Router mit sipgate VoIP Account

mfG
kdd
Benutzeravatar
kdd
Foren-Ass
 
Beiträge: 716
Registriert: Di 13.11.2001 - 21:21
Wohnort: Hamburg

Beitragvon mikko » Do 22.09.2005 - 20:24

@ruth
mir ist nicht ganz so klar, was du machen willst. die 3 mib's, die du hinzufügen willst, stehen nicht im rfc1628 (=>usv's). ich würde das über die standardisierten rfc's machen. als beispiel: wenn du SysName und SysDescr implementieren willst, könnte man das über das rfc1213 machen, da dies dort standardisiert ist. diese sollten dann auch dort eingehangen werden (z.B. sysDescr => .1.3.6.1.2.1.1.1 => RFC1213-MIB.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysDescr(1)).
mikko
Ambitionierter User
 
Beiträge: 69
Registriert: Di 05.10.2004 - 19:38

Danke und neue Frage zu joesnmp

Beitragvon Ruth » Mo 26.09.2005 - 10:52

vielen dank für die Tips!
Miko an Dich noch ne Frage: Du hast mir joesnmp empfohlen. Ich möchte ja nur den Manager implementieren. Außerdem möchte ich keine Traps produzieren. Gibt es dort auch schon den Listener, der auf Port 161 horcht, bereits vorgefertigt? Muss ich an den anderen Klassen noch sehr viele Änderungen vornehmen -> ich weiss das ist eine sehr allgemeine Frage :? ? Über die Klasse SnmpTimer und SnmpTimeTicks werden die Probleme mit erneuten Anfragen und sonstigen Timer-Problemen gelöst. Falls Du mir sonst noch irgendwelche Tips hierzu geben könntest wär ich Dir sehr dankbar. Wahrscheinlich ist es ja auch möglich nur ganz best. Werte der OIDs einer MIB abzufragen, evtl. in der SnmpHandler oder SnmpSession - Klasse

Danke schon mal!
Gruss Ruth
Ruth
User
 
Beiträge: 14
Registriert: Fr 09.09.2005 - 12:40

Beitragvon mikko » Mo 26.09.2005 - 19:31

du mußt den snmp-handler implementieren. der horcht dann auf antwort (z.b. port 161). hier mal ein wenig beispiel-code, wobei eine einfache oid abgefragt wird:

Code: Alles auswählen
import java.net.InetAddress;

import org.opennms.protocols.snmp.SnmpHandler;
import org.opennms.protocols.snmp.SnmpParameters;
import org.opennms.protocols.snmp.SnmpPduPacket;
import org.opennms.protocols.snmp.SnmpPduRequest;
import org.opennms.protocols.snmp.SnmpPeer;
import org.opennms.protocols.snmp.SnmpSMI;
import org.opennms.protocols.snmp.SnmpSession;
import org.opennms.protocols.snmp.SnmpSyntax;
import org.opennms.protocols.snmp.SnmpVarBind;

public class SimpleClient
{
    public static void main(String st[]) throws Exception
    {
        if (st.length != 2)
        {
            System.out.println("Usage: java SimpleClient host oid");
            System.exit(0);
        }
       
        InetAddress remote = InetAddress.getByName(st[0]); 
        SnmpPeer peer = new SnmpPeer(remote); 
        peer.setPort(161); 
        peer.setTimeout(5000); 
        peer.setRetries(1);
       
        SnmpParameters parms = peer.getParameters(); 
        parms.setVersion(SnmpSMI.SNMPV2); 
        parms.setReadCommunity("public"); 
       
        final SnmpSession session = new SnmpSession(peer); 
        session.setDefaultHandler(new SnmpHandler()
                { 
            public void snmpTimeoutError(SnmpSession session, SnmpSyntax pdu)
            {
                System.out.println("SnmpTimeout");
                synchronized (session) { session.notify(); }
            }
           
            public void snmpInternalError(SnmpSession session, int err, SnmpSyntax pdu)
            {
                System.out.println("InternalError");
                synchronized (session) { session.notify(); }
            }
           
            public void snmpReceivedPdu(SnmpSession session, int command, SnmpPduPacket pdu)
            {
                SnmpVarBind varBind = pdu.getVarBindAt(0);
                System.out.println("Received value: " + varBind.getName() + "=" + varBind.getValue());
                synchronized (session) { session.notify(); }
            } 
                });
       
        SnmpVarBind[] vblist = {new SnmpVarBind(st[1])};
        SnmpPduRequest pdu = new SnmpPduRequest(st[1].endsWith(".0") ? SnmpPduPacket.GET : SnmpPduPacket.GETNEXT, vblist);
        pdu.setRequestId(1);
       
        try
        {
            synchronized (session)
            {
                session.send(pdu);
                session.wait();
            }
        }
        catch (InterruptedException e)
        {
//          do nothing
        }
        finally
        {
            session.close();
        }
    }
}


wenn du mehrere oid's abfragen willst, packst du das ganze in die varbindlist. somit kannst du für mehrere oid's ein bulk senden und brauchst somit nicht mehrere pakete senden. die antwort bekommst du wieder über den snmp-handler und "entpackst" dann den bulk.
die ganze geschichte (methode) sollte natürlich in einen eigenen thread laufen, damit das hauptprog nicht erst auf die antwort oder den timeout warten muß, sondern weiter mit seiner arbeit fortfahren kann.

Muss ich an den anderen Klassen noch sehr viele Änderungen vornehmen


wieso willst du an den klassen was ändern? du brauchst nur die vorhandenen klassen einbinden und sprichst diese mit deinen eigenen klassen an. oder wie meinst du das?
mikko
Ambitionierter User
 
Beiträge: 69
Registriert: Di 05.10.2004 - 19:38

joesnmp

Beitragvon Ruth » Di 27.09.2005 - 07:49

Danke Miko, der beispiel code ist wirklich sehr hilfreich. Zur Änderung der Klassen -> jetzt weiss ich Bescheid! Du hast gemeint der SNMP-Handler horcht z.B. auf Port 161, die varbindlist frägt die verschiedenen OIDs ab und die ANtwort kommt wieder über den SNMPHandler, der sie entpackt. D.h. ich muss keine zusätzliche Verbindung (z.B. TCP) aufbauen, damit die installed based informationen vom Server abgefragt werden könnten? -> sorry, ich bin wirklich noch ein Grünschnabel :(
Ruth
User
 
Beiträge: 14
Registriert: Fr 09.09.2005 - 12:40

Re: joesnmp

Beitragvon mikko » Di 27.09.2005 - 14:26

Ruth hat geschrieben:D.h. ich muss keine zusätzliche Verbindung (z.B. TCP) aufbauen, damit die installed based informationen vom Server abgefragt werden könnten?


nein. das macht joesnmp für dich (siehe obige code-beispiel).
mikko
Ambitionierter User
 
Beiträge: 69
Registriert: Di 05.10.2004 - 19:38

DANKE

Beitragvon Ruth » Mi 28.09.2005 - 13:45

Vielen Dank, für Deine schnelle Antworten :)
Hört sich ja schon mal ganz gut an! Werd jetzt mal die verschiedenen Klassen durchgehn und dann sehen wir weiter, da bin ich ja schon eine weile damit beschäftigt!
Ruth
User
 
Beiträge: 14
Registriert: Fr 09.09.2005 - 12:40


Zurück zu Tools und Fernwartung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron