![]() |
SNMP Trap senden mit Indy ?
Moin !
Ich versuche gerade mittels SNMP einen Trap zu senden. Leider klappt das nicht wirklich. Als Trap Receiver nutze ich den hier: ![]() snmptrapd -f -Lo -c SNMPAuto.txt wobei SNMPAuto.txt so aussieht: Zitat:
Delphi-Quellcode:
Aber leider bekomme ich als Antwort:
procedure TForm1.Button1Click(Sender: TObject);
var trap : Integer; begin IdSNMP1.Trap.Host := '192.168.30.105'; IdSNMP1.Trap.Community := 'public'; IdSNMP1.Trap.PDUType := $a4; IdSNMP1.Trap.GenTrap := 2; IdSNMP1.Trap.SpecTrap := 0; IdSNMP1.Trap.MIBValue.Add('Testtrap'); IdSNMP1.Trap.MIBOID.Add('1.3.6.1.2.1.1.1'); IdSNMP1.Trap.Port := 162; Trap := IdSNMP1.SendTrap; end; Zitat:
Hat jemand ein funktionierendes Trap Beispiel, was man mal nachvollziehen kann? Oder sieht hier jemand einen Fehler im Code !? |
Re: SNMP Trap senden mit Indy ?
Guten Morgen,
bist Du dir sicher den PDUType für Traps auf $a4 zu setzen und nicht nur auf $04?
Delphi-Quellcode:
Ich weiß, das im SNMP Packet $a4 steht aber laut
IdSNMP1.Trap.PDUType := $a4;
RFC ist der Type für Traps $04. Vielleicht bastelt Indy ja aus den $04 ein $a4. Grüße Klaus |
Re: SNMP Trap senden mit Indy ?
Moin Klaus,
Zitat:
Delphi-Quellcode:
Aber auch wenn ich
const
//PDU type PDUGetRequest = $a0; PDUGetNextRequest = $a1; PDUGetResponse = $a2; PDUSetRequest = $a3; PDUTrap = $a4;
Delphi-Quellcode:
verwende klappt das nicht wirklich. :gruebel:
IdSNMP1.Trap.PDUType := $04;
|
Re: SNMP Trap senden mit Indy ?
.. hast Du schon mal den Traffic mit Wireshark mitprotokolliert
und Dir das Trap (SNMP) Packet angeschaut? Grüße Klaus |
Re: SNMP Trap senden mit Indy ?
Hallo Dominik,
ich habe Deinen Code mal bei mir probiert (Indy 10 mit TDE) und ich bekomme keine Fehlermeldung bzgl. eines nicht korrekten PDUTypes: Das ist was auf der Linuxbox angekommen ist: Zitat:
Klaus |
Re: SNMP Trap senden mit Indy ?
Moin Klaus,
das ist schon komisch. Zitat:
Man kann gut sehen das der PDUTyp falsch ist. Frage ist nur warum ... Kann des evtl. an Delphi 2009 / UniCode liegen ? |
Re: SNMP Trap senden mit Indy ?
Zitat:
kann ich mir nicht vorstellen das dies ein Problem vom UniCode sein sollte. Der PDUType ist ja auch nicht vom Typ String sondern ein Integer. Die sendTrap Routine schaut auch nicht so aus als ob da ein Fehler drin stecken würde:
Delphi-Quellcode:
Grüße
//Aus Indy 10.1.5
(*----------------------------------------------------------------------------* | TIdSNMP.SendTrap | | | | Send an SNMP trap. | | | | The function returns 1 | *----------------------------------------------------------------------------*) function TIdSNMP.SendTrap: integer; begin Trap.PDUType := PDUTrap; Trap.EncodeTrap; Send(Trap.Host, Trap.Port, Trap.Buffer); Result := 1; end; Klaus |
Re: SNMP Trap senden mit Indy ?
Moin !
Es liegt an dieser Funktion:
Delphi-Quellcode:
Zu finden in IdGlobal.
function ToBytes(const AValue: string; const ALength: Integer; const AIndex: Integer = 1;
const AEncoding: TIdEncoding = en7Bit): TIdBytes; overload; var LLength: Integer; begin ValidEncoding(AEncoding); LLength := IndyLength(AValue, ALength, AIndex); if LLength > 0 then begin if AEncoding = enUTF8 then begin Result := StringToUTF8Bytes(AValue, AIndex, LLength); end else begin // do just a byte to byte copy with no translation. VCL uses ANSI or MBCS. // With MBCS we still map 1:1 SetLength(Result, LLength); CopyTIdString(AValue, AIndex, Result, 0, LLength,AEncoding); end; end else begin SetLength(Result, 0); end; end; Dort wird es zu en7Bit codiert und da verliert das $A4 ein $80 und "mutiert" zum $24 ... Nu is die Frage wie man diese Codierung vorher beeinflussen kann. Aufgerufen wird das übrigens von:
Delphi-Quellcode:
Und das wiederum von
function ToBytes(const AValue: string; const AEncoding: TIdEncoding = en7Bit): TIdBytes; overload;
{$IFDEF USEINLINE}inline;{$ENDIF} begin Result := ToBytes(AValue, -1, 1, AEncoding); end;
Delphi-Quellcode:
Tja nu steht man(-n) im Wald. Das Indy Buch schweigt sich dazu auch ganz brilliant aus :x
procedure TIdUDPBase.Send(const AHost: string; const APort: TIdPort; const AData: string);
begin SendBuffer(AHost, APort, ToBytes(AData)); end; Any idea ? |
Re: SNMP Trap senden mit Indy ?
.. nun wenn ich das in der Hilfe lese, verstehe ich nicht mehr:
Zitat:
Grüße Klaus |
Re: SNMP Trap senden mit Indy ?
Moin !
Zitat:
svn://svn.atozed.com/indy/indy10 Ist der momentan offline ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz