SNMPv3基于用户的安全模型USM及消息格式

2023-05-16

一、USM相关网址

SNMPv3使用了基于用户的安全模型USM.

  • RFC 3411 Architecture for SNMP Frameworks http://www.ietf.org/rfc/rfc3411.txt
  • RFC 3414 User-based Security Model (USM) http://www.ietf.org/rfc/rfc3414.txt

二、SNMP Entity

SNMPv3定义了新的体系结构,并在其中包含了对SNMPv1和SNMPv2c的兼容,即这个新的体系结构也适用于SNMPv1及SNMPv2c,弥补了SNMP没有完整体系结构的缺点。

在SNMPv3中,管理进程与代理统称为SNMP实体(entity)。SNMP实体由SNMP协议引擎(engine)和应用程序(application)组成。SNMP实体包含一系列模块,模块之间相互作用来提供服务。

RFC3411里面定义在一个SNMPv3 entity里面包括以下部分。

在这里插入图片描述

  1. Dispatcher
    1个SNMP entity里面只有1个Dispatcher,负责消息的收发。
  2. Message Processing Subsystem
    在SNMP-FRAMEWORK-MIB里面定义了如下几种消息处理模式
    SnmpMessageProcessingModel
    0 reserved for SNMPv1
    1 reserved for SNMPv2c
    2 reserved for SNMPv2u and SNMPv2*
    3 reserved for SNMPv3
  3. Security Subsystem
    在SNMP-FRAMEWORK-MIB里面定义了如下几种安全模式
    SnmpSecurityModel
    0 reserved for ‘any’
    1 reserved for SNMPv1
    2 reserved for SNMPv2c
    3 User-Based Security Model (USM)
    定义了如下几种安全级别
    SnmpSecurityLevel
    noAuthNoPriv(1), --无认证无加密
    authNoPriv(2), --有认证无加密
    authPriv(3) --有认证有加密
  4. Access Control Subsystem
  5. Applications包括
  • command generators, which monitor and manipulate management data,
  • command responders, which provide access to management data,
  • notification originators, which initiate asynchronous messages,
  • notification receivers, which process asynchronous messages,
  • proxy forwarders, which forward messages between entities.

三、SNMP Context

	An SNMP context, or just "context" for short, is a collection of management information accessible by an SNMP entity.

An SNMP entity potentially has access to many contexts. The combination of a contextEngineID and a contextName unambiguously identifies a context within an administrative domain.
SNMP context可以看作是管理信息的一个集合。
一个SNMP entity里面可以访问多个SNMP context。
contextEngineID和contextName结合起来识别一个特定的SNMP context。

在这里插入图片描述

四、USM

  1. Authentication Protocol
    支持HMAC-MD5-96 和 HMAC-SHA-96两种认证协议。
    *HMAC算法->http://blog.csdn.net/fw0124/article/details/8473858
    *HMAC-MD5-96表示HMAC算法使用MD5作为杂凑函数,输出结果使用前96位(MD5输出结果128)。
    *HMAC-SHA1-96表示HMAC算法使用SHA1作为杂凑函数,输出结果使用前96位(SHA1输出结果160位)。

  2. authKey
    用于HMAC认证的用户密钥。
    实际上使用的HMAC密钥是此用户密钥和engineID经过计算得出的,这个过程称为localize。

  3. Privacy Protocol
    支持CBC-DES和CFB-AES两种加密方法。
    *分组加密模式->http://blog.csdn.net/fw0124/article/details/8472560
    *CBC-DES表示使用CBC加密模式,DES加密算法。
    *CFB-AES表示使用CFB加密模式,AES加密算法。

  4. privKey
    用于加密的用户密钥。
    实际上使用的加密密钥是此用户密钥和engineID经过计算得出的,这个过程称为localize。

  5. 防止消息延迟或者重放攻击/protect against the threat of message delay or replay
    -在request里面包含msgID,response里面必须返回这个msgID,否则此reponse会被丢弃。
    -在request里面包含engineBoots和engineTime,agent会检查它们是否在150秒的时间窗口内。
    *engineBoots表示SNMP engine的reboot次数
    *engineTime表示上次reboot之后经过的秒数

  6. 时间同步/Time Synchronization
    Time synchronization, required by a non-authoritative SNMP engine in order to proceed with authentic communications, has occurred when the non-authoritative SNMP engine has obtained a local notion of the authoritative SNMP engine’s values of snmpEngineBoots and snmpEngineTime from the authoritative SNMP engine. These values must be (and remain) within the authoritative SNMP engine’s Time Window. So the local notion of the authoritative SNMP engine’s values must be kept loosely synchronized with the values stored at the authoritative SNMP engine.
    In addition to keeping a local copy of snmpEngineBoots and snmpEngineTime from the authoritative SNMP engine, a non-authoritative SNMP engine must also keep one local variable, latestReceivedEngineTime. This value records the highest value of snmpEngineTime that was received by the non-authoritative SNMP engine from the authoritative SNMP engine.
    A non-authoritative SNMP engine must keep local notions of these values (snmpEngineBoots, snmpEngineTime and latestReceivedEngineTime) for each authoritative SNMP engine with which it wishes to
    communicate. Since each authoritative SNMP engine is uniquely and unambiguously identified by its value of snmpEngineID, the non-authoritative SNMP engine may use this value as a key in order to cache its local notions of these values.

    (为了防止消息重放,延迟和重定向,每个通信中涉及的SNMP引擎之一被指定为权威SNMP引擎。 当SNMP消息包含期望响应的有效载荷(那些包含确认的类PDU [RFC3411]的消息)时,这样的消息的接收者是权威的。 当SNMP消息包含不期望响应的有效载荷(那些包含未确认类PDU [RFC3411]的消息)时,这样的消息的发送者是权威的。
    In order to protect against message replay, delay and redirection,one of the SNMP engines involved in each communication is designated to be the authoritative SNMP engine. When an SNMP message contains a payload which expects a response (those messages that contain a Confirmed Class PDU [RFC3411]), then the receiver of such messages is authoritative. When an SNMP message contains a payload which does not expect a response (those messages that contain an Unconfirmed Class PDU [RFC3411]), then the sender of such a message is authoritative.
    权威引擎ID:request及inform消息中此值为接收方引擎id。Trap及response消息中此值为发送方引擎id.)

    时间同步由non-authoritative SNMP engine发起,以获得authoritative SNMP engine的snmpEngineBoots和snmpEngineTime并存于本地,另外本地还保存latestReceivedEngineTime这个变量,它是最近一次收到authoritative SNMP engine发来的消息中的snmpEngineTime。
    对于authoritative SNMP engine,如果收到的消息中包含的engineBoots不等于自身的engineBoots,或者engineBoots相等但是收到的engineTime处于时间窗口外,也就是自身的engineTime+/-150秒之外,就会产生一个notInTimeWindow的错误,并增加usmStatsNotInTimeWindows的统计counter, 然后生成一个包含usmStatsNotInTimeWindows的report返回给调用方。
    对于non-authoritative SNMP engine,如果收到的消息中包含的engineBoots大于自身的engineBoots,或者engineBoots相等但是收到的engineTime大于latestReceivedEngineTime,那么需要更新保存于本地的engineBoots, engineTime和latestReceivedEngineTime。如果收到的消息中包含的engineBoots小于自身的engineBoots,或者engineBoots相等但是收到的engineTime小于自身的engineTime-150秒,就会认为这个消息处于时间窗口外。

五、SNMPv3 消息格式

在这里插入图片描述
在这里插入图片描述

一个SNMPv3的Message包括以下部分:

  1. msgVersion
  2. msgID
  3. msgMaxSize
    发送方支持的最大消息长度/the maximum message size supported by a sender of an SNMP message.
  4. msgFlags
    8位字段,包含3个flag,最后三位从高到低依次为 reportableFlag, privFlag, authFlag.
    reportableFlag如果设置为1,那么如果满足产生report的条件,就会返回一个report给发送方。
    所有的request(GET,SET)或者inform,reportableFlag设置为1;Response,Trap,Report中需要设置为0。
    privFlag为1表示PDU是加密的。authFlag为1表示PDU是认证的。
  5. msgSecurityModel
    0 reserved for ‘any’
    1 reserved for SNMPv1
    2 reserved for SNMPv2c
    3 User-Based Security Model (USM)
  6. msgAuthoritativeEngineID
  7. msgAuthoritativeEngineBoots
  8. msgAuthoritativeEngineTime
  9. msgUserName
  10. msgAuthenticationParameters
    12个字节的HMAC消息摘要(HMAC-MD5-96 或者 HMAC-SHA-96)
  11. msgPrivacyParameters
    用来产生DES加密算法的初始向量(IV)。
  12. contextEngineID
  13. contextName
  14. PDU
    包含了实际请求或者应答数据。
    12+13+14一起称为scopedPDU

六、SNMPv3发送和接受消息的处理过程

RFC 3414中详细的描述了这个过程。
下载SNMP4J(http://www.snmp4j.org/html/download.html)的源代码,亦可以比较清楚地看到发送和接受消息的处理过程。

  1. 发送消息
    发送消息主要的处理在org.snmp4j.security.USM.generateRequestMessage()中(此函数又调用了generateResponseMessage(),实际上的处理在这个函数中)。
    • 首先根据请求数据生成平文的PDU,在PDU头上加上contextEngineID和contextName,得到scopedPDU。
    • 其次对上面所说的SNMPv3 Message Format的1~14各部分设定相应的值,得到整个消息体,
      其中msgAuthenticationParameters的12个字节数据置为全零。
    • 再次对scopedPDU部分进行加密。
    • 最后使用HMAC算法作用在加密后的整个消息体上,生成12个字节信息摘要,替换msgAuthenticationParameters。
  2. 接收消息(接受消息和发送相反)
    接受消息主要的处理在org.snmp4j.security.USM.processIncomingMsg()中。
    • 首先把收到的消息体中msgAuthenticationParameters的12个字节数据替换为全零。
    • 其次使用HMAC算法作用在替换了msgAuthenticationParameters后的消息体上,生成12个字节信息摘要,把这个信息摘要和原始的msgAuthenticationParameters比较,如果不等,返回错误。
    • 最后解密scopedPDU。
  3. Key Localization
    用户的认证(authKey)和加密密码(privKey)不会直接使用。
    对于同一个用户的密码,通过Key Localization,用于不同的authoritative SNMP engine的密钥实际上是不一样的。
    对于认证密码,Key Localization的过程如下:
    org.snmp4j.security.AuthGeneric.passwordToKey(OctetString passwordString, byte[] engineID)
    a) 使用用户密码重复填充1个64字节块,使用此64字节块重复填充得到1M字节的数据,
    b) 使用认证算法(MD5/SHA1)作用于上面得到的1M字节的数据,得到的摘要为Ku
    c) 在snmp engine id的前后加上Ku, 然后再次使用认证算法(MD5/SHA1),得到的摘要即为localized key: Kul
    加密密码的处理过程如下:
    org.snmp4j.security.SecurityProtocols.passwordToKey(OID privProtocolID, OID authProtocolID, OctetString passwordString, byte[] engineID)
    authProtocolID和privProtocolID分别是当前用户的Authentication Protocol和Privacy Protocol.
    a) 根据authProtocolID得到当前的AuthenticationProtocol
    b) 调用org.snmp4j.security.AuthGeneric.passwordToKey(passwordString, engineID),实际上就是上面认证密码的Key Localization过程。
    c) 根据privProtocolID得到加密算法,比较加密算法要求的密钥最小/最大长度和上面得到的localized privKey的长度,
    如果过长截断,如果过短,调用privProtocol.extendShortKey()方法延长。
  4. 认证
    org.snmp4j.security.AuthGeneric.authenticate(byte[] authenticationKey, byte[] message, int messageOffset , int messageLength, ByteArrayWindow digest)
    认证实际上就是根据HMAC计算消息摘要(digest)的过程。
    传入的authenticationKey就是localized authKey.
    计算摘要的过程见HMAC算法->http://blog.csdn.net/fw0124/article/details/8473858
    注意只使用计算得到摘要的前12个字节(96位)
  5. 加密解密
    CBC-DES加密的处理在函数
    org.snmp4j.security.PrivDES.encrypt(byte[] unencryptedData, int offset, int length, byte[] encryptionKey, long engineBoots, long engineTime, DecryptParams decryptParams)
    里面。
    参数encryptionKey就是16字节的localized privKey, 它的前8个字节用来作为DES key, 因为DES只使用56 bits,每个字节的最低位实际上被丢弃。
    The first 8 octets of the 16-octet secret (private privacy key) are used as a DES key. Since DES uses only 56 bits, the Least Significant Bit in each octet is disregarded.
    CBC模式需要一个64 bit的IV(Initialization Vector)。
    encryptionKey的后8个字节用作pre-IV。
    为了让每个packet能有不同的IV, 需要对pre-IV进行salt。
    使用32-bit的snmpEngineBoots和一个32-bit的随机数一起产生一个64-bit(8字节)的salt。
    salt的前4个字节是32-bit的snmpEngineBoots,后4个字节是32-bit的随机数。
    然后salt和pre-IV进行异或运算得到IV, IV=salt XOR pre-IV。
    最后salt放入msgPrivacyParameters字段发送给接受方用来产生正确的IV进行解密。
    解密的处理在函数org.snmp4j.security.PrivDES.decrypt(byte[], int, int, byte[], long, long, DecryptParams)里面。

七、参考网址

参考链接

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SNMPv3基于用户的安全模型USM及消息格式 的相关文章

  • 论文学习--Learning High-Speed Flight in the Wild

    文章目录 Git子文链接代码运行编译环境编译步骤 可选 1 下载源码 2 先安装Open3D 3 修改Open3D的相关路径 4 开始编译 5 报错2 6 报错3 7 运行中报错 8 配置学习环境 9 下载flighemare渲染环境 运行
  • 仿真环境中生成专家轨迹

    仿真环境中生成专家轨迹 文章目录 仿真环境中生成专家轨迹简介代码运行步骤获取输入数据Reference TrajectoryEnvironment PointcloudFull Quadrotor State 方法描述输出规划轨迹 简介 本
  • 机器学习方法简介(1)--线性回归、逻辑回归、神经网络、支持向量机

    机器学习方法就是计算机根据已有的数据 xff0c 得出某个模型 xff0c 然后利用此模型预测未来的一种方法 机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程 1 回归算法 回归算法包括线性回
  • 仿真数据生成工具以及现有的仿真数据集

    现有仿真数据集 TartanAir TartanAir 是一个用AirSim生成的仿真SLAM数据集 xff0c 可以用于视觉SLAM 数据集提供 xff1a 双目 RGB 图像 xff0c 深度图像 xff0c 分割 xff0c 光流 x
  • 基于深度学习的SLAM概述

    目的 本博客总结最近看的几篇关于深度学习的SLAM以及基于深度学习的稠密重建 xff0c 简要对比记录特点 对比 年份名称类型框图前端输出地图方法特点回环2022DPVOmono VOVO每一帧的pose和paches转到3D坐标系下的3D
  • Airsim中运行OpenVINS和VINS_Fusion

    Airsim中运行OpenVINS和VINS Fusion 1 简介2 参考3 步骤3 1 编译3 2 运行3 3 运行结果3 4 相机和IMU参数配置 1 简介 本文简介在Airsim中运行OpenVINS和VINS Fusion 2 参
  • Apriltag生成

    Apriltag生成 一 单个Apriltag生成 生成单个的二维码 xff0c 下面给出30cmx30cm打印大小的生成脚本 xff0c 输入路径直接用 apriltag imgs 工程的tag36h11系列的图片即可 生成结果得到587
  • 论文学习---Learned Inertial Odometry for Autonomous Drone Racing

    总结 xff1a 文章主要介绍了仅用IMU作为输入的深度学习网络来估计相对位移 xff0c 估计的结果用于EKF更新 xff0c 可以得到较为准确的EKF估计状态 摘要 惯性里程计是敏捷无人机状态估计的一个具有吸引力的方案 单纯的使用IMU
  • 白话----之UCOS 信号量和邮箱

    总体理解 xff1a 两个任务需要共同访问一个共同的资源 xff0c 来切换或跳到不同的动作执行 这就产生信号量 两个任务 需要根据不同的按键选择 xff0c 来执行不同的动作 xff0c 产生邮箱 信号量和邮箱 我通过一个例子来学习的 希
  • 数据结构--结构体

    数据结构 https img blog csdn net 20181020104828701 watermark 2 text aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d4dWVjaGVuZw 61 61 font 5a
  • 小试牛刀爬北邮人论坛十大

    本来是为了写Alfred的work flow 不知道出了什么问题 一直都显示不了 sad 61 61 先把爬虫的代码贴这好了 好久没碰过python了 coding utf 8 author 61 39 wangxiao 39 import
  • mac安装homebrew报错 curl: (7) Failed to connect to raw.githubusercontent.com port443

    mac安装brew一直报错 xff0c 完整的报错信息如下 span class token literal property property curl span span class token operator span span c
  • C++ vector用法详解

    vector是STL的动态数组 xff0c 可以在运行中根据需要改变数组的大小 因为它以数组的形式储存 xff0c 所以它的内存空间是连续的 vector的头文件为 include lt vector gt 常用方法 xff1a span
  • 机器学习方法简介(2)--决策树、随机森林、朴素贝叶斯

    1 决策树 决策树是一种用于对实例进行分类的树形结构 Hunt算法 是一种采用局部最优策略的决策树构建算法 xff0c 它同时也是许多决策树算法的基础 xff0c 包括ID3 C4 5和CART等 Hunt算法的递归定义如下 xff1a 1
  • 软件工程——结构化分析方法

    结构化方法 概念 用来指导软件项目的开发 一种系统化的软件开发方法包括 xff1a 结构化分析方法 结构化设计方法 结构化程序设计方法 结构化设计方法和结构化程序设计方法的区别 xff0c 前者指的软件开发设计阶段的软件体系架构以及内部模块
  • linux安装软件方式--源码编译安装

    简介 xff1a 介绍源码编译安装软件包的管理 1 源码安装优点 xff1a 编译安装过程 xff0c 可以设定参数 xff0c 指定安装目录 xff0c 按照需求进行安装 xff0c 指定安装的版本 xff0c 灵活性比较大 2 源码安装
  • 正点原子mpu6050数据读取失败问题

    如果下载他们官方的程序都读不出来的话 看看你买的是stm32f407的V3版本吗 xff1f 这个版本是只有磁力计的官方代码 你用V3板跑他们的mpu的代码就会读不出来 xff0c 那个mpu6050的代码是已经停产的V2板子的
  • keil5 STM32F103 下载程序出错Flash Download failed - "Cortex-M3"

    1 背景 STM32F103单片机无法下载程序 最近在使用STM32单片机做项目 先是使用的H743单片机 xff0c 现在需要使用到F103单片机 H7烧写程序正常 xff0c 但是无法对F103烧写程序 错误为 xff1a Error
  • 略解总线带宽计算

    例1 xff1a 解 xff1a 时钟频率100MHz 也就是说一秒钟有100M个时钟周期 5个时钟周期传一个字 100M个时钟周期可以传100M 5 61 20M个字 也就是1秒钟可以传20M个字 一个字是16位 也就是2B 20M个字就
  • TX2(2): 安装JetPack L4T 3.1 (9003载板)

    参考官网教程 xff0c 其实官网教程已经挺详细 xff0c 主要看官网教程就行 http docs nvidia com jetpack l4t 3 1 index html developertools mobile jetpack l

随机推荐

  • String字符串编码格式转换(UTF8/GBK)

    1 转UTF8编码 string StdStringToUTF8 const string amp str int nwLen 61 MultiByteToWideChar CP ACP 0 str c str 1 NULL 0 wchar
  • 前缀树(Trie树)

    前缀树是一种用于快速检索的多叉树结构 xff0c 利用字符串的公共前缀来降低查询时间 xff0c 核心思想是空间换时间 xff0c 经常被搜索引擎用于文本词频统计 优点 xff1a 最大限度地减少无谓的字符串比较 xff0c 查询效率高 x
  • C++串口通信

    一 串口通信的基本原理 串口的本质功能是作为 CPU 和串行设备间的编码转换器 当数据从 CPU 经过串行端口发送出去时 xff0c 字节数据转换为串行的位 xff08 bit xff09 xff1b 在接收数据时 xff0c 串行的位被转
  • 死锁的四个必要条件以及处理策略

    一 什么是死锁 死锁是指两个或两个以上的进程 xff08 线程 xff09 在运行过程中因争夺资源而造成的一种僵局 例如 xff0c 某计算机系统中只有一台打印机和一台输入设备 xff0c 进程P1正占用输入设备 xff0c 同时又提出使用
  • EM算法简介

    1 简介 EM算法是一种迭代优化策略 xff0c 由于它的计算方法中每一次迭代都分两步 xff0c 其中一个为期望步 xff08 E步 xff09 xff0c 另一个为极大步 xff08 M步 xff09 xff0c 所以算法被称为EM算法
  • 三菱PLC MC协议

    1 MC协议的目的 xff1a 允许外部设备读写PLC内部寄存器 2 协议格式 xff1a 通讯方式有RS485和TCP IP两种 xff0c 通讯格式有很多种 xff1a 3E 3C 4C 4E帧格式 xff0c 通讯内容分为二进制和AS
  • find和find_if用法

    一 find的用法 STL容器中有很多find xff0c 比如说set xff0c map 他们内部都有内置的find函数 xff0c 一般情况下 xff0c 如果我们用到这些容器 xff0c 那么我们直接用它的内置find就可以了 xf
  • QTreeView节点拖放

    拖放操作分为拖动 Drag 和放置 Drop 两种操作 xff0c 当拖动时需要把拖动的数据进行存储 称为编码 xff0c 数据存储为QMimeData类型的对象 称为放置数据 xff0c 当执行放置操作时需要把存储的数据读取出来 称为解码
  • OOD七大原则

    1 单一职责原则 xff08 Single Responsibility Principle xff09 一个类或一个接口只有一个职责 xff0c 有且仅有一个原因引起变化 2 开闭原则 xff08 Open Closed Principl
  • 微服务探索之路05篇jenkins构建net6和vue docker镜像到Harbor自动更新k8s服务镜像

    从1 4篇已经学习了docker Harbor k8s的基本用法 接下来进阶一下使用jenkins结合起来做到自动部署项目 1 安装jenkins 1 1前提条件 docker环境 xff0c 可参考第01篇安装docker本文使用的是li
  • linux为用户添加sudo权限

    一 linux为用户添加sudo权限 用sudo时提示 34 xxx is not in the sudoers file This incident will be reported 其中XXX是你的用户名 xff0c 这是止当前用户没有
  • pixhawk多线程编程

    金错刀 pixhawk多线程程序编写 pixhawk源码多线程程序的编写 主要是针对pixhawk源码进行第二次开发的学习笔记 xff0c 记录下以便日后查阅 期望达到的目标 添加一个app应用 xff0c 在nsh的后台中运行该应用 xf
  • [视觉惯性导航系列]相机标定工具--kalibr

    前言 有很多博主推荐kalibr进行相机标定 我参考博主 纷繁中淡定 Kalibr标定Intel D435i相机 完成相机标定 但是kalibr在安装过程中会出现很多令人头秃的报错信息 综合了网上好多人的方法 才完成 本文做一点记录 本文不
  • C++ Exception

    Exception type Derived types scattered throughout different library headers bad alloc Exception thrown on failure alloca
  • 什么是最优化问题(Optimization Problem)?

    最优化问题是人们在科学研究和生产实践中经常遇到的问题 1 人类所从事的一切生产或者社会活动均是有目的的 其行为总是在特点的价值观念或者审美取向的支配下进行的 xff0c 因此经常面临一个可行的甚至是最优化的方案的决策问题 这就是最优化问题
  • 单例模式(java代码实现)

    应用单例模式时 xff0c 类只能有一个对象实例 xff0c 这么做的目的是避免不一致状态 饿汉式单例 xff1a xff08 立即加载 xff09 饿汉式单例 public class Singleton1 指向自己实例的私有静态引用 x
  • C++函数后面加“:”的含义

    转载 xff1a C 43 43 函数后面加 xff1a 的含义 hhd1988的专栏 CSDN博客 1 c 43 43 成员函数后面跟 xff1a 表示的是赋值 xff0c 这是c 43 43 的特性 如下 xff1a A int aa
  • 因子图(factor graph)

    因子图 xff08 factor graph xff09 Factor Graph 是概率图的一种 xff0c 概率图有很多种 xff0c 最常见的就是Bayesian Network 贝叶斯网络 和Markov Random Fields
  • 词袋模型(Bag of Features,BOF)

    Bag of Features xff08 BOF xff09 对于程序而言这个人就是一堆像素嘛 xff0c 让它直接找的话它只能一个个像素的去比较然后返回最接近的了 xff08 近邻算法 xff09 但是现实中物体的形状颜色会发生变化 x
  • SNMPv3基于用户的安全模型USM及消息格式

    一 USM相关网址 SNMPv3使用了基于用户的安全模型USM RFC 3411 Architecture for SNMP Frameworks http www ietf org rfc rfc3411 txtRFC 3414 User