通过Windows API 接收 AMT UDP 广播的 Trap 事件

    最近的一个项目和Intel AMT 相关,开发操作iAMT的ASP组件,其中在接收订阅警报事件中碰到点问题,记下来,或者对朋友们有用处。
    我们知道支持iAMT的机器可以自定义事件过滤器(event filter),并指定事件过滤器是否在网络中广播事件发生的消息,如系统宕机,或者硬件故障。当指定广播消息时,我们可以通过侦听162 端口来接收事件警报消息. iAMT 广播使用SNMP 标准协议发送事件(Platform trap event). 也可以使用Windows SNMP 函数来接收 iAMT 事件,这样可以简化代码的复杂度。整个实现过程如下:

      // 开始 SNMP Trap 侦听, 如果失败一般是由于没有安装 SNMP 服务造成的,请从控制面板Windows 组件中安装SNMP 服务。
      1, SnmpMgrTrapListen (&event);

      // 等待SNMP Trap 事件产生, 如果有事件产生但又无法收到,可能是因为您使用了防火墙,请关闭防火墙或者打开 162端口.
   2, WaitForSingleObject (event, -1);

      // 得到SNMP Trap 事件内容。
      3, SnmpMgrGetTrap (AsnObjectIdentifier, AsnNetworkAddress, GenericTrap, SpecificTrap, TimeStamp, SnmpVarBindList);
     
      格式化得到的 iAMT Trap 事件内容如下:
  
          Sensor Type  = (SpecificTrap >> 16) & 0xff;
          Event Type   = (SpecificTrap >> 8) & 0xff;;
          Event Offset = SpecificTrap & 0xff;

          char * TrapData = SnmpVarBindList.list.value->asnValue.bits.stream;
          int    Length   = SnmpVarBindList.list.value->asnValue.bits.length;

          TrapData 的数据按顺序排列为:

                1, GUID              = 16 bytes
                2, Sequence Cookie   = 2 bytes
                3, Local Timestamp   = 4 bytes
                4, UTC Offset        = 2 bytes
                5, Trap Source Type  = 1 byte
                6, Event Source Type = 1 byte
                7, Event Severity    = 1 byte
                8, Sensor Device     = 1 byte
                9, Sensor Number     = 1 byte
                10, Entity           = 1 byte
                11, Entity Instance  = 1 byte
                12, Event Data       = 8 bytes
                13, LanguageCode     = 1 byte
                14, Manufacture ID   = 4 bytes
                15, System ID        = 2 bytes
                16, OEM Custom Field = (Length - 46) bytes

     到这里事件的所有类型格式化完毕,通过这些类型可以找到相应问题产生的原因 (见 AMT 相关文档, 可到Intel 官方网站下载)
   
     另,感谢 Intel 技术支持 Lead Frenzy的帮助。

     22:49 2007-8-23 于重庆,Treeyan

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值