SNMPv3 Abfrage mit Synapse snmpsend

Alle Fragen zur Netzwerkkommunikation
Antworten
catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

SNMPv3 Abfrage mit Synapse snmpsend

Beitrag von catweasel »

Hallo

Ich habe ein einfaches Beispiel um eine Hardware mit SNMPv2 mit snmpsend von Synapse abzufragen.
Das funktioniert soweit auch ganz gut.

Code: Alles auswählen

uses
  [...], snmpsend;
 
procedure TForm1.Button3Click(Sender: TObject);
var   response   : String;
      SNMPResult : Boolean;
      oid        : string;
begin
  repeat
    oid:=OIDLabeledEdit.Text;
    SNMPResult := SNMPGetNext(oid, CommunityLabeledEdit.Text, IPLabeledEdit.Text, response);
    memo1.Lines.Add(response);
  until not SNMPResult;
end;


Allerdings weis ich nicht wie ich die Funktion so umstelle das ich auch Abfragen mit SNMPv3 machen kann.
Wenn ich die Hilfe ansehe (http://synapse.ararat.cz/doc/help/snmpsend.html) dann müßte es irgendwie funktionieren,
da verschiedene Konstanten und Variablen für SNMPv3 vorhanden sind.

Im Quelltext von snmpsend.pas werde ich auch nicht schlauer. Dort heißt es z.B.:

Code: Alles auswählen

    {:For SNMPv3. Specify Authorization mode. (specify used hash for
     authorization)}
    property AuthMode: TV3Auth read FAuthMode write FAuthMode;
 
    {:For SNMPv3. Specify Privacy mode.}
    property PrivMode: TV3Priv read FPrivMode write FPrivMode;
 
    {:SNMPv3 authorization username}
    property UserName: AnsiString read FUserName write FUserName;
 
    {:SNMPv3 authorization password}
    property Password: AnsiString read FPassword write FPassword;
 
    {:For SNMPv3. Computed Athorization key from @link(password).}
    property AuthKey: AnsiString read FAuthKey write FAuthKey;
 
    {:SNMPv3 privacy password}
    property PrivPassword: AnsiString read FPrivPassword write FPrivPassword;
 
    {:For SNMPv3. Computed Privacy key from @link(PrivPassword).}
    property PrivKey: AnsiString read FPrivKey write FPrivKey;


Hat jemand ein Beispiel wie ich eine SNMPv3 Abfrage hinbekomme?

Gruß
Michael


catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: SNMPv3 Abfrage mit Synapse snmpsend

Beitrag von catweasel »

creed steiger hat geschrieben:hilft dir das weiter?
http://synapse.ararat.cz/doku.php/publi ... snmpsample


Hallo

Auf die Seite bin ich nach weiteren recherchen inzwischen auch gestoßen.
Leider kann ich das nicht 1:1 kopieren, da wir hier das ganze Paket mit AuthPriv, PrivAES und AuthSHA haben.

Soweit habe ich es inzwischen, leider noch ohne korrekte Funktion:

Code: Alles auswählen

  SNMP:=TSnmpsend.Create;
  try
    SNMP.Query.Version       := 3;
    SNMP.TargetHost          := '1.2.3.4';
    SNMP.Query.Username      := 'user';
    SNMP.Query.Flags         := AuthPriv;   //AuthNoPriv; NoAuthNoPriv;
 
    SNMP.Query.PrivMode      := PrivAES;    //PrivDES;   Priv3DES;
    SNMP.Query.PrivPassword  :='geheim';
 
    SNMP.Query.AuthMode      := AuthSHA1;   //AuthMD5
    //SNMP.Query.  -kein AuthPass- ???
    SNMP.Query.Password      := 'geheimer';
 
    SNMP.Query.FlagReportable := True;
    oid := '1.3.6.1.2.1.1.1.0';
    SNMP.Query.PDUType := PDUGetRequest;
    SNMP.Query.MIBAdd(Oid, '',ASN1_NULL);
    if SNMP.SendRequest  then
      begin
        memo1.Lines.Add(SNMP.Reply.MIBGet(Oid));
      end;
    memo1.Lines.Add(asndump(SNMP.Buffer));
  finally
    snmp.Free;
  end;

catweasel
Beiträge: 230
Registriert: Di 17. Mär 2009, 10:51
OS, Lazarus, FPC: Win10 64Bit // Linux Mint 20.0 - (L 2.2.0 FPC 3.2.2)

Re: SNMPv3 Abfrage mit Synapse snmpsend

Beitrag von catweasel »

Eine Abfrage funktioniert inzwischen, allerdings muß ich die OID exakt so eingeben wie sie existiert, also auch mit evtl. vorhandenen Index.
Wie kann ich das Beispiel so abändern das ich eine Art SNMPWALK hinbekomme?

Code: Alles auswählen

procedure TForm1.StartButtonClick(Sender: TObject);
var   response   : String;
      SNMPResult : Boolean;
      oid        : string;
      last       : string='';
      i          : integer;
      SNMP       : TSNMPSend;
      result     : TSNMPMib;
begin
  screen.Cursor:=crHourGlass; //crDefault
 
  // SNMPv3 User einrichten
  // net-snmp-config --create-snmpv3-user -ro -X AES -A SHA -a "geheim" -x "geheimer" icinga
 
  SNMP:=TSnmpsend.Create;
  try
    SNMP.Query.Version        := 3;
    SNMP.TargetHost           := '1.2.3.4';
    SNMP.Query.Username       := 'icinga';
    SNMP.Query.Flags          := AuthPriv;              // AuthNoPriv; NoAuthNoPriv;
 
    SNMP.Query.PrivMode       := PrivAES;               // PrivDES;   Priv3DES;
    SNMP.Query.PrivPassword   := 'geheim';
 
    SNMP.Query.AuthMode       := AuthSHA1;              // AuthMD5
    SNMP.Query.Password       := 'geheimer';
 
    SNMP.Query.FlagReportable := True;
    oid                       := '.1.3.6.1.2.1.1.1.0'// sysDescr
    SNMP.Query.PDUType        := PDUGetRequest;
    SNMP.Query.MIBAdd(Oid, '',ASN1_NULL);
 
 
    // Ausgabe nur wenn die OID exakt so wie eingegeben trifft; mit abschließendem Index ".0"
    // also nur mit 1.3.6.1.2.1.1.1.0 statt 1.3.6.1.2.1.1.1
    // Wie bekommt man hier eine Art SNMPWALK hin??
    if SNMP.SendRequest  then
      begin
        //memo1.Lines.Add(Oid+' = '+SNMP.Reply.MIBGet(Oid));
        //memo1.Lines.Add('MIBCount  '+inttostr(SNMP.Reply.MIBCount));
        if SNMP.SendRequest then begin
            for i:=0 to SNMP.Reply.MIBCount-1 do begin
              result:=SNMP.Reply.MIBByIndex(i);
              memo1.Lines.Add('ValTyp = ' + IntToStr(result.ValueType));
              memo1.Lines.Add(Oid+' = '   + result.Value);
            end;
          end
    end;
 
  finally
    snmp.Free;
  end;
 
  Screen.Cursor:=crDefault;
end;

Antworten