C++ 打印机状态查询之SNMP协议
前言
由于工作需要,封装打印机SDK,该篇主要讲解如何获取打印机的状态,打印机支持简单网络管理协议(SNMP),并且windows api支持snmp通讯协议;所以,就使用snmp协议查询打印机状态
一、SNMP协议简介
简单网络管理协议(SNMP),是TCP/IP协议簇的一个应用层协议,工作在UDP 161端口,用于监控目标设备的操作系统、硬件设备、服务应用、软硬件配置、网络协议状态、设备性能及资源利用率、设备报错事件信息、应用程序状态等软硬件信息。已经有3个版本,SNMPv1、SNMPv2、SNMPv3,我打印机使用的是SNMPv2。
SNMP常见的请求类型有Get、GetNext、Set和Trap等等,用来在管理进程和代理之间的通讯。
二、对象标识符OID
OID是SNMP代理提供的具有唯一标识的键值,它是一种分级树的结构,格式类似于1.3.6.1.2.1.4.3这种写法
,每个OID都有不同的功能,通过SNMP请求可返回相应结果
三、SNMP接口描述
1、SnmpMgrOpen(),初始化通信套接字和数据结构,允许与指定的SNMP代理进行通信。
LPSNMP_MGR_SESSION SNMP_FUNC_TYPE SnmpMgrOpen(
LPSTR lpAgentAddress,
LPSTR lpAgentCommunity,
IN INT nTimeOut,
IN INT nRetries
);
2、SnmpMgrClose(),闭与指定会话关联的通信套接字和数据结构
BOOL SNMP_FUNC_TYPE SnmpMgrClose(
IN LPSNMP_MGR_SESSION session
);
3、SnmpMgrStrToOid();将对象标识符的字符串格式转换为其内部对象标识符结构
BOOL SNMP_FUNC_TYPE SnmpMgrStrToOid(
LPSTR string,
OUT AsnObjectIdentifier *oid
);
4、SnmpUtilMemAlloc(), 为SnmpVarBind结构分配内存。
LPVOID SNMP_FUNC_TYPE SnmpUtilMemAlloc(
UINT nBytes
);
5、SnmpUtilVarBindListFree(), 释放为SnmpVarBindList结构分配的内存。
VOID SNMP_FUNC_TYPE SnmpUtilVarBindListFree(
SnmpVarBindList *pVbl
);
6、SnmpMgrRequest(); 请求使用指定的代理执行指定的操作,Get、GetNext、Set等请求
SNMPAPI SNMP_FUNC_TYPE SnmpMgrRequest(
IN LPSNMP_MGR_SESSION session,
IN BYTE requestType,
IN OUT RFC1157VarBindList *variableBindings,
OUT AsnInteger *errorStatus,
OUT AsnInteger *errorIndex
);
代码如下(示例):
#include <Snmp.h>
#include <MgmtAPI.h>#pragma comment(lib, "Snmpapi.lib")
#pragma comment(lib, "Mgmtapi.lib")char g_szIpAddress[MAX_PATH] = "192.168.1.1";int GetOIDInteger(char* oid, int *outIngeger)
{if (oid == NULL || outIngeger == NULL){return 1;}// oid(对象标识符)AsnObjectIdentifier aoidStatus;char oidValue[64] = { 0 };memcpy(oidValue, oid, strlen(oid));// 将字符串格式的oid转换成内部oid对象标识符if (!SnmpMgrStrToOid(oidValue, &aoidStatus)){// 无效oidreturn 2;}// 初始化通信套接字和数据结构,获取会话句柄LPSNMP_MGR_SESSION lpSession = SnmpMgrOpen(g_szIpAddress, "public", 2000, 3);if (lpSession == NULL){return 3;}int iRet = 0;AsnInteger errStatus;AsnInteger errIndex;// 绑定SNMP变量SnmpVarBindList svbList;svbList.len = 1;svbList.list = (SnmpVarBind *)SnmpUtilMemAlloc(sizeof(SnmpVarBind) * svbList.len);svbList.list->name.idLength = aoidStatus.idLength;svbList.list->name.ids = aoidStatus.ids;// 请求返回的数据类型,ASN_INTEGER是整型,ASN_OCTETSTRING是字符串svbList.list->value.asnType = ASN_INTEGER;SNMPAPI snmpRet = SnmpMgrRequest(lpSession, SNMP_PDU_GET, &svbList, &errStatus, &errIndex);if (snmpRet == NULL){// 释放资源SnmpUtilVarBindListFree(&svbList); SnmpMgrClose(lpSession);return 4;}if (errStatus == SNMP_ERRORSTATUS_NOERROR){// 请求的类型和返回的类型一致if (svbList.list->value.asnType == ASN_INTEGER){*outIngeger = svbList.list->value.asnValue.number;iRet = 0;}else{iRet = 5;}}else{iRet = 6;}// 释放资源SnmpUtilVarBindListFree(&svbList);SnmpMgrClose(lpSession);return iRet;
}
示例里面只描述了Get请求类型,其他请求类型差不多,只是参数设置不一样,就不再叙述了。
C++ 打印机状态查询之SNMP协议相关推荐
- SNMP 协议 OID的使用
为什么80%的码农都做不了架构师?>>> SNMP 协议 OID的使用 SNMP(Simple Network Management Protocol简单网络管理)协议 是现在 ...
- SNMP协议介绍和操作截图
第一章 SNMP协议介绍 SNMP协议 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的 ...
- 用SNMP协议实现系统监控
系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学.系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容.随着当前企业IT环境中服务器.应用 ...
- SNMP协议以及著名的MIB详解
SNMP协议介绍 简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task ...
- snmp协议与snmp++
0.学习及引用 SNMP++库-[搜索SNMP++] SNMP++ 00-开发准备篇 SNMP原理与实战详解 <计算机网络管理原理与实现> dog250在此文中提到了snmp SNMP协议 ...
- SNMP协议架构与操作类型
目录 SNMP协议基础 基本概念 SNMP架构 SNMP版本 SNMP不同版本应用场景 NMS与Agent的交互 SNMPv1操作类型 SNMPv2c操作类型 SNMPv3操作类型 SNMP相关配置 ...
- 基于snmp协议监控华为s5720交换机
类别 节点信息 对应节点的OID 备注 设备状态监控 CPU利用率 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 盒式设备获取CPU利用率和内存利用率的大小还可以使用另一个节点 ...
- 通过snmp协议自动化获取服务器硬件信息-python
前言 最近有个需求,就是在新机器上架的时候,获取硬件信息,用来核对新采购的服务器是否和购买的配置一致.其中包含cpu.内存,硬盘,Raid卡.网卡等硬件信息.由于新机器可能没有装操作系统,考虑到公司使 ...
- SNMP协议控制AP7921设备电源端口
SNMP协议控制施耐德AP7921 SNMP基础知识点 1)写在前面: SNMP简单概述 1)什么是Snmp 2)SNMP 和 UDP 3)Snmp版本 SNMP的实现结构 SNMP有关的基本概念 1 ...
- 网络协议篇之SNMP协议(一)——SNMP报文协议
(前言:最近工作中遇到大量的网络协议开发,现就其中一些网络协议的基础知识进行整理,文中借鉴了一些大神的整理,后面会贴上链接,如侵删) 简单网络管理协议(SNMP)是TCP/IP协议簇的一 ...
最新文章
- Datagridview中数字格式列 不显示小数点前面的0
- python基础语法第10关作业-Python基础作业一
- 改:今天看到的一个有趣面试题:return *this和return this有什么区别?
- Ubuntu开机黑屏解决办法
- 苹果7plus元件分布图_苹果iphone7 plus手机拆解全过程评测 iphone7 plus拆机图解教程...
- 5训练需要更改参数吗_糖尿病病人需要多喝水吗?多喝水的5大好处,了解一下...
- 【ArcGIS微课1000例】0009:ArcGIS影像拼接(镶嵌、镶嵌至新栅格)
- 重庆邮电计算机科学分数线,2020重庆邮电大学录取分数线已公布
- IntentService解析
- python图片保存重命名_Python实现重命名一个文件夹下的图片
- reddit_Reddit如何大规模构建功能:采访其工程副总裁
- el-table 树形表格 自定义展开图标_IconJar for Mac(图标素材设计软件)
- 全球首发!计算机视觉Polygon Mesh Processing总结8——Remeshing Global Structure和Correspondences
- 计算机教师专业要求,计算机专业教师技能达标要求
- Vue2.0进阶组件篇2 解析饿了么(spinner组件)
- 数字值太大,plsql显示不全的设置
- 数据库 ER图 EER图(鸭蹼图) freedgo绘图工具
- 播放RTMP协议的流媒体的两种选择
- 获取KVM虚拟机IP地址
- 让一台电脑死机至少需要几行代码