snmp服务

双击

安装snmputil和MIB Browser

getSwitchStatus.cpp:

#include <iostream>
#include <stdio.h>
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>

using namespace std;

int main() {
    init_snmp("getSwitchStatus");

    netsnmp_session session;
    netsnmp_pdu* pdu;
    netsnmp_pdu* response;
    oid ifOperStatus_oid[] = { 1, 3, 6, 1, 2, 1, 2, 2, 1, 8 };  // OID for ifOperStatus (.1.3.6.1.2.1.2.2.1.8)
    size_t ifOperStatus_oid_len = sizeof(ifOperStatus_oid) / sizeof(oid);

    // Set up the SNMP session
    snmp_sess_init(&session);
    session.peername = strdup("192.168.37.1");  // Replace with the IP address or hostname of your switch
    session.version = SNMP_VERSION_2c;    
    const char* str="COMMUNITY_STRING";           // Use SNMP v2c (you can also use v1 or v3)
    session.community =const_cast<u_char*>(reinterpret_cast<const u_char*>(str));  // Replace with your community string
    session.community_len = strlen(reinterpret_cast<const char*>(session.community));

    // Open the SNMP session
    if (!snmp_open(&session) ) {
        fprintf(stderr, "Failed to open SNMP session.\n");
        exit(1);
    }
    // Create the PDU
    pdu = snmp_pdu_create(SNMP_MSG_GET);
    snmp_add_null_var(pdu, ifOperStatus_oid, ifOperStatus_oid_len);

    // Send the SNMP request
    int status = snmp_synch_response(&session, pdu, &response);
    if (status == STAT_SUCCESS && response->errstat == SNMP_ERR_NOERROR) {
        // Process the response
        for (netsnmp_variable_list* vars = response->variables; vars; vars = vars->next_variable) {
            if (vars->type == ASN_INTEGER) {
                int value = *vars->val.integer;
                cout << "Interface Status: ";
                if (value == 1) {
                    cout << "Up" << endl;
                }
                else if (value == 2) {
                    cout << "Down" << endl;
                }
                else {
                    cout << "Unknown" << endl;
                }
            }
        }
    }
    else {
        // Handle the error
        if (status == STAT_SUCCESS) {
            cout << "Error in packet: " << snmp_errstring(response->errstat) << endl;
        }
        else {
            cout << "SNMP error: " << snmp_api_errstring(status) << endl;
        }
    }

    // Clean up
    if (response) {
        snmp_free_pdu(response);
    }

    snmp_close(&session);

    return 0;
}

getConfig.cpp:

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
typedef struct{
    string ip;//IP地址
    vector<int> oid;//oid
    string communityStr;//社区字符串
}Config;
//得到:后面的字符串
string getLastStr(string str){
    string res=str.substr(str.find(":")+1);
    return res;
}
//把1.12.123变成int数组
vector<int> strToIntArray(string str){
    stringstream ss(str);//
    vector<int> res;
    string token;
    while (getline(ss,token,'.'))
    {
       int num=stoi(token);
       res.push_back(num);
    }
    return res;
}
//读取config.txt文件
Config readConfigTxt(string& path){
    Config res;
    ifstream file(path,std::ios::binary);
    if(!file){
        cout<<"Failed to open file"<<endl;
        return res;
    }
    string line;
    while (getline(file,line))
    {
        //ip
        line=getLastStr(line);
        res.ip=line;
        //oid
        getline(file,line);
        line=getLastStr(line);
        res.oid=strToIntArray(line);
        //communityStr
        getline(file,line);
        line=getLastStr(line);
        res.communityStr=line;
    }
    
}
int main(){
    string path="/home/xyt/work/vsCode/getSnmp/config.txt";
    Config res=readConfigTxt(path);
    //ip
    cout<<res.ip<<endl;
    //oid
    vector<int> a=res.oid;
    int len=a.size();
    int oidArr[len];
    for (int i = 0; i < len; i++)
    {
        oidArr[i]=a[i];
    }
    //遍历oidArr
    for (int i = 0; i < len; i++)
    {
        cout<<oidArr[i]<<" ";
    }
    cout<<endl;
    //communityStr
    cout<<res.communityStr<<endl;
    
    
}

代码还没有整合 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——LeetCode力扣补充篇3(143. 重排链表、141. 环形链表、205. 同构字符串、1002. 查找共用字符、925. 长按键入)

算法学习——LeetCode力扣补充篇3 143. 重排链表 143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为&#xff1a; L0 → Ln → …

给三分钟热度学习Python的同学的一条建议

最近公司来了一个实习生妹子&#xff0c;在读商科硕士&#xff0c;平时我会让她做做数据清洗的工作&#xff0c;她工作倒是贼认真&#xff0c;但对计算机属于一窍不通&#xff0c;不会写SQL&#xff0c;Ecxel也很菜&#xff0c;对于很简单的取数往往会花很多的时间。 她向我倒…

halcon图像腐蚀

1、原理 使用结构元素在图像上移动&#xff0c;只有结构元素上的所有像素点都属于图像中时&#xff0c;才保留结构元素中心点所在的像素&#xff0c;常用于分离连接的两个物体、消除噪声。 2、halcon代码 dev_open_file_dialog (read_image, default, default, Selection) r…

<Linux> Linux环境开发工具

一、Linux软件包管理器 - yum 什么是软件包&#xff1a; 在Linux 下安装软件 , 一个通常的办法是下载到程序的源代码 , 并进行编译 , 得到可执行程序 . 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好 , 做成软件包 ( 可以理解成 windows 上的安装程序) 放在一…

AI融合细分场景,突破未来家的想象,萤石2024春季新品发布会圆满举办

3月31日&#xff0c;“AI无界 萤未来”2024萤石春季新品发布会暨渠道合作伙伴大会于杭州正式举办。萤石重磅发布视频通话摄像机S10、超级夜景室外云台H8x系列、TAMO看护摄像机、AI三摄全自动人脸视频锁DL60FVX Pro以及家庭助理机器人RK3等多款新品&#xff0c;以创新、前沿的AI…

OpenHarmony实战:Hilog组件在交互时应用指南

一、OpenHarmony hilog 组件工具概述 hilog 是 OpenHarmony 日志系统&#xff0c;提供给系统框架、服务、以及应用打印日志&#xff0c;记录用户操作、系统运行状态等。适用于 OpenHarmony 应用、硬件开发及测试人员,是每个开发人员的必备、入门工具。 hilog 日志查看命令行工…

类的函数成员(三):拷贝构造函数

一.什么是拷贝构造函数&#xff1f; 1.1 概念 同一个类的对象在内存中有完全相同的结构&#xff0c;如果作为一个整体进行复制或称拷贝是完全可行的。这个拷贝过程只需要拷贝数据成员&#xff0c;而函数成员是共用的&#xff08;只有一份拷贝&#xff09;。 在建立对象…

实践笔记-harbor-02-仓库镜像上传与拉取

harbor仓库镜像上传与拉取 1.上传镜像修改 daemon.json 配置文件上传镜像至harbor 2.拉取镜像登录账号&#xff08;跟上传镜像那里一样操作登录步骤就可以了&#xff09;拉取镜像 环境&#xff1a;centos7 1.上传镜像 修改 daemon.json 配置文件 # 编辑daemon.json文件&#…

C语言学习 六、指针

6.1指针的定义 6.1.1指针的本质&#xff08;间接访问原理&#xff09; 内存区域中每字节对应一个编号&#xff0c;这个编号就是“地址”。如果在程序中定义了一个变量&#xff0c;那么在对程序进行编译时&#xff0c;系统会给这个变量分配内存单元。按变量存取变量值的方式称…

【御控物联】JavaScript JSON结构转换(8):数组To数组——多层属性重组

文章目录 一、JSON结构转换是什么&#xff1f;二、案例之《JSON数组 To JSON数组》三、代码实现四、在线转换工具五、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0c;生成新的JS…

【项目技术介绍篇】若依项目代码文件结构介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

node.js的模块化 与 CommonJS规范

一、node.js的模块化 (1)什么是模块化&#xff1f; 将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化 在node.js中&#xff0c;模块化是指把一个大文件拆分成独立并且相互依赖的多个小模块&#xff0c;将每个js文件被认为单独的一个模块&#xff1b;模块…

Python爬虫:爬虫常用伪装手段

目录 前言 一、设置User-Agent 二、设置Referer 三、使用代理IP 四、限制请求频率 总结 前言 随着互联网的快速发展&#xff0c;爬虫技术在网络数据采集方面发挥着重要的作用。然而&#xff0c;由于爬虫的使用可能会对被爬取的网站造成一定的压力&#xff0c;因此&#…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(5)复发

PS从入门到精通视频各类教程整理全集&#xff0c;包含素材、作业等 最新PS以及插件合集&#xff0c;可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制&#xff0c;今天先分享到这里&#xff0c;后续持续更新 初寒调色案例及练习图 等文件 https://www.alipan…

Redis改造原始代码

基础篇Redis 5.2.2.改造原始代码 代码说明: 1.在我们完成了使用工厂设计模式来完成代码的编写之后&#xff0c;我们在获得连接时&#xff0c;就可以通过工厂来获得。 &#xff0c;而不用直接去new对象&#xff0c;降低耦合&#xff0c;并且使用的还是连接池对象。 2.当我们…

书生·浦语大模型-第二节课笔记/作业

笔记 实验一 cli-demo import torch from transformers import AutoTokenizer, AutoModelForCausalLMmodel_name_or_path "../models"tokenizer AutoTokenizer.from_pretrained(model_name_or_path, trust_remote_codeTrue, device_mapcuda:0) model AutoModelF…

给虚拟机配置静态IP并使用FileZIlla在虚拟机和Windows之间传输文件(ssh和ftp两种方法)

一、配置操作系统网络 &#x1f338;下面的步骤主要是配置虚拟机的静态IP&#xff0c;方便后续用 FikeZilla 在windows和虚拟机之间传输文件&#xff08;否则用默认的ip分配方案为 DHCP ,每一次开机时的ip都是有可能不同的,这样就会导致每次远程连接都需要查看ip地址.&#xf…

Java学习33-Java 多线程Thread 多线程安全问题

Thread的生命周期 JDK1.5之前 JDK1.5之后分为 NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED 多线程安全问题 举例&#xff0c;要求三个窗口同时卖票&#xff0c;总共有100张票&#xff0c;打印出卖票过程&#xff0c;不允许重复售卖 package Thread;public class …

HarmonyOS实战开发-目标管理、如何实现一个自定义弹窗。

介绍 本篇Codelab将介绍如何使用State、Prop、Link、Watch、Provide、Consume管理页面级变量的状态&#xff0c;实现对页面数据的增加、删除、修改。要求完成以下功能&#xff1a; 实现一个自定义弹窗&#xff0c;完成添加子目标的功能。实现一个可编辑列表&#xff0c;可点击…

商品服务 - 三级分类

1.递归查询树形结构 Overridepublic List<CategoryEntity> listWithTree() {//1.查出所有分类List<CategoryEntity> all this.list();//2.组装成父子的属性结构List<CategoryEntity> level1Menus all.stream().filter(c -> c.getParentCid().equals(0L)…