谢谢各位帮我顶一下

解决方案 »

  1.   

    只能幫忙up, 我們公司以前是用VC實現的, 由于我delphi我用的比較多, 我也找過snmp在delphi的實現, 但很少, 有几個開源的控件, 但也不是很好用的感覺!
      

  2.   

    哪位大侠能帮我一下
    aiirii能不能把你做的例子让我参考一下
    [email protected]
    谢谢!
      

  3.   

    unit Snmp;{$ALIGN ON}
    {$MINENUMSIZE 4}interfaceuses
      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);
      

  4.   

    { 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;
      

  5.   

    { 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;implementationconst
      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.
      

  6.   

    unit frm_main;interfaceuses
      Windows, Messages, SysUtils, Classes,
      Graphics, Controls, Forms, WinSock, Dialogs,
      Snmp, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        FHostName: array[0..255] of Char;
        WSAData: TWSAData;
        procedure GetTcpUdpInfo(); //Get the tcp/udp info
        function GetHost(local: Boolean; ipaddr: UINT): string;
        function GetPort(port: UINT; proto: PChar): string;
      public
        { Public declarations }
      end;  PTcpInfo = ^TTcpInfo;
      TTcpInfo = packed record
        prev: PTcpInfo;
        next: PTcpInfo;
        state: UINT;
        localip: UINT;
        localport: UINT;
        remoteip: UINT;
        remoteport: UINT;
      end;  PAsnObjectIdentifier = ^TAsnObjectIdentifier;
      TAsnObjectIdentifier = packed record
        idLength: UINT;
        ids: PUINT;
      end;
      PIds = ^TIds;
      TIds = array[0..9] of UINT;
    const
      TcpIdentifiers: TIds = (1, 3, 6, 1, 2, 1, 6, 13, 1, 0);
      UdpIdentifiers: TIds = (1, 3, 6, 1, 2, 1, 7, 5, 1, 0);
      TcpState: array[0..11] of string[13] = ('未知状态',
        '已经结束',
        '监听状态',
        'SYN_SENT',
        'SEN_RECEIVED',
        '已经建立',
        'FIN_WAIT',
        'FIN_WAIT2',
        '结束等待',
        '正在结束',
        'LAST_ACK',
        '超时等待');
      M_CREATESOCKETERROR = '创建Socket失败!';
      M_TCPUDP = '双击获得详细信息';
    var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.GetTcpUdpInfo(); //Get the tcp/udp info
    var
      TcpInfoTable, UdpInfoTable: TTcpInfo;
      hTrapEvent: THandle;
      hIdentifier, Oid: TAsnObjectIdentifier;
      VarBindList: TSnmpVarBindList;
      VarBind: TSnmpVarBind;
      errorStatus, errorIndex: TAsnInteger32;
      currentEntry, newEntry: PTcpInfo;
      currentIndex: UINT;
      localaddr, localport, remoteaddr, remoteport: string;
    begin
      if not SnmpExtensionInit(GetTickCount, @hTrapEvent, @hIdentifier) then Exit;
         { TCP connections }
      FillChar(Oid, SizeOf(Oid), 0);
      FillChar(VarBindList, SizeOf(VarBindList), 0);
      FillChar(VarBind, SizeOf(VarBind), 0);
      Oid.idLength := 10;
      Oid.ids := @TcpIdentifiers;
      SnmpUtilOidAppend(@VarBind.name, @Oid);
      VarBind.value.asnType := ASN_NULL;
      VarBindList.list := @VarBind;
      VarBindList.len := 1;
      FillChar(TcpInfoTable, SizeOf(TcpInfoTable), 0);
      TcpInfoTable.prev := @TcpInfoTable;
      TcpInfoTable.next := @TcpInfoTable;
      currentIndex := 1;
      currentEntry := @TcpInfoTable;
      while True do
      begin
        if not SnmpExtensionQuery(SNMP_PDU_GETNEXT,
          @VarBindList,
          @errorStatus,
          @errorIndex) then Exit;
        if VarBind.name.idLength < 10 then Break;
        if currentIndex <> PIds(VarBind.name.ids)^[9] then
        begin
          currentEntry := TcpInfoTable.next;
          currentIndex := PIds(VarBind.name.ids)^[9];
        end;
        case currentIndex of
          1: begin
              newEntry := PTcpInfo(AllocMem(SizeOf(TTcpInfo)));
              newEntry^.prev := currentEntry;
              newEntry^.next := @TcpInfoTable;
              currentEntry^.next := newEntry;
              currentEntry := newEntry;
              currentEntry^.state := VarBind.value.number;
            end;
          2: begin
              currentEntry^.localip := (PUINT(VarBind.value.address.stream))^;
              currentEntry := currentEntry^.next;
            end;
          3: begin
              currentEntry^.localport := VarBind.value.number;
              currentEntry := currentEntry^.next;
            end;
          4: begin
              currentEntry^.remoteip := (PUINT(VarBind.value.address.stream))^;
              currentEntry := currentEntry^.next;
            end;
          5: begin
              currentEntry^.remoteport := VarBind.value.number;
              currentEntry := currentEntry^.next;
            end;
        end;
      end;
      with listview1.Items do
      begin
        BeginUpdate;
        Clear;
        EndUpdate;
      end;
      currentEntry := TcpInfoTable.next;
      while currentEntry <> @TcpInfoTable do
      begin
        localaddr := Format('%s', [GetHost(True, currentEntry^.localip)]);
        localport := Format('%s',
          [GetPort(currentEntry^.localport, 'tcp')]);
        if currentEntry^.remoteip = 0 then
          remoteaddr := Format('%s: %s',
            [GetHost(False, currentEntry^.remoteip), '0'])
        else
          remoteaddr := Format('%s',
            [GetHost(False, currentEntry^.remoteip)]);    remoteport := Format('%s',
          [GetPort(currentEntry^.remoteport, 'tcp')]);
        with ListView1.Items.Add do
        begin
          ImageIndex := 0;
          Caption := 'TCP';
          SubItems.Add(localaddr);
          SubItems.Add(localport);
          SubItems.Add(remoteaddr);
          if (currentEntry^.state = 2) then SubItems.Add('')
          else SubItems.Add(remoteport);
          SubItems.Add(TcpState[currentEntry^.state]);
        end;
        currentEntry := currentEntry^.next;
      end;
         { UDP connections }
      FillChar(Oid, SizeOf(Oid), 0);
      FillChar(VarBindList, SizeOf(VarBindList), 0);
      FillChar(VarBind, SizeOf(VarBind), 0);
      Oid.idLength := 10;
      Oid.ids := @UdpIdentifiers;
      SnmpUtilOidAppend(@VarBind.name, @Oid);
      VarBind.value.asnType := ASN_NULL;
      VarBindList.list := @VarBind;
      VarBindList.len := 1;
      FillChar(UdpInfoTable, SizeOf(UdpInfoTable), 0);
      UdpInfoTable.prev := @UdpInfoTable;
      UdpInfoTable.next := @UdpInfoTable;
      currentIndex := 1;
      currentEntry := @UdpInfoTable;
      while True do
      begin
        if not SnmpExtensionQuery(SNMP_PDU_GETNEXT,
          @VarBindList,
          @errorStatus,
          @errorIndex) then Exit;
        if VarBind.name.idLength < 10 then Break;
        if currentIndex <> PIds(VarBind.name.ids)^[9] then
        begin
          currentEntry := UdpInfoTable.next;
          currentIndex := PIds(VarBind.name.ids)^[9];
        end;
        case currentIndex of
          1: begin
              newEntry := PTcpInfo(AllocMem(SizeOf(TTcpInfo)));
              newEntry^.prev := currentEntry;
              newEntry^.next := @UdpInfoTable;
              currentEntry^.next := newEntry;
              currentEntry := newEntry;
              currentEntry^.localip := (PUINT(VarBind.value.address.stream))^;
            end;
          2: begin
              currentEntry^.localport := VarBind.value.number;
              currentEntry := currentEntry^.next;
            end;
        end;
      end;
      currentEntry := UdpInfoTable.next;
      while currentEntry <> @UdpInfoTable do
      begin
        localaddr := Format('%s',
          [GetHost(True, currentEntry^.localip)]);    localport := Format('%s', [GetPort(currentEntry^.localport, 'udp')]);
        remoteaddr := '*.*.*.*: *';
        with listview1.Items.Add do
        begin
          ImageIndex := 8;
          Caption := 'UDP';
          SubItems.Add(localaddr);
          SubItems.Add(localport);
          SubItems.Add(remoteaddr);
          SubItems.Add('*');
          SubItems.Add('');
        end;
        currentEntry := currentEntry^.next;
      end;
    end;
      

  7.   

    function TForm1.GetHost(local: Boolean; ipaddr: UINT): string;
    var
      HostEnt: PHostEnt;
      InAddr: TInAddr;
    begin
      if ipaddr = 0 then
      begin
        if (local) then
          Result := FHostName
        else
          Result := '0.0.0.0';
      end
      else
        if ipaddr = 16777343 then
        begin
          if local then
            Result := FHostName
          else
            Result := 'localhost';
        end
        else
        begin
          if local then
            Result := FHostName
          else
          begin
            Application.ProcessMessages;
            HostEnt := GetHostByAddr(@ipaddr, 4, PF_INET);
            if HostEnt <> nil then
              Result := HostEnt^.h_name
            else
            begin
              InAddr.S_addr := ipaddr;
              Result := Format('%d.%d.%d.%d',
                [Byte(InAddr.s_un_b.s_b1),
                Byte(InAddr.s_un_b.s_b2),
                  Byte(InAddr.s_un_b.s_b3),
                  Byte(InAddr.s_un_b.s_b4)]);
            end;
          end;
        end;
    end;function TForm1.GetPort(port: UINT; proto: PChar): string;
    var
      ServEnt: PServEnt;
    begin
      Application.ProcessMessages;
      ServEnt := GetServByPort(htons(port), proto);
      if ServEnt <> nil then
        Result := ServEnt^.s_name
      else
        Result := IntToStr(port);
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      GetTcpUdpInfo;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      if WSAStartup($0101, WSAData) <> 0 then   begin
        MessageDlg('不能初始化Socket!', mtError, [mbOK], 0);
        caption := M_CREATESOCKETERROR;
      end else
        GetHostName(FHostName, SizeOf(FHostName));end;end.
      

  8.   

    好!!!
    get和getnext都有了
    麻烦您把trap的也贴上吧
      

  9.   

    感谢hongqi162(失踪的月亮)!!还差一点点了(trap),大家帮帮忙吧,谢谢各位捧场!
      

  10.   

    unit Snmp;{$ALIGN ON}
    {$WEAKPACKAGEUNIT ON}
    {$MINENUMSIZE 4}interfaceuses
      Windows;(*$HPPEMIT '#include <snmp.h>'*)type
      PAsnOctetString = ^TAsnOctetString;
      TAsnOctetString = record
        stream: PChar;
        length: UINT;
        dynamic_: Boolean;
      end;
      {$EXTERNALSYM TAsnOctetString}  PAsnObjectIdentifier = ^TAsnObjectIdentifier;
      TAsnObjectIdentifier = record
        idLength: UINT;
        ids: PUINT;
      end;
      {$EXTERNALSYM TAsnObjectIdentifier}  TAsnInteger32        = LongInt;
      {$EXTERNALSYM TAsnInteger32}
      TAsnUnsigned32       = ULONG;
      {$EXTERNALSYM TAsnUnsigned32}
      TAsnCounter64        = ULARGE_INTEGER;
      {$EXTERNALSYM TAsnCounter64}
      TAsnCounter32        = TAsnUnsigned32;
      {$EXTERNALSYM TAsnCounter32}
      TAsnGauge32          = TAsnUnsigned32;
      {$EXTERNALSYM TAsnGauge32}
      TAsnTimeticks        = TAsnUnsigned32;
      {$EXTERNALSYM TAsnTimeticks}
      TAsnBits             = TAsnOctetString;
      {$EXTERNALSYM TAsnBits}
      TAsnSequence         = TAsnOctetString;
      {$EXTERNALSYM TAsnSequence}
      TAsnImplicitSequence = TAsnOctetString;
      {$EXTERNALSYM TAsnImplicitSequence}
      TAsnIPAddress        = TAsnOctetString;
      {$EXTERNALSYM TAsnIPAddress}
      TAsnNetworkAddress   = TAsnOctetString;
      {$EXTERNALSYM TAsnNetworkAddress}
      TAsnDisplayString    = TAsnOctetString;
      {$EXTERNALSYM TAsnDisplayString}
      TAsnOpaque           = TAsnOctetString;
      {$EXTERNALSYM TAsnOpaque}  PAsnAny = ^TAsnAny;
      TAsnAny = record
        asnType: Byte;
        case Integer of
          0: (number: TAsnInteger32);          // ASN_INTEGER, ASN_INTEGER32
          1: (unsigned32: TAsnUnsigned32);     // ASN_UNSIGNED32
          2: (counter64: TAsnCounter64);       // ASN_COUNTER64
          3: (string_: TAsnOctetString);       // ASN_OCTETSTRING
          4: (bits: TAsnBits);                 // ASN_BITS
          5: (object_: TAsnObjectIdentifier);  // ASN_OBJECTIDENTIFIER
          6: (sequence: TAsnSequence);         // ASN_SEQUENCE
          7: (address: TAsnIPAddress);         // ASN_IPADDRESS
          8: (counter: TAsnCounter32);         // ASN_COUNTER32
          9: (gauge: TAsnGauge32);             // ASN_GAUGE32
         10: (ticks: TAsnTimeticks);           // ASN_TIMETICKS
         11: (arbitrary: TAsnOpaque);          // ASN_OPAQUE
      end;
      {$EXTERNALSYM TAsnAny}  TAsnObjectName = TAsnObjectIdentifier;
      {$EXTERNALSYM TAsnObjectName}
      TAsnObjectSyntax = TAsnAny;
      {$EXTERNALSYM TAsnObjectSyntax}  PSnmpVarBind = ^TSnmpVarBind;
      TSnmpVarBind = record
        name: TAsnObjectName;
        value: TAsnObjectSyntax;
      end;
      {$EXTERNALSYM TSnmpVarBind}  PSnmpVarBindList = ^TSnmpVarBindList;
      TSnmpVarBindList = record
        list: PSnmpVarBind;
        len: UINT;
      end;
      {$EXTERNALSYM TSnmpVarBindList}const{$IFNDEF _INC_WINSNMP}{ ASN/BER Base Types }  ASN_UNIVERSAL                   = $00;
      {$EXTERNALSYM ASN_UNIVERSAL}
      ASN_APPLICATION                 = $40;
      {$EXTERNALSYM ASN_APPLICATION}
      ASN_CONTEXT                     = $80;
      {$EXTERNALSYM ASN_CONTEXT}
      ASN_PRIVATE                     = $C0;
      {$EXTERNALSYM ASN_PRIVATE}  ASN_PRIMITIVE                   = $00;
      {$EXTERNALSYM ASN_PRIMITIVE}
      ASN_CONSTRUCTOR                 = $20;
      {$EXTERNALSYM ASN_CONSTRUCTOR}{ PDU Type Values }  SNMP_PDU_GET                    = (ASN_CONTEXT or ASN_CONSTRUCTOR or $0);
      {$EXTERNALSYM SNMP_PDU_GET}
      SNMP_PDU_GETNEXT                = (ASN_CONTEXT or ASN_CONSTRUCTOR or $1);
      {$EXTERNALSYM SNMP_PDU_GETNEXT}
      SNMP_PDU_RESPONSE               = (ASN_CONTEXT or ASN_CONSTRUCTOR or $2);
      {$EXTERNALSYM SNMP_PDU_RESPONSE}
      SNMP_PDU_SET                    = (ASN_CONTEXT or ASN_CONSTRUCTOR or $3);
      {$EXTERNALSYM SNMP_PDU_SET}
      SNMP_PDU_V1TRAP                 = (ASN_CONTEXT or ASN_CONSTRUCTOR or $4);
      {$EXTERNALSYM SNMP_PDU_V1TRAP}
      SNMP_PDU_GETBULK                = (ASN_CONTEXT or ASN_CONSTRUCTOR or $5);
      {$EXTERNALSYM SNMP_PDU_GETBULK}
      SNMP_PDU_INFORM                 = (ASN_CONTEXT or ASN_CONSTRUCTOR or $6);
      {$EXTERNALSYM SNMP_PDU_INFORM}
      SNMP_PDU_TRAP                   = (ASN_CONTEXT or ASN_CONSTRUCTOR or $7);
      {$EXTERNALSYM SNMP_PDU_TRAP}{$ENDIF _INC_WINSNMP}{ SNMP Simple Syntax Values }  ASN_INTEGER                     = (ASN_UNIVERSAL or ASN_PRIMITIVE or $02);
      {$EXTERNALSYM ASN_INTEGER}
      ASN_BITS                        = (ASN_UNIVERSAL or ASN_PRIMITIVE or $03);
      {$EXTERNALSYM ASN_BITS}
      ASN_OCTETSTRING                 = (ASN_UNIVERSAL or ASN_PRIMITIVE or $04);
      {$EXTERNALSYM ASN_OCTETSTRING}
      ASN_NULL                        = (ASN_UNIVERSAL or ASN_PRIMITIVE or $05);
      {$EXTERNALSYM ASN_NULL}
      ASN_OBJECTIDENTIFIER            = (ASN_UNIVERSAL or ASN_PRIMITIVE or $06);
      {$EXTERNALSYM ASN_OBJECTIDENTIFIER}
      ASN_INTEGER32                   = ASN_INTEGER;
      {$EXTERNALSYM ASN_INTEGER32}{ SNMP Constructor Syntax Values }  ASN_SEQUENCE                    = (ASN_UNIVERSAL or ASN_CONSTRUCTOR or $10);
      {$EXTERNALSYM ASN_SEQUENCE}
      ASN_SEQUENCEOF                  = ASN_SEQUENCE;
      {$EXTERNALSYM ASN_SEQUENCEOF}{ SNMP Application Syntax Values }  ASN_IPADDRESS                   = (ASN_APPLICATION or ASN_PRIMITIVE or $00);
      {$EXTERNALSYM ASN_IPADDRESS}
      ASN_COUNTER32                   = (ASN_APPLICATION or ASN_PRIMITIVE or $01);
      {$EXTERNALSYM ASN_COUNTER32}
      ASN_GAUGE32                     = (ASN_APPLICATION or ASN_PRIMITIVE or $02);
      {$EXTERNALSYM ASN_GAUGE32}
      ASN_TIMETICKS                   = (ASN_APPLICATION or ASN_PRIMITIVE or $03);
      {$EXTERNALSYM ASN_TIMETICKS}
      ASN_OPAQUE                      = (ASN_APPLICATION or ASN_PRIMITIVE or $04);
      {$EXTERNALSYM ASN_OPAQUE}
      ASN_COUNTER64                   = (ASN_APPLICATION or ASN_PRIMITIVE or $06);
      {$EXTERNALSYM ASN_COUNTER64}
      ASN_UNSIGNED32                  = (ASN_APPLICATION or ASN_PRIMITIVE or $07);
      {$EXTERNALSYM ASN_UNSIGNED32}{ SNMP Exception Conditions }  SNMP_EXCEPTION_NOSUCHOBJECT     = (ASN_CONTEXT or ASN_PRIMITIVE or $00);
      {$EXTERNALSYM SNMP_EXCEPTION_NOSUCHOBJECT}
      SNMP_EXCEPTION_NOSUCHINSTANCE   = (ASN_CONTEXT or ASN_PRIMITIVE or $01);
      {$EXTERNALSYM SNMP_EXCEPTION_NOSUCHINSTANCE}
      SNMP_EXCEPTION_ENDOFMIBVIEW     = (ASN_CONTEXT or ASN_PRIMITIVE or $02);
      {$EXTERNALSYM SNMP_EXCEPTION_ENDOFMIBVIEW}
      

  11.   

    { SNMP Request Types (used in SnmpExtensionQueryEx) }  SNMP_EXTENSION_GET              = SNMP_PDU_GET;
      {$EXTERNALSYM SNMP_EXTENSION_GET}
      SNMP_EXTENSION_GET_NEXT         = SNMP_PDU_GETNEXT;
      {$EXTERNALSYM SNMP_EXTENSION_GET_NEXT}
      SNMP_EXTENSION_GET_BULK         = SNMP_PDU_GETBULK;
      {$EXTERNALSYM SNMP_EXTENSION_GET_BULK}
      SNMP_EXTENSION_SET_TEST         = (ASN_PRIVATE or ASN_CONSTRUCTOR or $0);
      {$EXTERNALSYM SNMP_EXTENSION_SET_TEST}
      SNMP_EXTENSION_SET_COMMIT       = SNMP_PDU_SET;
      {$EXTERNALSYM SNMP_EXTENSION_SET_COMMIT}
      SNMP_EXTENSION_SET_UNDO         = (ASN_PRIVATE or ASN_CONSTRUCTOR or $1);
      {$EXTERNALSYM SNMP_EXTENSION_SET_UNDO}
      SNMP_EXTENSION_SET_CLEANUP      = (ASN_PRIVATE or ASN_CONSTRUCTOR or $2);
      {$EXTERNALSYM SNMP_EXTENSION_SET_CLEANUP}{ SNMP Error Codes }  SNMP_ERRORSTATUS_NOERROR                    = 0;
      {$EXTERNALSYM SNMP_ERRORSTATUS_NOERROR}
      SNMP_ERRORSTATUS_TOOBIG                     = 1;
      {$EXTERNALSYM SNMP_ERRORSTATUS_TOOBIG}
      SNMP_ERRORSTATUS_NOSUCHNAME                 = 2;
      {$EXTERNALSYM SNMP_ERRORSTATUS_NOSUCHNAME}
      SNMP_ERRORSTATUS_BADVALUE                   = 3;
      {$EXTERNALSYM SNMP_ERRORSTATUS_BADVALUE}
      SNMP_ERRORSTATUS_READONLY                   = 4;
      {$EXTERNALSYM SNMP_ERRORSTATUS_READONLY}
      SNMP_ERRORSTATUS_GENERR                     = 5;
      {$EXTERNALSYM SNMP_ERRORSTATUS_GENERR}
      SNMP_ERRORSTATUS_NOACCESS                   = 6;
      {$EXTERNALSYM SNMP_ERRORSTATUS_NOACCESS}
      SNMP_ERRORSTATUS_WRONGTYPE                  = 7;
      {$EXTERNALSYM SNMP_ERRORSTATUS_WRONGTYPE}
      SNMP_ERRORSTATUS_WRONGLENGTH                = 8;
      {$EXTERNALSYM SNMP_ERRORSTATUS_WRONGLENGTH}
      SNMP_ERRORSTATUS_WRONGENCODING              = 9;
      {$EXTERNALSYM SNMP_ERRORSTATUS_WRONGENCODING}
      SNMP_ERRORSTATUS_WRONGVALUE                 = 10;
      {$EXTERNALSYM SNMP_ERRORSTATUS_WRONGVALUE}
      SNMP_ERRORSTATUS_NOCREATION                 = 11;
      {$EXTERNALSYM SNMP_ERRORSTATUS_NOCREATION}
      SNMP_ERRORSTATUS_INCONSISTENTVALUE          = 12;
      {$EXTERNALSYM SNMP_ERRORSTATUS_INCONSISTENTVALUE}
      SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE        = 13;
      {$EXTERNALSYM SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE}
      SNMP_ERRORSTATUS_COMMITFAILED               = 14;
      {$EXTERNALSYM SNMP_ERRORSTATUS_COMMITFAILED}
      SNMP_ERRORSTATUS_UNDOFAILED                 = 15;
      {$EXTERNALSYM SNMP_ERRORSTATUS_UNDOFAILED}
      SNMP_ERRORSTATUS_AUTHORIZATIONERROR         = 16;
      {$EXTERNALSYM SNMP_ERRORSTATUS_AUTHORIZATIONERROR}
      SNMP_ERRORSTATUS_NOTWRITABLE                = 17;
      {$EXTERNALSYM SNMP_ERRORSTATUS_NOTWRITABLE}
      SNMP_ERRORSTATUS_INCONSISTENTNAME           = 18;
      {$EXTERNALSYM SNMP_ERRORSTATUS_INCONSISTENTNAME}{ SNMPv1 Trap Types }  SNMP_GENERICTRAP_COLDSTART                  = 0;
      {$EXTERNALSYM SNMP_GENERICTRAP_COLDSTART}
      SNMP_GENERICTRAP_WARMSTART                  = 1;
      {$EXTERNALSYM SNMP_GENERICTRAP_WARMSTART}
      SNMP_GENERICTRAP_LINKDOWN                   = 2;
      {$EXTERNALSYM SNMP_GENERICTRAP_LINKDOWN}
      SNMP_GENERICTRAP_LINKUP                     = 3;
      {$EXTERNALSYM SNMP_GENERICTRAP_LINKUP}
      SNMP_GENERICTRAP_AUTHFAILURE                = 4;
      {$EXTERNALSYM SNMP_GENERICTRAP_AUTHFAILURE}
      SNMP_GENERICTRAP_EGPNEIGHLOSS               = 5;
      {$EXTERNALSYM SNMP_GENERICTRAP_EGPNEIGHLOSS}
      SNMP_GENERICTRAP_ENTERSPECIFIC              = 6;
      {$EXTERNALSYM SNMP_GENERICTRAP_ENTERSPECIFIC}{ SNMP Access Types }  SNMP_ACCESS_NONE                            = 0;
      {$EXTERNALSYM SNMP_ACCESS_NONE}
      SNMP_ACCESS_NOTIFY                          = 1;
      {$EXTERNALSYM SNMP_ACCESS_NOTIFY}
      SNMP_ACCESS_READ_ONLY                       = 2;
      {$EXTERNALSYM SNMP_ACCESS_READ_ONLY}
      SNMP_ACCESS_READ_WRITE                      = 3;
      {$EXTERNALSYM SNMP_ACCESS_READ_WRITE}
      SNMP_ACCESS_READ_CREATE                     = 4;
      {$EXTERNALSYM SNMP_ACCESS_READ_CREATE}{ SNMP API Return Code Definitions }type
      SNMPAPI                                     = Integer;
      {$EXTERNALSYM SNMPAPI}
    const
      SNMPAPI_NOERROR                             = True;
      {$EXTERNALSYM SNMPAPI_NOERROR}
      SNMPAPI_ERROR                               = False;
      {$EXTERNALSYM SNMPAPI_ERROR}{ SNMP Extension API Type Definitions }type
      TSnmpExtensionInit = function (dwUptimeReference: DWORD; var phSubagentTrapEvent: THandle;
        var pFirstSupportedRegion: PAsnObjectIdentifier): Boolean; stdcall;  TSnmpExtensionInitEx = function (var pNextSupportedRegion: PAsnObjectIdentifier): Boolean; stdcall;  TSnmpExtensionMonitor = function (pAgentMgmtData: Pointer): Boolean; stdcall;  TSnmpExtensionQuery = function (bPduType: Byte; var pVarBindList: TSnmpVarBindList;
        var pErrorStatus: TAsnInteger32; var pErrorIndex: TAsnInteger32): Boolean; stdcall;  TSnmpExtensionQueryEx = function (nRequestType: UINT; nTransactionId: UINT; var pVarBindList: PSnmpVarBindList;
        var pContextInfo: PAsnOctetString; var pErrorStatus: TAsnInteger32; var pErrorIndex: TAsnInteger32): Boolean; stdcall;  TSnmpExtensionTrap = function (pEnterpriseOid: PAsnObjectIdentifier; var pGenericTrapId: TAsnInteger32;
         var pSpecificTrapId: TAsnInteger32; var pTimeStamp: TAsnTimeticks; var pVarBindList: PSnmpVarBindList): Boolean; stdcall;  TSnmpExtensionClose = procedure; stdcall;
      

  12.   

    { SNMP API Prototypes }function SnmpUtilOidCpy(pOidDst: PAsnObjectIdentifier; pOidSrc: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOidCpy}
    function SnmpUtilOidAppend(pOidDst: PAsnObjectIdentifier; pOidSrc: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOidAppend}
    function SnmpUtilOidNCmp(pOid1, pOid2: PAsnObjectIdentifier; nSubIds: UINT): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOidNCmp}
    function SnmpUtilOidCmp(pOid1, pOid2: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOidCmp}
    procedure SnmpUtilOidFree(pOid: TAsnObjectIdentifier); stdcall;
    {$EXTERNALSYM SnmpUtilOidFree}
    function SnmpUtilOctetsCmp(pOctets1, pOctets2: PAsnOctetString): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOctetsCmp}
    function SnmpUtilOctetsNCmp(pOctets1, pOctets2: PAsnOctetString; nChars: UINT): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOctetsNCmp}
    function SnmpUtilOctetsCpy(pOctetsDst, pOctetsSrc: PAsnOctetString): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilOctetsCpy}
    procedure SnmpUtilOctetsFree(pOctets: PAsnOctetString); stdcall;
    {$EXTERNALSYM SnmpUtilOctetsFree}
    function SnmpUtilAsnAnyCpy(pAnyDst, pAnySrc: PAsnAny): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilAsnAnyCpy}
    procedure SnmpUtilAsnAnyFree(pAny: PAsnAny); stdcall;
    {$EXTERNALSYM SnmpUtilAsnAnyFree}
    function SnmpUtilVarBindCpy(pVbDst: PSnmpVarBind; pVbSrc: PSnmpVarBind): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilVarBindCpy}
    procedure SnmpUtilVarBindFree(pVb: PSnmpVarBind); stdcall;
    {$EXTERNALSYM SnmpUtilVarBindFree}
    function SnmpUtilVarBindListCpy(pVblDst: PSnmpVarBindList; pVblSrc: PSnmpVarBindList): SNMPAPI; stdcall;
    {$EXTERNALSYM SnmpUtilVarBindListCpy}
    procedure SnmpUtilVarBindListFree(pVbl: PSnmpVarBindList); stdcall;
    {$EXTERNALSYM SnmpUtilVarBindListFree}
    procedure SnmpUtilMemFree(pMem: Pointer); stdcall;
    {$EXTERNALSYM SnmpUtilMemFree}
    function SnmpUtilMemAlloc(nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SnmpUtilMemAlloc}
    function SnmpUtilMemReAlloc(pMem: Pointer; nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SnmpUtilMemReAlloc}
    function SnmpUtilOidToA(Oid: PAsnObjectIdentifier): PChar; stdcall;
    {$EXTERNALSYM SnmpUtilOidToA}
    function SnmpUtilIdsToA(Ids: PUINT; IdLength: UINT): PChar; stdcall;
    {$EXTERNALSYM SnmpUtilIdsToA}
    procedure SnmpUtilPrintOid(Oid: PAsnObjectIdentifier); stdcall;
    {$EXTERNALSYM SnmpUtilPrintOid}
    procedure SnmpUtilPrintAsnAny(pAny: PAsnAny); stdcall;
    {$EXTERNALSYM SnmpUtilPrintAsnAny}
    function SnmpSvcGetUptime: DWORD; stdcall;
    {$EXTERNALSYM SnmpSvcGetUptime}
    procedure SnmpSvcSetLogLevel(nLogLevel: Integer); stdcall;
    {$EXTERNALSYM SnmpSvcSetLogLevel}
    procedure SnmpSvcSetLogType(nLogType: Integer); stdcall;
    {$EXTERNALSYM SnmpSvcSetLogType}{ SNMP Debugging Definitions }const
      SNMP_LOG_SILENT                 = $0;
      {$EXTERNALSYM SNMP_LOG_SILENT}
      SNMP_LOG_FATAL                  = $1;
      {$EXTERNALSYM SNMP_LOG_FATAL}
      SNMP_LOG_ERROR                  = $2;
      {$EXTERNALSYM SNMP_LOG_ERROR}
      SNMP_LOG_WARNING                = $3;
      {$EXTERNALSYM SNMP_LOG_WARNING}
      SNMP_LOG_TRACE                  = $4;
      {$EXTERNALSYM SNMP_LOG_TRACE}
      SNMP_LOG_VERBOSE                = $5;
      {$EXTERNALSYM SNMP_LOG_VERBOSE}  SNMP_OUTPUT_TO_CONSOLE          = $1;
      {$EXTERNALSYM SNMP_OUTPUT_TO_CONSOLE}
      SNMP_OUTPUT_TO_LOGFILE          = $2;
      {$EXTERNALSYM SNMP_OUTPUT_TO_LOGFILE}
      SNMP_OUTPUT_TO_EVENTLOG         = $4;  // no longer supported
      {$EXTERNALSYM SNMP_OUTPUT_TO_EVENTLOG}
      SNMP_OUTPUT_TO_DEBUGGER         = $8;
      {$EXTERNALSYM SNMP_OUTPUT_TO_DEBUGGER}{ SNMP Debugging Prototypes }procedure SnmpUtilDbgPrint(nLogLevel: Integer; szFormat: PChar); stdcall;
    {$EXTERNALSYM SnmpUtilDbgPrint}{ Miscellaneous definitions }const
      DEFINE_NULLOID: TAsnObjectIdentifier = (idLength: 0; ids: nil);
      {$EXTERNALSYM DEFINE_NULLOID}
      DEFINE_NULLOCTETS: TAsnOctetString = (stream: nil; length: 0; dynamic_: False);
      {$EXTERNALSYM DEFINE_NULLOCTETS}  DEFAULT_SNMP_PORT_UDP       = 161;
      {$EXTERNALSYM DEFAULT_SNMP_PORT_UDP}
      DEFAULT_SNMP_PORT_IPX       = 36879;
      {$EXTERNALSYM DEFAULT_SNMP_PORT_IPX}
      DEFAULT_SNMPTRAP_PORT_UDP   = 162;
      {$EXTERNALSYM DEFAULT_SNMPTRAP_PORT_UDP}
      DEFAULT_SNMPTRAP_PORT_IPX   = 36880;
      {$EXTERNALSYM DEFAULT_SNMPTRAP_PORT_IPX}
      SNMP_MAX_OID_LEN            = 128;
      {$EXTERNALSYM SNMP_MAX_OID_LEN}{ API Error Code Definitions }  SNMP_MEM_ALLOC_ERROR            = 1;
      {$EXTERNALSYM SNMP_MEM_ALLOC_ERROR}
      SNMP_BERAPI_INVALID_LENGTH      = 10;
      {$EXTERNALSYM SNMP_BERAPI_INVALID_LENGTH}
      SNMP_BERAPI_INVALID_TAG         = 11;
      {$EXTERNALSYM SNMP_BERAPI_INVALID_TAG}
      SNMP_BERAPI_OVERFLOW            = 12;
      {$EXTERNALSYM SNMP_BERAPI_OVERFLOW}
      SNMP_BERAPI_SHORT_BUFFER        = 13;
      {$EXTERNALSYM SNMP_BERAPI_SHORT_BUFFER}
      SNMP_BERAPI_INVALID_OBJELEM     = 14;
      {$EXTERNALSYM SNMP_BERAPI_INVALID_OBJELEM}
      SNMP_PDUAPI_UNRECOGNIZED_PDU    = 20;
      {$EXTERNALSYM SNMP_PDUAPI_UNRECOGNIZED_PDU}
      SNMP_PDUAPI_INVALID_ES          = 21;
      {$EXTERNALSYM SNMP_PDUAPI_INVALID_ES}
      SNMP_PDUAPI_INVALID_GT          = 22;
      {$EXTERNALSYM SNMP_PDUAPI_INVALID_GT}
      SNMP_AUTHAPI_INVALID_VERSION    = 30;
      {$EXTERNALSYM SNMP_AUTHAPI_INVALID_VERSION}
      SNMP_AUTHAPI_INVALID_MSG_TYPE   = 31;
      {$EXTERNALSYM SNMP_AUTHAPI_INVALID_MSG_TYPE}
      SNMP_AUTHAPI_TRIV_AUTH_FAILED   = 32;
      {$EXTERNALSYM SNMP_AUTHAPI_TRIV_AUTH_FAILED}
      

  13.   

    { Support for old definitions (support disabled via SNMPSTRICT) }{$IFNDEF SNMPSTRICT}function SNMP_oidcpy(pOidDst: PAsnObjectIdentifier; pOidSrc: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_oidcpy}
    function SNMP_oidappend(pOidDst: PAsnObjectIdentifier; pOidSrc: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_oidappend}
    function SNMP_oidncmp(pOid1, pOid2: PAsnObjectIdentifier; nSubIds: UINT): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_oidncmp}
    function SNMP_oidcmp(pOid1, pOid2: PAsnObjectIdentifier): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_oidcmp}
    procedure SNMP_oidfree(pOid: TAsnObjectIdentifier); stdcall;
    {$EXTERNALSYM SNMP_oidfree}function SNMP_CopyVarBind(pVbDst: PSnmpVarBind; pVbSrc: PSnmpVarBind): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_CopyVarBind}
    procedure SNMP_FreeVarBind(pVb: PSnmpVarBind); stdcall;
    {$EXTERNALSYM SNMP_FreeVarBind}
    function SNMP_CopyVarBindList(pVblDst: PSnmpVarBindList; pVblSrc: PSnmpVarBindList): SNMPAPI; stdcall;
    {$EXTERNALSYM SNMP_CopyVarBindList}
    procedure SNMP_FreeVarBindList(pVbl: PSnmpVarBindList); stdcall;
    {$EXTERNALSYM SNMP_FreeVarBindList}procedure SNMP_printany(pAny: PAsnAny); stdcall;
    {$EXTERNALSYM SNMP_printany}procedure SNMP_free(pMem: Pointer); stdcall;
    {$EXTERNALSYM SNMP_free}
    function SNMP_malloc(nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SNMP_malloc}
    function SNMP_realloc(pMem: Pointer; nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SNMP_realloc}procedure SNMP_DBG_free(pMem: Pointer); stdcall;
    {$EXTERNALSYM SNMP_DBG_free}
    function SNMP_DBG_malloc(nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SNMP_DBG_malloc}
    function SNMP_DBG_realloc(pMem: Pointer; nBytes: UINT): Pointer; stdcall;
    {$EXTERNALSYM SNMP_DBG_realloc}const
      ASN_RFC1155_IPADDRESS           = ASN_IPADDRESS;
      {$EXTERNALSYM ASN_RFC1155_IPADDRESS}
      ASN_RFC1155_COUNTER             = ASN_COUNTER32;
      {$EXTERNALSYM ASN_RFC1155_COUNTER}
      ASN_RFC1155_GAUGE               = ASN_GAUGE32;
      {$EXTERNALSYM ASN_RFC1155_GAUGE}
      ASN_RFC1155_TIMETICKS           = ASN_TIMETICKS;
      {$EXTERNALSYM ASN_RFC1155_TIMETICKS}
      ASN_RFC1155_OPAQUE              = ASN_OPAQUE;
      {$EXTERNALSYM ASN_RFC1155_OPAQUE}
      ASN_RFC1213_DISPSTRING          = ASN_OCTETSTRING;
      {$EXTERNALSYM ASN_RFC1213_DISPSTRING}  ASN_RFC1157_GETREQUEST          = SNMP_PDU_GET;
      {$EXTERNALSYM ASN_RFC1157_GETREQUEST}
      ASN_RFC1157_GETNEXTREQUEST      = SNMP_PDU_GETNEXT;
      {$EXTERNALSYM ASN_RFC1157_GETNEXTREQUEST}
      ASN_RFC1157_GETRESPONSE         = SNMP_PDU_RESPONSE;
      {$EXTERNALSYM ASN_RFC1157_GETRESPONSE}
      ASN_RFC1157_SETREQUEST          = SNMP_PDU_SET;
      {$EXTERNALSYM ASN_RFC1157_SETREQUEST}
      ASN_RFC1157_TRAP                = SNMP_PDU_V1TRAP;
      {$EXTERNALSYM ASN_RFC1157_TRAP}  ASN_CONTEXTSPECIFIC             = ASN_CONTEXT;
      {$EXTERNALSYM ASN_CONTEXTSPECIFIC}
      ASN_PRIMATIVE                   = ASN_PRIMITIVE;
      {$EXTERNALSYM ASN_PRIMATIVE}type
      RFC1157VarBindList              = TSnmpVarBindList;
      {$EXTERNALSYM RFC1157VarBindList}
      RFC1157VarBind                  = TSnmpVarBind;
      {$EXTERNALSYM RFC1157VarBind}
      TAsnInteger                     = TAsnInteger32;
      {$EXTERNALSYM TAsnInteger}
      TAsnCounter                     = TAsnCounter32;
      {$EXTERNALSYM TAsnCounter}
      TAsnGauge                       = TAsnGauge32;
      {$EXTERNALSYM TAsnGauge}{$ENDIF SNMPSTRICT}{ SNMP Extension API Prototypes }var
      SnmpExtensionInit: TSnmpExtensionInit;
      {$EXTERNALSYM SnmpExtensionInit}
      SnmpExtensionInitEx: TSnmpExtensionInitEx;
      {$EXTERNALSYM SnmpExtensionInitEx}
      SnmpExtensionMonitor: TSnmpExtensionMonitor;
      {$EXTERNALSYM SnmpExtensionMonitor}
      SnmpExtensionQuery: TSnmpExtensionQuery;
      {$EXTERNALSYM SnmpExtensionQuery}
      SnmpExtensionQueryEx: TSnmpExtensionQueryEx;
      {$EXTERNALSYM SnmpExtensionQueryEx}
      SnmpExtensionTrap: TSnmpExtensionTrap;
      {$EXTERNALSYM SnmpExtensionTrap}
      SnmpExtensionClose: TSnmpExtensionClose;
      {$EXTERNALSYM SnmpExtensionClose}function SnmpExtensionLoaded: Boolean;
    function LoadSnmpExtension(const LibName: string): Boolean;
    function UnloadSnmpExtension: Boolean;implementationconst
      snmpapilib = 'snmpapi.dll';var
      LibHandle: THandle;function SnmpExtensionLoaded: Boolean;
    begin
      Result := LibHandle <> 0;
    end;function LoadSnmpExtension(const LibName: string): Boolean;
    begin
      Result := UnloadSnmpExtension;
      if Result then
      begin
        LibHandle := LoadLibrary(PChar(LibName));
        Result := SnmpExtensionLoaded;
        if Result then
        begin
          @SnmpExtensionInit := GetProcAddress(LibHandle, 'SnmpExtensionInit');
          @SnmpExtensionInitEx := GetProcAddress(LibHandle, 'SnmpExtensionInitEx');
          @SnmpExtensionMonitor := GetProcAddress(LibHandle, 'SnmpExtensionMonitor');
          @SnmpExtensionQuery := GetProcAddress(LibHandle, 'SnmpExtensionQuery');
          @SnmpExtensionQueryEx := GetProcAddress(LibHandle, 'SnmpExtensionQueryEx');
          @SnmpExtensionTrap := GetProcAddress(LibHandle, 'SnmpExtensionTrap');
          @SnmpExtensionClose := GetProcAddress(LibHandle, 'SnmpExtensionClose');
          Result := Assigned(SnmpExtensionInit);
          if not Result then
            UnloadSnmpExtension;
        end;
      end;
    end;function UnloadSnmpExtension: Boolean;
    begin
      if SnmpExtensionLoaded then
      begin
        Result := FreeLibrary(LibHandle);
        LibHandle := 0;
        @SnmpExtensionInit := nil;
        @SnmpExtensionInitEx := nil;
        @SnmpExtensionMonitor := nil;
        @SnmpExtensionQuery := nil;
        @SnmpExtensionQueryEx := nil;
        @SnmpExtensionTrap := nil;
        @SnmpExtensionClose := nil;
      end
      else
        Result := True;
    end;
      

  14.   

    function SnmpUtilOidCpy; external snmpapilib name 'SnmpUtilOidCpy';
    function SnmpUtilOidAppend; external snmpapilib name 'SnmpUtilOidAppend';
    function SnmpUtilOidNCmp; external snmpapilib name 'SnmpUtilOidNCmp';
    function SnmpUtilOidCmp; external snmpapilib name 'SnmpUtilOidCmp';
    procedure SnmpUtilOidFree; external snmpapilib name 'SnmpUtilOidFree';
    function SnmpUtilOctetsCmp; external snmpapilib name 'SnmpUtilOctetsCmp';
    function SnmpUtilOctetsNCmp; external snmpapilib name 'SnmpUtilOctetsNCmp';
    function SnmpUtilOctetsCpy; external snmpapilib name 'SnmpUtilOctetsCpy';
    procedure SnmpUtilOctetsFree; external snmpapilib name 'SnmpUtilOctetsFree';
    function SnmpUtilAsnAnyCpy; external snmpapilib name 'SnmpUtilAsnAnyCpy';
    procedure SnmpUtilAsnAnyFree; external snmpapilib name 'SnmpUtilAsnAnyFree';
    function SnmpUtilVarBindCpy; external snmpapilib name 'SnmpUtilVarBindCpy';
    procedure SnmpUtilVarBindFree; external snmpapilib name 'SnmpUtilVarBindFree';
    function SnmpUtilVarBindListCpy; external snmpapilib name 'SnmpUtilVarBindListCpy';
    procedure SnmpUtilVarBindListFree; external snmpapilib name 'SnmpUtilVarBindListFree';
    procedure SnmpUtilMemFree; external snmpapilib name 'SnmpUtilMemFree';
    function SnmpUtilMemAlloc; external snmpapilib name 'SnmpUtilMemAlloc';
    function SnmpUtilMemReAlloc; external snmpapilib name 'SnmpUtilMemReAlloc';
    function SnmpUtilOidToA; external snmpapilib name 'SnmpUtilOidToA';
    function SnmpUtilIdsToA; external snmpapilib name 'SnmpUtilIdsToA';
    procedure SnmpUtilPrintOid; external snmpapilib name 'SnmpUtilPrintOid';
    procedure SnmpUtilPrintAsnAny; external snmpapilib name 'SnmpUtilPrintAsnAny';
    function SnmpSvcGetUptime; external snmpapilib name 'SnmpSvcGetUptime';
    procedure SnmpSvcSetLogLevel; external snmpapilib name 'SnmpSvcSetLogLevel';
    procedure SnmpSvcSetLogType; external snmpapilib name 'SnmpSvcSetLogType';
    procedure SnmpUtilDbgPrint; external snmpapilib name 'SnmpUtilDbgPrint';{$IFNDEF SNMPSTRICT}
    function SNMP_oidcpy; external snmpapilib name 'SnmpUtilOidCpy';
    function SNMP_oidappend; external snmpapilib name 'SnmpUtilOidAppend';
    function SNMP_oidncmp; external snmpapilib name 'SnmpUtilOidNCmp';
    function SNMP_oidcmp; external snmpapilib name 'SnmpUtilOidCmp';
    procedure SNMP_oidfree; external snmpapilib name 'SnmpUtilOidFree';
    function SNMP_CopyVarBind; external snmpapilib name 'SnmpUtilVarBindCpy';
    procedure SNMP_FreeVarBind; external snmpapilib name 'SnmpUtilVarBindFree';
    function SNMP_CopyVarBindList; external snmpapilib name 'SnmpUtilVarBindListCpy';
    procedure SNMP_FreeVarBindList; external snmpapilib name 'SnmpUtilVarBindListFree';
    procedure SNMP_printany; external snmpapilib name 'SnmpUtilPrintAsnAny';
    procedure SNMP_free; external snmpapilib name 'SnmpUtilMemFree';
    function SNMP_malloc; external snmpapilib name 'SnmpUtilMemAlloc';
    function SNMP_realloc; external snmpapilib name 'SnmpUtilMemReAlloc';
    procedure SNMP_DBG_free; external snmpapilib name 'SnmpUtilMemFree';
    function SNMP_DBG_malloc; external snmpapilib name 'SnmpUtilMemAlloc';
    function SNMP_DBG_realloc; external snmpapilib name 'SnmpUtilMemReAlloc';
    {$ENDIF SNMPSTRICT}end.
      

  15.   

    还有没有trap相关例子呀,帮我贴一下
    准备结贴了,up有分谢谢大家