📄 snmp.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 + -