How to use SNMP Trap Receiver in a Visual Basic project
Network Component provides an easy-to-use development interface to a variety of IP protocols. By using Network Component, you can very easily create or enhance applications with network features.
Network Component features the following: DNS, FTP, HTTP, HTTPs, ICMP Ping, IP-to-Country, MSN, NTP, RSH, SCP, SFTP, SNMP v1/v2c (Get, GetNext, Set), SNMP Traps, SNMP MIB, SSH, TCP, Telnet, TFTP, UDP, Telnet, Wake-On-LAN and more.
Network Component can be well integrated into any development platform that supports ActiveX objects.
Network Component is compliant with SNMP v1 and SNMP v2c. Several SNMP data types are supported, including:
- String types (also called "octet strings");
- Integer types (16bit, 32bit, 64bit and unsigned integers);
- IP Address types;
- Timetick types;
- Counter types (32bit and 64bit counters);
- OID types (also called "Object ID's");
- Other, less frequently used datatypes.
Network Component SNMP traps features:
- SNMP v1 and SNMP v2c support;
- Support for aplphanumeric OID's (object identifier) and numeric OID's;
- Multi-threading architecture: send 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;
- Send multiple variables in a single SNMP TRAP message.
Step 1: Download and install the Network Component
Download Network Component from the ActiveXperts Download Site and start the installation. The installation guides you through the installation process.
Step 2: Create a new Visual Basic project
Launch 'Microsoft Visual Basic' from the Start menu, and choose 'New' from the 'File Menu'. The 'New Project' dialog appears.
Select 'Standard Exe' and click 'OK':
Step 3: Refer to the Network Component Library and create the objects
A new Project is created, with a blank form.
First, you must add a reference to Network Component in the project to be able to use the object. To do so, choose 'References...' from the 'Project' menu. In the 'References' dialog that pops up, enable the 'Network Component 3.1 Type Library' reference as shown in the following picture:
Click 'OK' to close the 'References...' dialog.
Then, select the Project form and choose 'View Code' from the context menu:
On top of your code, declare the following object:
Public objSnmpTrapManager As AxNetwork.SnmpTrapManager
Step 4: Create the object
From the Code window, select 'Form'. The Private Sub 'Form_Load()' will be displayed now. In the 'Form Load' function, create the object in the following way:
Set objSnmpTrapManager = CreateObject("AxNetwork.SnmpTrapManager")
Appendix: Full source code
Option Explicit Dim objManagerI As SnmpTrapManager Dim objManagerO As SnmpTrapManager Dim objConstants As NwConstants Dim bListening As Boolean Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Private Const MAX_PATH = 260 '/////////////////////////////////////////////////////////////////////// Private Sub Form_Load() Set objManagerI = CreateObject("AxNetwork.SnmpTrapManager") ' Incoming Traps Set objManagerO = CreateObject("AxNetwork.SnmpTrapManager") ' Outgoing Traps Set objConstants = CreateObject("AxNetwork.NwConstants") objManagerI.Initialize objManagerO.Initialize cmbVersion.AddItem ("V1") cmbVersion.AddItem ("V2C") cmbVersion.ListIndex = 1 cmbType.AddItem ("ASN_INTEGER") cmbType.AddItem ("ASN_BITS") cmbType.AddItem ("ASN_OCTETSTRING") cmbType.AddItem ("ASN_NULL") cmbType.AddItem ("ASN_OBJECTIDENTIFIER") cmbType.AddItem ("ASN_INTEGER32") cmbType.AddItem ("ASN_SEQUENCE") cmbType.AddItem ("ASN_IPADDRESS") cmbType.AddItem ("ASN_COUNTER32") cmbType.AddItem ("ASN_GAUGE32") cmbType.AddItem ("ASN_TIMETICKS") cmbType.AddItem ("ASN_OPAQUE") cmbType.AddItem ("ASN_COUNTER64") cmbType.AddItem ("ASN_UNSIGNED32") cmbType.ListIndex = 2 cmbGenericV1Trap.AddItem ("Cold Start") cmbGenericV1Trap.AddItem ("Warm Start") cmbGenericV1Trap.AddItem ("Link Down") cmbGenericV1Trap.AddItem ("Link Up") cmbGenericV1Trap.AddItem ("Authentication Failure") cmbGenericV1Trap.AddItem ("egpNeighborLoss") cmbGenericV1Trap.AddItem ("Enterprise Specific") cmbGenericV1Trap.AddItem ("") cmbGenericV1Trap.ListIndex = 0 bListening = False SetDefaultLogFile EnableControls End Sub '/////////////////////////////////////////////////////////////////////// Private Sub btnSend_Click() Dim objSnmpTrap As SnmpTrap Dim objSnmpObject As SnmpObject Set objSnmpTrap = CreateObject("AxNetwork.SnmpTrap") Set objSnmpObject = CreateObject("AxNetwork.SnmpObject") objSnmpObject.OID = txtOID.Text objSnmpObject.Type = GetType objSnmpObject.Value = txtValue.Text objSnmpTrap.Clear objSnmpTrap.Community = txtCommunity.Text objSnmpTrap.Host = txtAgent.Text objSnmpTrap.AddObject objSnmpObject objSnmpTrap.Port = CInt(txtPort.Text) If (cmbVersion.Text = "V1") Then objSnmpTrap.GenericTrap = cmbGenericV1Trap.ListIndex objSnmpTrap.SpecificTrap = IsNumeric(txtSpecificV1Trap.Text) End If objManagerO.LogFile = txtLogFile.Text objManagerO.ProtocolVersion = cmbVersion.ListIndex + 1 objManagerO.Send objSnmpTrap Set objSnmpObject = Nothing Set objSnmpTrap = Nothing ShowResultO End Sub '////////////////////////////////////////////////////////////////////// Private Sub btnStartListening_Click() objManagerI.LogFile = txtLogFile.Text objManagerI.StartListening txtCommunityIn.Text, CInt(txtPortIn.Text) If (ShowResultI = 0) Then Timer.Enabled = True bListening = True EnableControls End If End Sub '/////////////////////////////////////////////////////////////////////// Private Sub btnStopListening_Click() objManagerI.StopListening If (ShowResultI = 0) Then Timer.Enabled = False bListening = False EnableControls End If End Sub '/////////////////////////////////////////////////////////////////////// Private Sub Timer_Timer() Dim objSnmpTrap As SnmpTrap Dim objSnmpObject As SnmpObject On Error Resume Next Set objSnmpTrap = objManagerI.GetFirstTrap While ShowResultI = 0 Set objSnmpObject = objSnmpTrap.GetFirstObject While objSnmpTrap.LastError = 0 Dim objItem As ListItem Set objItem = lvTraps.ListItems.Add(, , objSnmpTrap.Host) ' Add data to list control objItem.SubItems(1) = objSnmpObject.OID objItem.SubItems(2) = GetTypeString(objSnmpObject.Type) objItem.SubItems(3) = objSnmpObject.Value Set objSnmpObject = objSnmpTrap.GetNextObject Wend Set objSnmpTrap = objManagerI.GetNextTrap Wend End Sub '/////////////////////////////////////////////////////////////////////// Private Sub btnView_Click() If FileExists(txtLogFile.Text) = True Then Shell "notepad " + txtLogFile.Text, vbNormalFocus End If End Sub '/////////////////////////////////////////////////////////////////////// Public Function FileExists(sFileName As String) As Boolean FileExists = CBool(Len(Dir$(sFileName))) And CBool(Len(sFileName)) End Function '/////////////////////////////////////////////////////////////////////// Private Sub cmbVersion_Click() EnableControls End Sub '/////////////////////////////////////////////////////////////////////// Private Function SetDefaultLogFile() Dim Buffer As String Buffer = Space(MAX_PATH) If GetTempPath(MAX_PATH, Buffer) <> 0 Then txtLogFile.Text = Left$(Buffer, InStr(Buffer, vbNullChar) - 1) & "SnmpTrap.log" Else txtLogFile.Text = "C:\SnmpTrap.log" End If End Function '/////////////////////////////////////////////////////////////////////// Private Sub cmbGenericV1Trap_Click() EnableControls End Sub '/////////////////////////////////////////////////////////////////////// Private Function GetType() Select Case cmbType.Text Case "ASN_INTEGER" GetType = objConstants.nwSNMP_TYPE_INTEGER Case "ASN_BUTS" GetType = objConstants.nwSNMP_TYPE_BITS Case "ASN_OCTETSTRING" GetType = objConstants.nwSNMP_TYPE_OCTETSTRING Case "ASN_NULL" GetType = objConstants.nwSNMP_TYPE_NULL Case "ASN_OBJECTIDENTIFIER" GetType = objConstants.nwSNMP_TYPE_OBJECTIDENTIFIER Case "ASN_INTEGER32" GetType = objConstants.nwSNMP_TYPE_INTEGER32 Case "ASN_SEQUENCE" GetType = objConstants.nwSNMP_TYPE_SEQUENCE Case "ASN_IPADDRESS" GetType = objConstants.nwSNMP_TYPE_IPADDRESS Case "ASN_COUNTER32" GetType = objConstants.nwSNMP_TYPE_COUNTER32 Case "ASN_GAUGE32" GetType = objConstants.nwSNMP_TYPE_GAUGE32 Case "ASN_TIMETICKS" GetType = objConstants.nwSNMP_TYPE_TIMETICKS Case "ASN_OPAQUE" GetType = objConstants.nwSNMP_TYPE_OPAQUE Case "ASN_COUNTER64" GetType = objConstants.nwSNMP_TYPE_COUNTER64 Case "ASN_UNSIGNED32" GetType = objConstants.nwSNMP_TYPE_UNSIGNED32 End Select End Function '/////////////////////////////////////////////////////////////////////// Private Function GetTypeString(lType As Long) GetTypeString = "" Select Case lType Case objConstants.nwSNMP_TYPE_BITS GetTypeString = "ASN_BITS" Case objConstants.nwSNMP_TYPE_COUNTER32 GetTypeString = "ASN_COUNTER32" Case objConstants.nwSNMP_TYPE_COUNTER64 GetTypeString = "ASN_COUNTER64" Case objConstants.nwSNMP_TYPE_TIMETICKS GetTypeString = "ASN_TIMETICKS" Case objConstants.nwSNMP_TYPE_OCTETSTRING GetTypeString = "ASN_OCTETSTRING" Case objConstants.nwSNMP_TYPE_GAUGE32 GetTypeString = "ASN_GAUGE32" Case objConstants.nwSNMP_TYPE_IPADDRESS GetTypeString = "ASN_IPADDRESS" Case objConstants.nwSNMP_TYPE_OPAQUE GetTypeString = "ASN_OPAQUE" Case objConstants.nwSNMP_TYPE_UNSIGNED32 GetTypeString = "ASN_UNSIGNED32" Case objConstants.nwSNMP_TYPE_OBJECTIDENTIFIER GetTypeString = "ASN_OBJECTIDENTIFIER" Case objConstants.nwSNMP_TYPE_NULL GetTypeString = "ASN_NULL" Case objConstants.nwSNMP_TYPE_INTEGER GetTypeString = "ASN_INTEGER" Case objConstants.nwSNMP_TYPE_INTEGER32 GetTypeString = "ASN_INTEGER32" Case objConstants.nwSNMP_TYPE_SEQUENCE GetTypeString = "ASN_SEQUENCE" End Select End Function '/////////////////////////////////////////////////////////////////////// Private Function ShowResultI() ShowResultI = objManagerI.LastError txtResult.Text = ShowResultI & ": " & objManagerI.GetErrorDescription(ShowResultI) End Function '/////////////////////////////////////////////////////////////////////// Private Function ShowResultO() ShowResultO = objManagerO.LastError txtResult.Text = ShowResultO & ": " & objManagerO.GetErrorDescription(ShowResultO) End Function '/////////////////////////////////////////////////////////////////////// Private Sub btnClearList_Click() lvTraps.ListItems.Clear End Sub '/////////////////////////////////////////////////////////////////////// Private Sub EnableControls() btnStartListening.Enabled = Not bListening btnStopListening.Enabled = bListening If (cmbVersion.Text = "V2C") Then lblSpecificTrap.Visible = False lblGenericV1Trap.Visible = False cmbGenericV1Trap.Visible = False txtSpecificV1Trap.Visible = False Else lblGenericV1Trap.Visible = True cmbGenericV1Trap.Visible = True If (cmbGenericV1Trap.Text = "Enterprise Specific") Then lblSpecificTrap.Visible = True txtSpecificV1Trap.Visible = True Else lblSpecificTrap.Visible = False txtSpecificV1Trap.Visible = False End If End If End Sub '///////////////////////////////////////////////////////////////////////
You can download the complete samples here. There are many other working Network Component scripts on our site and shipped with the product.
NOTE: Demo Projects are created with Microsoft Visual Studio 2008
The Network Component project ships with a set of Microsoft Visual Studio .NET samples, including samples for Microsoft Visual C# .NET. The projects are created with Microsoft Visual Studio 2008.
Users with a later version of Microsoft Visual Studio can open such a project. The Visual Studio Conversion Wizard will guide you through the process of converting the project to the version used.