简单网络管理协议(SNMP)通过第三方API SNMP++ 提取进程名称,路径与PID信息

来源:互联网 发布:如何查看tcp端口 编辑:程序博客网 时间:2024/06/06 06:52

书接上文,在此博客中记录获取进程名称,路径与PID信息的子函数

上篇博客中记录了初始定义的结构体与其他变量的定义。直接上代码段:

/*===========================================================函数名称:Get_Per_CPU_PID函数功能:获取进程PID,将进程PID信息发送到进程信息结构体数组的元素当中函数参数:const char * aa1:主机地址:监听端口("127.0.0.1:161");      const char * bb1:OID,MIB数据类型,指定为"public"      Process Pro[]:进程信息结构体数组;返回值: 无返回值=============================================================*/void Get_Per_CPU_PID(const char * aa1, const char * bb1, Process Pro[]){Snmp::socket_startup();  //初始化Winsocket套接字UdpAddress udp(aa1);CTarget ctarget(udp);ctarget.set_readcommunity(bb1);snmp_version version = version2c;ctarget.set_version(version);SnmpTarget *target;target = &ctarget;int status;Snmp snmp(status, 0, false);    // 创建snmp对象int i = 0;int index_count = 0;                //该列的行数bool tag = true;                    //标志循环是否结束Pdu pdu;Vb vb;Oid oid = ".1.3.6.1.2.1.25.4.2.1.4";//初始Oid 表示ipNetToMediaTable 中ipNetToMediaNetAddressvb.set_oid(oid);pdu += vb;do{if ((status = snmp.get_next(pdu, *target)) == SNMP_CLASS_SUCCESS){//读完数据后,指针会指向该列下一个表项pdu.get_vb(vb, 0);Oid soid;vb.get_oid(soid);//当前列的Oidif (oid.nCompare(oid.len(), soid) == 0){//当前soid与初始oid相等则取数据,即只能是初始oid那一列数据vb.get_oid(full_oid[index_count]);//将该所有列表项的oid(oid+index)赋值给full_oid数组备用Pro[index_count].OID = full_oid[index_count];strcpy(Pro[index_count].PID, Pro[index_count].OID.get_printable(1));index_count++;}else{//oid超过该列,跑到下一列。tag = false;}}else{// get_next读取失败tag = false;}} while (tag == true);Snmp::socket_cleanup();  //初始化Winsocket套接字}/*===========================================================函数名称:Get_Per_CPU_Name函数功能:获取进程名称,将进程名称发送到进程信息结构体数组的元素当中函数参数:const char * aa1:主机地址:监听端口("127.0.0.1:161");  const char * bb1:OID,MIB数据类型,指定为"public"  Process Pro[]:进程信息结构体数组;返回值: 无返回值=============================================================*/void Get_Per_CPU_Name(const char * aa1, const char * bb1, Process Pro[]){char bb[50] = { 0 };Snmp::socket_startup();  //初始化Winsocket套接字UdpAddress udp(aa1);CTarget ctarget(udp);ctarget.set_readcommunity(bb1);snmp_version version = version2c;ctarget.set_version(version);SnmpTarget *target;target = &ctarget;int status;Snmp snmp(status, 0, false);    // 创建snmp对象int i = 0;int index_count = 0;                //该列的行数bool tag = true;                    //标志循环是否结束Pdu pdu;Vb vb;Oid oid = ".1.3.6.1.2.1.25.4.2.1.2";//初始Oid 表示ipNetToMediaTable 中ipNetToMediaNetAddressvb.set_oid(oid);pdu += vb;Oid full_oid[200];//用于存储一列的oid,由于有多少条记录未知(行数未知)所以尽量设定大 do{if ((status = snmp.get_next(pdu, *target)) == SNMP_CLASS_SUCCESS){//读完数据后,指针会指向该列下一个表项pdu.get_vb(vb, 0);Oid soid;vb.get_oid(soid);//当前列的Oidif (oid.nCompare(oid.len(), soid) == 0){//当前soid与初始oid相等则取数据,即只能是初始oid那一列数据vb.get_oid(full_oid[index_count]);//将该所有列表项的oid(oid+index)赋值给full_oid数组备用cout << "IpAddress =    " << vb.get_value(bb) << "       end" << endl;vb.get_value(Pro[index_count].name);index_count++;}else{//oid超过该列,跑到下一列。tag = false;}}else{// get_next读取失败tag = false;}} while (tag == true);Snmp::socket_cleanup();  //初始化Winsocket套接字}/*===========================================================函数名称:Get_Per_CPU_Path函数功能:获取进程路径,将路径信息发送到进程信息结构体数组的元素当中函数参数:const char * aa1:主机地址:监听端口("127.0.0.1:161");  const char * bb1:OID,MIB数据类型,指定为"public"  Process Pro[]:进程信息结构体数组;返回值: 无返回值=============================================================*/void Get_Per_CPU_Path(const char * aa1, const char * bb1, Process Pro[]){Snmp::socket_startup();  //初始化Winsocket套接字UdpAddress udp(aa1);CTarget ctarget(udp);ctarget.set_readcommunity(bb1);snmp_version version = version2c;ctarget.set_version(version);SnmpTarget *target;target = &ctarget;int status;Snmp snmp(status, 0, false);    // 创建snmp对象int i = 0;int index_count = 0;                //该列的行数bool tag = true;                    //标志循环是否结束Pdu pdu;Vb vb;Oid oid = ".1.3.6.1.2.1.25.4.2.1.4";//初始Oid 表示ipNetToMediaTable 中ipNetToMediaNetAddressvb.set_oid(oid);pdu += vb;//Oid full_oid[200];//用于存储一列的oid,由于有多少条记录未知(行数未知)所以尽量设定大 do{if ((status = snmp.get_next(pdu, *target)) == SNMP_CLASS_SUCCESS){//读完数据后,指针会指向该列下一个表项pdu.get_vb(vb, 0);Oid soid;vb.get_oid(soid);//当前列的Oidif (oid.nCompare(oid.len(), soid) == 0){//当前soid与初始oid相等则取数据,即只能是初始oid那一列数据vb.get_oid(full_oid[index_count]);//将该所有列表项的oid(oid+index)赋值给full_oid数组备用cout << "IpAddress =    " << vb.get_value(Pro[index_count].Path) << "       end" << endl;vb.get_value(Pro[index_count].Path);index_count++;}else{//oid超过该列,跑到下一列。tag = false;}}else{// get_next读取失败tag = false;}} while (tag == true);Snmp::socket_cleanup();  //初始化Winsocket套接字}


阅读全文
0 0