SNMP關於net snmp執行命令的介面封裝(一)
1.Linux環境
略
2.安裝
net snmp開源軟體
http://www.net-snmp.org/docs/man/
3.需求背景
目前準備做一個裝置網管,採用snmp協議,目前剛剛研究snmp相關,下面是要做的事情:
web server 第三方網管 -----------|--------------------------------------|-------------- | | |-------json---------|-------snmp------| net-snmp client/manager | |適 配 層| --------------------------------|--------------------------------- snmp | net-snmp agent 設 備 其中web server是內部的一套裝置網管(B/S架構),第三方網管採用snmp協議,內部的網管採用json格式請求,目前要做的事情就是不管是第三方還是內部網管下來的請求是什麼格式(json or snmp),到裝置這一層都是snmp,這樣的話,就要在適配層做一個解析封裝模組(json<-->snmp),這個是上面要求的,本來做成兩套很容易實現。 這樣搞的話,目前要做的兩件事,第一件事情,在net-snmp client/manager這一層,封裝snmp相關命令介面(get、set等),注意區分版本(v1,v2,v3),主要是格式問題。第二件事情,實現適配功能,就是將上層下來的json請求解析成snmp方式,應答時轉換成json格式。
4.介面封裝
今天僅僅只是做了簡單實驗,也不知道這樣是不是可行的。直接程式碼吧。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFF_SIZE 80
typedef struct
{
char *p_cmd_name;//snmpget/set等
char *p_version;//v1/V2/V3
char *p_community;//public
char *p_ip_address;//裝置ip
char *p_oid;//MIB對應的oid資訊
}snmp_cmd_s;
void create_snmp_cmd(const snmp_cmd_s *p_cmd_struct, char *p_cmd)
{
if(NULL == p_cmd_struct || NULL == p_cmd)
{
printf("error : NULL pointer.\n");
return;
}
memset(p_cmd, 0, strlen(p_cmd));
//建立v1、V2的命令
strncpy(p_cmd, p_cmd_struct->p_cmd_name, strlen (p_cmd_struct->p_cmd_name));
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, "-v", strlen("-v"));//命令格式
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, p_cmd_struct->p_version, strlen(p_cmd_struct->p_version));//1or2c
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, "-c", strlen("-c"));//命令格式
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, p_cmd_struct->p_community, strlen(p_cmd_struct->p_community));//public
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, p_cmd_struct->p_ip_address, strlen(p_cmd_struct->p_ip_address));//dev ip
strncat(p_cmd, " ", strlen(" "));//加空格
strncat(p_cmd, p_cmd_struct->p_oid, strlen(p_cmd_struct->p_oid));//mib oid
//strncat(p_cmd, " ", strlen(" "));//加空格 ,最後一個空格不需要
return;
}
int exec_snmp_cmd(const char *p_cmd)
{
FILE *fp;
char buffer[BUFF_SIZE] = {0};
if (NULL == (fp = popen(p_cmd, "r")))
{
perror("error : Fail to popen.\n");
exit(1);
}
while(NULL != fgets(buffer, sizeof(buffer), fp))
{
printf("%s", buffer);
}
pclose(fp);
return 0;
}
int main(void)
{
#if 0
int ret = exec_snmp_cmd("cat /etc/passwd");
if (ret)
{
printf("error : set snmp cmd failed.\n");
}
#endif
char cmd_str[BUFF_SIZE] = {0};
snmp_cmd_s snmp_walk_cmd =
{
"snmpwalk",
"1",
"public",
"127.0.0.1",
/*"sysDescr",*/
".1.3.6.1.4.1.2021.4.5.0",//檢視記憶體容量的oid
};
//1.建立命令
create_snmp_cmd(&snmp_walk_cmd, cmd_str);
//2.執行命令
exec_snmp_cmd(cmd_str);
return 0;
}
執行情況:
[[email protected] ~]# ./popen
UCD-SNMP-MIB::memTotalReal.0 = INTEGER: 484676 kB
望各位對snmp有經驗的大神多多指教,多謝。
相關推薦
SNMP關於net snmp執行命令的介面封裝(一)
1.Linux環境 略 2.安裝 net snmp開源軟體 http://www.net-snmp.org/docs/man/ 3.需求背景 目前準備做一個裝置網管,採用snmp協議,目前剛剛研究snmp相關,下面是要
Java面向物件與多執行緒綜合實驗(一)之封裝、繼承與多型
編寫一個程式,實現檔案管理系統中的使用者管理模組。要求模組中實現使用者的模擬登入過程。通過使用者輸入,獲取使用者名稱和口令;與事先記錄在程式中的使用者資訊進行對比,通過口令驗證後才能使用系統。使用者分為系統管理人員、檔案錄入人員,檔案瀏覽人員三類,相關類圖如下所示。 (1)要求在使用者類中
java執行緒深度解析(一)——java new 介面?匿名內部類給你答案
一、內部類 1、內部類初識 一般,一個類裡主要包含類的方法和屬性,但在java中還提出在類中繼續定義類(內部類)的概念。 內部類的定義:類的內部定義類 先來看一個例項 public class Ou
大檔案 and 多下載任務的封裝(一)---執行緒池的封裝(ThreadPool,TheadManager)
ThreadManager 前段時間對三級快取機制做了系統的分析,但是對於網路下載的問題還有很多,比如今天遇到的問題,針對一些需要下載大檔案,並且需要進行多執行緒下載的應用來說,(比如,像一
C# SQL封裝(一)
c# sql封裝(一)感謝軟謀徐老師的SQLHelper.as , 代碼如下(本人有所改動):using System; using System.Collections; using System.Collections.Generic; using System.Configuration; using
前端就業班筆記框架封裝(一)
js框架整體介紹-> 框架和庫是什麽庫: 倉庫, 表示的是很多為了實現特殊功能而封裝的, 便於使用開發的 函數, 對象 和 常量等.例如: // 在 dom 元素下, 獲得 復合 tagName 的元素, // 如果不提供 dom 參數, 那麽就是默認
CISICO與華為命令的對比 (一)
初識cisico一、cisico的基本配置 (1)router> 用戶模式(2)router# 特權模式(3)router(config)# 全局配置模式(4)router(config-if)# 接口模式(5)Router>enable 從用戶模式進入到特權模式(6)Router#co
jdk命令行工具(一)
too left failed ccsm enter gcc mon 如果 空間大小 1、概述 熟悉java開發的人應該都知道在jdk的bin目錄下有許多的工具,這些工具主要用於監視虛擬機和故障處理。這些故障處理工具被Sun公司稱作為“禮物”附贈給JDK的使用者,並在軟
axios封裝(一)基礎配置
html ces nco urlencode axios port htm RM url axios 是目前流行的Promise網絡請求庫,在瀏覽器端他通過 xhr方式創建ajax請求。在node環境下,通過 http 庫創建網絡請求。 axios 提供了豐富的配置,這裏講
Linux基本命令及其使用(一)
blog 選項 文件類型 特性 基本 特殊 png 單位換算 tro Linux中一般使用規則為,COMMAND+【選項】+參數;1,選項:可分為長選項,短選項,作用:修改命令執行特性。2,參數:指定命令的作用對象3,目錄概念:在Linux中一切皆文件的概念,目錄也是特殊的
網工最實用最常用的網絡命令之一——Ping 命令詳解(一)
關閉 連通 自己 命令詳解 機房 幫助 辦公室 技術分享 詳解 Ping是Windows、Unix和Linux系統下的一個命令。ping也屬於一個通信協議,是TCP/IP協議的一部分。利用“ping”命令可以檢查網絡是否連通,可以很好地幫助我們分析和判定網絡故障。 網工最實
多執行緒詳解(一)
[多執行緒詳解(一)](http://www.neilx.com) 一、概念準備 1、程序 (1)直譯:正在進行中的程式 (2)解釋:執行一個程式時,會在記憶體中為程式開闢空間,這個空間就是一個程序。 (3)注意:一個程序中不可能沒有執行緒,只有有了執行緒才能執行; 程序只
post方式介面測試(一)_新建測試用例
第一種方式:拷貝別人的 第二種方式:自己建立 二、開啟瀏覽器(此處chrome),F12開啟開發模式,輸入網址登入,此時可獲取到登入的 Request URL 二、開啟postman,進入自己的Collections,新建New Tab,選擇P
介面測試(一)postman、jmeter工具
介面測試-postman、jmeter工具操作篇 進行介面測試的時候,一般不是通過在client端進行業務來測試,而是通過藉助工具幫助我們傳送請求去呼叫介面,從而達到傳送資料或者獲取資料的目的。目前常用傳送HTTP請求的工具:postman、jmeter。當然這兩個工具不僅限於傳送資料,
介面測試(一)介面基礎
介面測試基礎 介面測試:官方解釋就是測試系統元件間介面的一種測試;是功能測試中的一種;就是前端和後端直接的資料傳遞的測試,所以認為是可以歸於灰盒測試的一種。 可能很多測試同事並沒有專門測試過介面,但是在測試的過程中經常是遇到的 比如我們測試web應用的時候,
RxDataSources與TableView實現介面展示(一)
// ViewController.swift // RxSwiftTest // // Created by travey on 2018/11/5. // Copyright © 2018年 ZhouShijie. All rights reserved. import UIKit
多執行緒學習總結(一)
一、程序和執行緒的定義 程序:程序是資源(CPU、記憶體等)分配的基本單位,它是程式執行時的一個例項。程式執行時系統就會建立一個程序,併為它分配資源,然後把該程序放入程序就緒佇列,程序排程器選中它的時候就會為它分配CPU時間,程式開始真正執行。 執行緒:執行緒是程式執行時的最小單位,它是程序
appium常用封裝(一)
一、Dos下執行adb devices獲取udid封裝 1 #coding=utf-8 2 import os 3 class DosCmd: 4 def excute_cmd_result(self,command): 5 result_list = []
SD命令與響應(一)
1,SDIO命令分為ACMD和CMD,ACMD傳送前,必須先發送CMD55.SDIO的命令和響應都是通過SDIO_CMD傳輸的。 任何命令都是固定的48位。命令格式如下: 所有命令都是由主機(我用的CPU是STM32F407ZET6)發出,其中起始位,傳輸位,結束
【Android架構】基於MVP模式的Retrofit2+RXjava封裝(一)
#最近有個新專案要做,搭建框架的時候,順便梳理了下MVP模式,特此記錄,歡迎大家指正。 專案地址GitHub 一 、首先是依賴 compile 'com.google.code.gson:gson:2.8.0' compile 'com.squareup.ok