AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi SNMP Trap senden mit Indy ?
Thema durchsuchen
Ansicht
Themen-Optionen

SNMP Trap senden mit Indy ?

Ein Thema von moelski · begonnen am 21. Sep 2009 · letzter Beitrag vom 23. Sep 2009
Antwort Antwort
Seite 1 von 3  1 23      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 10:30
Moin !

Ich versuche gerade mittels SNMP einen Trap zu senden.
Leider klappt das nicht wirklich.

Als Trap Receiver nutze ich den hier:
http://www.net-snmp.org/

snmptrapd -f -Lo -c SNMPAuto.txt
wobei SNMPAuto.txt so aussieht:
Zitat:
disableAuthorization yes
Als Code nutze ich das hier:
Delphi-Quellcode:
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;
Aber leider bekomme ich als Antwort:
Zitat:
Bad PDU type received: 0x24
Und auch wenn ich einen anderen Trap Receiver nutze kommt nix an.

Hat jemand ein funktionierendes Trap Beispiel, was man mal nachvollziehen kann?
Oder sieht hier jemand einen Fehler im Code !?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 10:34
Guten Morgen,

bist Du dir sicher den PDUType für Traps auf $a4 zu setzen
und nicht nur auf $04?

IdSNMP1.Trap.PDUType := $a4; Ich weiß, das im SNMP Packet $a4 steht aber laut
RFC ist der Type für Traps $04.

Vielleicht bastelt Indy ja aus den $04 ein $a4.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 10:37
Moin Klaus,

Zitat:
bist Du dir sicher den PDUType für Traps auf $a4 zu setzen
und nicht nur auf $04?
Nuja, in idsnmp.pas ist folgendes deklariert:
Delphi-Quellcode:
const
  //PDU type
  PDUGetRequest = $a0;
  PDUGetNextRequest = $a1;
  PDUGetResponse = $a2;
  PDUSetRequest = $a3;
  PDUTrap = $a4;
Aber auch wenn ich
    IdSNMP1.Trap.PDUType := $04; verwende klappt das nicht wirklich.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 10:51
.. hast Du schon mal den Traffic mit Wireshark mitprotokolliert
und Dir das Trap (SNMP) Packet angeschaut?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 11:21
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:
# snmptrapd -f -Lo -d -c autho.txt
Code:
Received 56 bytes from UDP: [192.168.242.1]:3407
0000: 30 36 02 01  00 04 06 70  75 62 6C 69  63 A4 29 06    06.....public.).
0016: 01 00 40 04  00 00 00 00  02 01 02 02  01 00 43 01    ..@...........C.
0032: 00 30 15 30  13 06 07 2B 06 01 02 01  01 01 04 08    .0.0...+........
0048: 54 65 73 74  74 72 61 70                              Testtrap
2009-09-21 11:18:02 0.0.0.0(via UDP: [192.168.242.1]:3407) TRAP, SNMP v1, community public
SNMPv2-SMI::zeroDotZero Link Down Trap (0) Uptime: 0:00:00.00
SNMPv2-MIB::sysDescr = STRING: Testtrap
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#6

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 12:11
Moin Klaus,

das ist schon komisch.

Zitat:
Received 56 bytes from UDP: [0.0.0.0]->[192.168.30.105]:4858
0000: 30 36 02 01 00 04 06 70 75 62 6C 69 63 24 29 06 06.....public$).
0016: 01 00 40 04 41 3F 1E 69 02 01 02 02 01 00 43 01 ..@.A?.i......C.
0032: 00 30 15 30 13 06 07 2B 06 01 02 01 01 01 04 08 .0.0...+........
0048: 54 65 73 74 74 72 61 70 Testtrap

Bad PDU type received: 0x24

Received 35 bytes from UDP: [0.0.0.0]->[127.0.0.1]:4861
0000: 30 21 02 01 00 04 06 70 75 62 6C 69 63 A4 14 06 0!.....publicñ..
0016: 01 00 40 04 00 00 00 00 02 01 00 02 01 00 43 01 ..@...........C.
0032: 00 30 00 .0.

2009-09-21 11:46:19 pdb4984n [0.0.0.0] (via UDP: [0.0.0.0]->[127.0.0.1]:4861) TRAP, SNMP v1, community public
ccitt.0 Cold Start Trap (0) Uptime: 0:00:00.00
Das kommt bei mir. Der erste Teil ist von meinem Testprog und der zweite stammt von snmptrap.

Man kann gut sehen das der PDUTyp falsch ist. Frage ist nur warum ...
Kann des evtl. an Delphi 2009 / UniCode liegen ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 12:30
Zitat von moelski:
Kann des evtl. an Delphi 2009 / UniCode liegen ?
Hallo Dominik,

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:
//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;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#8

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 12:45
Moin !

Es liegt an dieser Funktion:
Delphi-Quellcode:
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;
Zu finden in IdGlobal.

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:
function ToBytes(const AValue: string; const AEncoding: TIdEncoding = en7Bit): TIdBytes; overload;
{$IFDEF USEINLINE}inline;{$ENDIF}
begin
  Result := ToBytes(AValue, -1, 1, AEncoding);
end;
Und das wiederum von
Delphi-Quellcode:
procedure TIdUDPBase.Send(const AHost: string; const APort: TIdPort; const AData: string);
begin
  SendBuffer(AHost, APort, ToBytes(AData));
end;
Tja nu steht man(-n) im Wald. Das Indy Buch schweigt sich dazu auch ganz brilliant aus

Any idea ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 12:54
.. nun wenn ich das in der Hilfe lese, verstehe ich nicht mehr:

Zitat von DelphiHilfe:
A TIdEncoding value is passed to to ToBytes to indicate the character set encoding required for values in the TIdBytes return value.

TIdEncoding values are used on the .Net platform. Character set encodings are ignored in the VCL.
Vielleicht doch mal das neueste Indy installieren?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

Re: SNMP Trap senden mit Indy ?

  Alt 21. Sep 2009, 12:59
Moin !

Zitat:
Vielleicht doch mal das neueste Indy installieren?
Jo das habe ich mittlerweile auch gelesen. Nur komme ich nicht auf den SVN Server:
svn://svn.atozed.com/indy/indy10

Ist der momentan offline ?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz