SNMP Trap Software Development Component for Borland Delphi

ActiveSocket is a Network Communication component for Windows Developers. It runs on any 32 bit and 64 bit Windows Platform, incl. Windows 7, Windows 2008, Windows 2003, Windows 2000, Windows Vista and Windows XP.
It features many IP protocols, incl.: SSH (Secure Shell), RSH (Remote Shell), HTTP(s), FTP, ICMP Ping, NTP, SNMP v1/v2c (Get,GetNext,Set), SNMP MIB translation, SNMP Trap Sender, SNMP Trap Receiver, Telnet, DNS, TCP, UDP, IP-to-Country, Wake-On-LAN and more. Samples are included many popular development platforms, incl. Visual C# .NET, Visual Basic .NET, ASP .NET, Visual Basic, Visual C/C++, ASP, Java, Javascript, PHP, Borland Delphi, Borland C++ Builder, ColdFusion.

ActiveSocket is compliant with SNMP versions v1 and v2c. Several SNMP data types are supported, including:

  • ASN_INTEGER; Numeric values;
  • ASN_INTEGER32; Numeric values;
  • ASN_BITS; Bit values, for instance: one bit per port to see if a port is connected;
  • ASN_OCTETSTRING; Byte string;
  • ASN_NULL; Null value;
  • ASN_OBJECTIDENTIFIER; Object identifier (OID);
  • ASN_SEQUENCE; Text string;
  • ASN_IPADDRESS; IP address;
  • ASN_COUNTER32; 32 bit counter;
  • ASN_GAUGE32; 32 bit gauge;
  • ASN_TIMETICKS; Timestamps or uptime;
  • ASN_OPAQUE; Byte string;
  • ASN_COUNTER64; 64 bit counter;
  • ASN_UNSIGNED32; unsigned 32 bit numeric value.

ActiveSocket supports the following SNMP trap features:

  • SNMP v1 and SNMP v2c support;
  • Support for alphanumeric OID's (object identifier) and numeric OID's;
  • Multithreading architecture: send and/or receive SNMP traps simultaneously from one process using multiple threads;
  • Support for ports other than the default 161 and 162 ports;
  • Support for enterprise specific traps;
  • Support for SNMP v1 generic traps such as coldstart, warmstart, linkup, linkdown, authfailure and neighbourloss;
  • Send multiple data objects (variable bindings) using a single SNMP trap message.

ActiveSocket can be well integrated into Delphi environments. This document describes how ActiveSocket can be integrated into Delphi projects.

Step 1: Download and install the ActiveSocket Toolkit

Download the ActiveSocket from the ActiveXperts Download Site and start the installation. The installation guides you through the installation process.

Step 2: Create a new Delphi Project

Launch Borland Delphi (for instance 'Delphi 2005') from the Start menu. Choose 'New' from the 'File' menu and select your preferred kind of application, for instance: 'VCL Forms Application - Delphi for Win32'. A new Form is displayed in the workspace.

Borland Delphi

(Click on the picture to enlarge)

Step 3: Refer to the ActiveSocket Library and create the objects

Now that a new project has been created, you must add a reference to ActiveSocket in the project to be able to use the ActiveSocket object. To do so, choose 'Import Component...' from the 'Component' menu. The Import Components' dialog appears. Select 'Import a Type Library':

Borland Delphi

(Click on the picture to enlarge)

In the 'Registered Type Libraries' page, select 'ActiveSocket 3.1 Type Library' and click 'Next':

Borland Delphi

(Click on the picture to enlarge)

In the 'Components' page, leave all fields default and click 'Next':

Borland Delphi

(Click on the picture to enlarge)

In the 'Install' page, select 'Create Unit' and click 'Next':

Borland delphi

(Click on the picture to enlarge)

The interface code is generated now and is shown in the ASOCKETLib_TLB tab of the project.

Step 4: Declare and create the object

To send SNMP traps using Delphi, you need to declare and create the following ActiveSocket objects:

  • SnmpTrapManager; The SNMP manager which allows you to send and/or receive SNMP traps in the form of SnmpTrap objects;
  • SnmpTrap; The actual SNMP trap, this object holds some SNMP trap properties like: destination host, port and community, specific and generic trap and a timestamp;
  • SnmpObject; This object is used to hold the data to be send with the SNMP trap. These data objects are also called variable bindings.

From the Project Manager, open Unit1.bas and add the ASOCKETLib_TLB to the 'Uses' statement to refer to the ActiveSocket library:

Borland Delphi

(Click on the picture to enlarge)

In the 'private' or 'public' section, declare the following objects:

   objSnmpTrapManager    : ISnmpTrapManager;
   objSnmpTrap           : ISnmpTrap;
   objSnmpObject         : ISnmpObject;

You can now create the objects, for instance in the 'FormCreate' function:

   objSnmpTrapManager     := TSnmpTrapManager.Create(Form1).DefaultInterface;
   objSnmpTrap            := TSnmpTrap.Create(Form1).DefaultInterface;
   objSnmpObject          := TSnmpObject.Create(Form1).DefaultInterface;

Step 5: Sending a trap

When the required SNMP objects are created, you can implement the code to send a SNMP trap:

procedure TFormSnmpTrap.ButtonSendClick(Sender: TObject);
var objSnmpTrap   : ISnmpTrap;
var objSnmpObject : ISnmpObject;
var vtVar         : OleVariant;

begin
  { Initialize Trap manager and set SNMP version to v2c }
  objSnmpTrapManager.Initialize ();
  objSnmpTrapManager.ProtocolVersion := 2;

  { Create a SnmpTrap and SnmpObject }
  objSnmpTrap   := TSnmpTrap.Create ( Application ).DefaultInterface;
  objSnmpObject := TSnmpObject.Create ( Application ).DefaultInterface;

  objSnmpTrap.Clear ();
  objSnmpObject.Clear ();

  { Set the values of the data to be sent with the trap }
  objSnmpObject.Value := EditValue.Text;
  objSnmpObject.OID   := EditOID.Text;
  objSnmpObject.type_ := GetValueTypeID ();

  vtVar := objSnmpObject;

  { Set the trap properties and add the data }
  objSnmpTrap.Host       := EditAgent.Text;
  objSnmpTrap.Port       := StrToInt ( EditPort.Text );
  objSnmpTrap.Community  := EditCommunity.Text;
  objSnmpTrap.AddObject ( vtVar );

  vtVar := objSnmpTrap;

  if ( objSnmpTrapManager.LastError = 0 ) then objSnmpTrapManager.Send( vtVar );
end;

You can download the complete sample on our ftp site ftp.activexperts-labs.com/samples/asocket. There are many other working ActiveSocket scripts on our site and shipped with the product.