⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmp.pas

📁 监听TCP、UDP端口,查看进程及服务.
💻 PAS
字号:

{*******************************************************}
{                                                       }
{       Delphi Runtime Library                          }
{       SNMP Interface Unit                             }
{                                                       }
{       Copyright (c) 1999 Vadim Crits                  }
{                                                       }
{*******************************************************}

unit Snmp;

{$ALIGN ON}
{$MINENUMSIZE 4}

interface

uses
  Windows;

{ SNMP Type Definitions }

type
  PAsnOctetString = ^TAsnOctetString;
  TAsnOctetString = packed record
    stream: PBYTE;
    length: UINT;
    dynam: BOOL;
  end;

  PAsnObjectIdentifier = ^TAsnObjectIdentifier;
  TAsnObjectIdentifier = packed record
    idLength: UINT;
    ids: PUINT;
  end;

  PAsnInteger32 = ^TAsnInteger32;
  TAsnInteger32 = Longint;

  PAsnUnsigned32 = ^TAsnUnsigned32;
  TAsnUnsigned32 = ULONG;

  PTAsnCounter64 = ^TAsnCounter64;
  TAsnCounter64 = ULARGE_INTEGER;

  PAsnCounter32 = ^TAsnCounter32;
  TAsnCounter32 = TAsnUnsigned32;

  PAsnGauge32 = ^TAsnGauge32;
  TAsnGauge32 = TAsnUnsigned32;

  PAsnTimeticks = ^TAsnTimeticks;
  TAsnTimeticks = TAsnUnsigned32;

  PAsnBits = ^TAsnBits;
  TAsnBits = TAsnOctetString;

  PAsnSequence = ^TAsnSequence;
  TAsnSequence = TAsnOctetString;

  PAsnImplicitSequence = ^TAsnImplicitSequence;
  TAsnImplicitSequence = TAsnOctetString;

  PAsnIPAddress = ^TAsnIPAddress;
  TAsnIPAddress = TAsnOctetString;

  PAsnNetworkAddress = ^TAsnNetworkAddress;
  TAsnNetworkAddress = TAsnOctetString;

  PAsnDisplayString = ^TAsnDisplayString;
  TAsnDisplayString = TAsnOctetString;

  PAsnOpaque = ^TAsnOpaque;
  TAsnOpaque = TAsnOctetString;

  PAsnAny = ^TAsnAny;
  TAsnAny = record
    asnType: BYTE;
    case Integer of
      0: (number: TAsnInteger32);
      1: (unsigned32: TAsnUnsigned32);
      2: (counter64: TAsnCounter64);
      3: (str: TAsnOctetString);
      4: (bits: TAsnBits);
      5: (obj: TAsnObjectIdentifier);
      6: (sequence: TAsnSequence);
      7: (address: TAsnIPAddress);
      8: (counter: TAsnCounter32);
      9: (gauge: TAsnGauge32);
     10: (ticks: TAsnTimeticks);
     11: (arbitrary: TAsnOpaque);
  end;

  TAsnObjectName = TAsnObjectIdentifier;
  TAsnObjectSyntax = TAsnAny;

  PSnmpVarBind = ^TSnmpVarBind;
  TSnmpVarBind = packed record
    name: TAsnObjectName;
    value: TAsnObjectSyntax;
  end;

  PSnmpVarBindList = ^TSnmpVarBindList;
  TSnmpVarBindList = packed record
    list: PSnmpVarBind;
    len: UINT;
  end;

{ ASN/BER Base Types }

const
  ASN_UNIVERSAL              = $00;
  ASN_APPLICATION            = $40;
  ASN_CONTEXT                = $80;
  ASN_PRIVATE                = $C0;

  ASN_PRIMITIVE              = $00;
  ASN_CONSTRUCTOR            = $20;

{ PDU Type Values }

  SNMP_PDU_GET               = (ASN_CONTEXT or ASN_CONSTRUCTOR or $0);
  SNMP_PDU_GETNEXT           = (ASN_CONTEXT or ASN_CONSTRUCTOR or $1);
  SNMP_PDU_RESPONSE          = (ASN_CONTEXT or ASN_CONSTRUCTOR or $2);
  SNMP_PDU_SET               = (ASN_CONTEXT or ASN_CONSTRUCTOR or $3);
  SNMP_PDU_V1TRAP            = (ASN_CONTEXT or ASN_CONSTRUCTOR or $4);
  SNMP_PDU_GETBULK           = (ASN_CONTEXT or ASN_CONSTRUCTOR or $5);
  SNMP_PDU_INFORM            = (ASN_CONTEXT or ASN_CONSTRUCTOR or $6);
  SNMP_PDU_TRAP              = (ASN_CONTEXT or ASN_CONSTRUCTOR or $7);

{ SNMP Simple Syntax Values }

  ASN_INTEGER                = (ASN_UNIVERSAL or ASN_PRIMITIVE or $02);
  ASN_BITS                   = (ASN_UNIVERSAL or ASN_PRIMITIVE or $03);
  ASN_OCTETSTRING            = (ASN_UNIVERSAL or ASN_PRIMITIVE or $04);
  ASN_NULL                   = (ASN_UNIVERSAL or ASN_PRIMITIVE or $05);
  ASN_OBJECTIDENTIFIER       = (ASN_UNIVERSAL or ASN_PRIMITIVE or $06);
  ASN_INTEGER32              = ASN_INTEGER;

{ SNMP Constructor Syntax Values }

  ASN_SEQUENCE               = (ASN_UNIVERSAL or ASN_CONSTRUCTOR or $10);
  ASN_SEQUENCEOF             = ASN_SEQUENCE;

{ SNMP Application Syntax Values }

  ASN_IPADDRESS              = (ASN_APPLICATION or ASN_PRIMITIVE or $00);
  ASN_COUNTER32              = (ASN_APPLICATION or ASN_PRIMITIVE or $01);
  ASN_GAUGE32                = (ASN_APPLICATION or ASN_PRIMITIVE or $02);
  ASN_TIMETICKS              = (ASN_APPLICATION or ASN_PRIMITIVE or $03);
  ASN_OPAQUE                 = (ASN_APPLICATION or ASN_PRIMITIVE or $04);
  ASN_COUNTER64              = (ASN_APPLICATION or ASN_PRIMITIVE or $06);
  ASN_UNSIGNED32             = (ASN_APPLICATION or ASN_PRIMITIVE or $07);

{ SNMP Exception Conditions }

  SNMP_EXCEPTION_NOSUCHOBJECT   = (ASN_CONTEXT or ASN_PRIMITIVE or $00);
  SNMP_EXCEPTION_NOSUCHINSTANCE = (ASN_CONTEXT or ASN_PRIMITIVE or $01);
  SNMP_EXCEPTION_ENDOFMIBVIEW   = (ASN_CONTEXT or ASN_PRIMITIVE or $02);

{ SNMP Request Types (used in SnmpExtensionQueryEx) }

  SNMP_EXTENSION_GET         = SNMP_PDU_GET;
  SNMP_EXTENSION_GET_NEXT    = SNMP_PDU_GETNEXT;
  SNMP_EXTENSION_GET_BULK    = SNMP_PDU_GETBULK;
  SNMP_EXTENSION_SET_TEST    = (ASN_PRIVATE or ASN_CONSTRUCTOR or $0);
  SNMP_EXTENSION_SET_COMMIT  = SNMP_PDU_SET;
  SNMP_EXTENSION_SET_UNDO    = (ASN_PRIVATE or ASN_CONSTRUCTOR or $1);
  SNMP_EXTENSION_SET_CLEANUP = (ASN_PRIVATE or ASN_CONSTRUCTOR or $2);

{ SNMP Error Codes }

  SNMP_ERRORSTATUS_NOERROR             = 0;
  SNMP_ERRORSTATUS_TOOBIG              = 1;
  SNMP_ERRORSTATUS_NOSUCHNAME          = 2;
  SNMP_ERRORSTATUS_BADVALUE            = 3;
  SNMP_ERRORSTATUS_READONLY            = 4;
  SNMP_ERRORSTATUS_GENERR              = 5;
  SNMP_ERRORSTATUS_NOACCESS            = 6;
  SNMP_ERRORSTATUS_WRONGTYPE           = 7;
  SNMP_ERRORSTATUS_WRONGLENGTH         = 8;
  SNMP_ERRORSTATUS_WRONGENCODING       = 9;
  SNMP_ERRORSTATUS_WRONGVALUE          = 10;
  SNMP_ERRORSTATUS_NOCREATION          = 11;
  SNMP_ERRORSTATUS_INCONSISTENTVALUE   = 12;
  SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE = 13;
  SNMP_ERRORSTATUS_COMMITFAILED        = 14;
  SNMP_ERRORSTATUS_UNDOFAILED          = 15;
  SNMP_ERRORSTATUS_AUTHORIZATIONERROR  = 16;
  SNMP_ERRORSTATUS_NOTWRITABLE         = 17;
  SNMP_ERRORSTATUS_INCONSISTENTNAME    = 18;

{ SNMPv1 Trap Types }

  SNMP_GENERICTRAP_COLDSTART           = 0;
  SNMP_GENERICTRAP_WARMSTART           = 1;
  SNMP_GENERICTRAP_LINKDOWN            = 2;
  SNMP_GENERICTRAP_LINKUP              = 3;
  SNMP_GENERICTRAP_AUTHFAILURE         = 4;
  SNMP_GENERICTRAP_EGPNEIGHLOSS        = 5;
  SNMP_GENERICTRAP_ENTERSPECIFIC       = 6;

{ SNMP Access Types }

  SNMP_ACCESS_NONE                     = 0;
  SNMP_ACCESS_NOTIFY                   = 1;
  SNMP_ACCESS_READ_ONLY                = 2;
  SNMP_ACCESS_READ_WRITE               = 3;
  SNMP_ACCESS_READ_CREATE              = 4;

{ SNMP API Return Code Definitions }

  SNMPAPI_NOERROR                      = BOOL(TRUE);
  SNMPAPI_ERROR                        = BOOL(FALSE);

{ SNMP Extension API Prototypes }

function SnmpExtensionInit(dwUptimeReference: DWORD; phSubagentTrapEvent: PHandle;
  pFirstSupportedRegion: PAsnObjectIdentifier): BOOL; stdcall;

function SnmpExtensionInitEx(pNextSupportedRegion: PAsnObjectIdentifier): BOOL; stdcall;

function SnmpExtensionQuery(bPduType: BYTE; pVarBindList: PSnmpVarBindList;
  pErrorStatus, pErrorIndex: PAsnInteger32): BOOL; stdcall;

function SnmpExtensionQueryEx(nRequestType, nTransactionId: UINT;
  pVarBindList: PSnmpVarBindList; pContextInfo: PAsnOctetString;
  pErrorStatus, pErrorIndex: PAsnInteger32): BOOL; stdcall;

function SnmpExtensionTrap(pEnterpriseOid: PAsnObjectIdentifier;
  pGenericTrapId, pSpecificTrapId: PAsnInteger32; pTimeStamp: PAsnTimeticks;
  pVarBindList: PSnmpVarBindList): BOOL; stdcall;

procedure SnmpExtensionClose; stdcall;

{ SNMP Extension API Type Definitions }

type
  TSnmpExtensionInit = function(dwUptimeReference: DWORD; phSubagentTrapEvent: PHandle;
    pFirstSupportedRegion: PAsnObjectIdentifier): BOOL; stdcall;

  TSnmpExtensionInitEx = function(pNextSupportedRegion: PAsnObjectIdentifier): BOOL; stdcall;

  TSnmpExtensionQuery = function(bPduType: BYTE; pVarBindList: PSnmpVarBindList;
    pErrorStatus, pErrorIndex: PAsnInteger32): BOOL; stdcall;

  TSnmpExtensionQueryEx = function(nRequestType, nTransactionId: UINT;
    pVarBindList: PSnmpVarBindList; pContextInfo: PAsnOctetString;
    pErrorStatus, pErrorIndex: PAsnInteger32): BOOL; stdcall;

  TSnmpExtensionTrap = function(pEnterpriseOid: PAsnObjectIdentifier;
    pGenericTrapId, pSpecificTrapId: PAsnInteger32; pTimeStamp: PAsnTimeticks;
    pVarBindList: PSnmpVarBindList): BOOL; stdcall;

  TSnmpExtensionClose = procedure; stdcall;

{ SNMP API Prototypes }

function  SnmpUtilOidCpy(pOidDst, pOidSrc: PAsnObjectIdentifier): Integer; stdcall;
function  SnmpUtilOidAppend(pOidDst, pOidSrc: PAsnObjectIdentifier): Integer; stdcall;
function  SnmpUtilOidNCmp(pOid1, pOid2: PAsnObjectIdentifier; nSubIds: UINT): Integer; stdcall;
function  SnmpUtilOidCmp(pOid1, pOid2: PAsnObjectIdentifier): Integer; stdcall;
procedure SnmpUtilOidFree(pOid: PAsnObjectIdentifier); stdcall;
function  SnmpUtilOctetsCmp(pOctets1, pOctets2: PAsnOctetString): Integer; stdcall;
function  SnmpUtilOctetsNCmp(pOctets1, pOctets2: PAsnOctetString; nChars: UINT): Integer; stdcall;
function  SnmpUtilOctetsCpy(pOctetsDst, pOctetsSrc: PAsnOctetString): Integer; stdcall;
procedure SnmpUtilOctetsFree(pOctets: PAsnOctetString); stdcall;
function  SnmpUtilAsnAnyCpy(pAnyDst, pAnySrc: PAsnAny): Integer; stdcall;
procedure SnmpUtilAsnAnyFree(pAny: PAsnAny); stdcall;
function  SnmpUtilVarBindCpy(pVbDst, pVbSrc: PSnmpVarBind): Integer; stdcall;
procedure SnmpUtilVarBindFree(pVb: PSnmpVarBind); stdcall;
function  SnmpUtilVarBindListCpy(pVblDst, pVblSrc: PSnmpVarBindList): Integer; stdcall;
procedure SnmpUtilVarBindListFree(pVbl: PSnmpVarBindList); stdcall;
procedure SnmpUtilMemFree(pMem: Pointer); stdcall;
function  SnmpUtilMemAlloc(nBytes: UINT): Pointer; stdcall;
function  SnmpUtilMemReAlloc(pMem: Pointer; nBytes: UINT): Pointer; stdcall;
function  SnmpUtilOidToA(Oid: PAsnObjectIdentifier): LPSTR; stdcall;
function  SnmpUtilIdsToA(Ids: PUINT; IdLength: UINT): LPSTR; stdcall;
procedure SnmpUtilPrintOid(Oid: PAsnObjectIdentifier); stdcall;
procedure SnmpUtilPrintAsnAny(pAny: PAsnAny); stdcall;
function  SnmpSvcGetUptime: DWORD; stdcall;
procedure SnmpSvcSetLogLevel(nLogLevel: Integer); stdcall;
procedure SnmpSvcSetLogType(nLogType: Integer); stdcall;

{ SNMP Debugging Definitions }

const
  SNMP_LOG_SILENT               = $0;
  SNMP_LOG_FATAL                = $1;
  SNMP_LOG_ERROR                = $2;
  SNMP_LOG_WARNING              = $3;
  SNMP_LOG_TRACE                = $4;
  SNMP_LOG_VERBOSE              = $5;

  SNMP_OUTPUT_TO_CONSOLE        = $1;
  SNMP_OUTPUT_TO_LOGFILE        = $2;
  SNMP_OUTPUT_TO_EVENTLOG       = $4;
  SNMP_OUTPUT_TO_DEBUGGER       = $8;

{ Miscellaneous definitions }

  DEFAULT_SNMP_PORT_UDP         = 161;
  DEFAULT_SNMP_PORT_IPX         = 36879;
  DEFAULT_SNMPTRAP_PORT_UDP     = 162;
  DEFAULT_SNMPTRAP_PORT_IPX     = 36880;

  SNMP_MAX_OID_LEN              = 128;

{ API Error Code Definitions }

  SNMP_MEM_ALLOC_ERROR          = 1;
  SNMP_BERAPI_INVALID_LENGTH    = 10;
  SNMP_BERAPI_INVALID_TAG       = 11;
  SNMP_BERAPI_OVERFLOW          = 12;
  SNMP_BERAPI_SHORT_BUFFER      = 13;
  SNMP_BERAPI_INVALID_OBJELEM   = 14;
  SNMP_PDUAPI_UNRECOGNIZED_PDU  = 20;
  SNMP_PDUAPI_INVALID_ES        = 21;
  SNMP_PDUAPI_INVALID_GT        = 22;
  SNMP_AUTHAPI_INVALID_VERSION  = 30;
  SNMP_AUTHAPI_INVALID_MSG_TYPE = 31;
  SNMP_AUTHAPI_TRIV_AUTH_FAILED = 32;

implementation

const
  miblib  = 'inetmib1.dll'; //Import Library: User-defined.
  snmpapi = 'snmpapi.dll';

function  SnmpExtensionInit;       external miblib  name 'SnmpExtensionInit';
function  SnmpExtensionInitEx;     external miblib  name 'SnmpExtensionInitEx';
function  SnmpExtensionQuery;      external miblib  name 'SnmpExtensionQuery';
function  SnmpExtensionQueryEx;    external miblib  name 'SnmpExtensionQueryEx';
function  SnmpExtensionTrap;       external miblib  name 'SnmpExtensionTrap';
procedure SnmpExtensionClose;      external miblib  name 'SnmpExtensionClose';

function  SnmpUtilOidCpy;          external snmpapi name 'SnmpUtilOidCpy';
function  SnmpUtilOidAppend;       external snmpapi name 'SnmpUtilOidAppend';
function  SnmpUtilOidNCmp;         external snmpapi name 'SnmpUtilOidNCmp';
function  SnmpUtilOidCmp;          external snmpapi name 'SnmpUtilOidCmp';
procedure SnmpUtilOidFree;         external snmpapi name 'SnmpUtilOidFree';
function  SnmpUtilOctetsCmp;       external snmpapi name 'SnmpUtilOctetsCmp';
function  SnmpUtilOctetsNCmp;      external snmpapi name 'SnmpUtilOctetsNCmp';
function  SnmpUtilOctetsCpy;       external snmpapi name 'SnmpUtilOctetsCpy';
procedure SnmpUtilOctetsFree;      external snmpapi name 'SnmpUtilOctetsFree';
function  SnmpUtilAsnAnyCpy;       external snmpapi name 'SnmpUtilAsnAnyCpy';
procedure SnmpUtilAsnAnyFree;      external snmpapi name 'SnmpUtilAsnAnyFree';
function  SnmpUtilVarBindCpy;      external snmpapi name 'SnmpUtilVarBindCpy';
procedure SnmpUtilVarBindFree;     external snmpapi name 'SnmpUtilVarBindFree';
function  SnmpUtilVarBindListCpy;  external snmpapi name 'SnmpUtilVarBindListCpy';
procedure SnmpUtilVarBindListFree; external snmpapi name 'SnmpUtilVarBindListFree';
procedure SnmpUtilMemFree;         external snmpapi name 'SnmpUtilMemFree';
function  SnmpUtilMemAlloc;        external snmpapi name 'SnmpUtilMemAlloc';
function  SnmpUtilMemReAlloc;      external snmpapi name 'SnmpUtilMemReAlloc';
function  SnmpUtilOidToA;          external snmpapi name 'SnmpUtilOidToA';
function  SnmpUtilIdsToA;          external snmpapi name 'SnmpUtilIdsToA';
procedure SnmpUtilPrintOid;        external snmpapi name 'SnmpUtilPrintOid';
procedure SnmpUtilPrintAsnAny;     external snmpapi name 'SnmpUtilPrintAsnAny';
function  SnmpSvcGetUptime;        external snmpapi name 'SnmpSvcGetUptime';
procedure SnmpSvcSetLogLevel;      external snmpapi name 'SnmpSvcSetLogLevel';
procedure SnmpSvcSetLogType;       external snmpapi name 'SnmpSvcSetLogType';

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -