當前位置:首頁 » 編程語言 » snmpc語言

snmpc語言

發布時間: 2022-04-20 23:33:51

㈠ C語言常用詞彙及函數有那些

常用詞彙:

1、short:修飾int,短整型數據,可省略被修飾的int。

2、long:修飾int,長整型數據,可省略被修飾的int。

3、long long:修飾int,超長整型數據,可省略被修飾的int。

4、signed:修飾整型數據,有符號數據類型。

5、unsigned:修飾整型數據,無符號數據類型。

6、restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。

7、return:用在函數體中,返回特定值(如果是void類型,則不返回函數值)。

8、continue:結束當前循環,開始下一輪循環。

9、break:跳出當前循環或switch結構。

10、goto:無條件跳轉語句。

11、if:條件語句,後面不需要放分號。

12、else:條件語句否定分支(與if連用)。

13、switch:開關語句(多重分支語句)。

14、case:開關語句中的分支標記,與switch連用。

15、default:開關語句中的「其他」分支,可選。

常用函數:

1、int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z'),返回非0值,否則返回0。

2、int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數字('0'-'9'),返回非0值,否則返回0。

3、int abs(int i) 返回整型參數i的絕對值。

4、double cabs(struct complex znum) 返回復數znum的絕對值。

5、double fabs(double x) 返回雙精度參數x的絕對值。

6、long labs(long n) 返回長整型參數n的絕對值。

㈡ C語言結構體存儲問題

你最好重寫你的function1,因為你function1(sp, WORK,len,fd);
這樣調用函數時參數都是值傳遞,也就是相當於把sp中的參數值復制了一份給function1使用,函數執行完退出後,這些值的空間也就被釋放了,所以sp中的值沒有改變。你可以這樣寫:

typedefstruct//綁定變數
{
intoid_name[BUFFER_SIZE];//OID值
intoid_len;//OID長度
intvalue_type;//變數值的類型
intvalue_len;//變數值的長度
intoid_value;//變數值的值
}variable_list_t;

typedefstruct
{
intget_snmp[BUFFER_SIZE];
inttotal_length;
intversion;//版本號
intcommunity[BUFFER_SIZE];//團體關鍵字
intcommand;//PUD類型
intreqid[BUFFER_SIZE];//請求標識
interrstat;//錯誤狀態
interrindex;//錯誤索引
intp_type_start;
interrorstatus_start;
interrorIndex_start;
intoid_value_start;
intvarbing_start;
variable_list_tval;
}SNMP_t;

voidmain(void){
SNMP_tsp;
function1(&sp,WORK,len,fd);
}

function1(SNMP_t*snmp,WorkTypework,intlen,intfd){
snmp->total_length=work.xxx;
...
}

不知道你能看懂這段代碼嗎?其實最核心的問題是你要想在函數退出後改變函數參數的值,就必須使用地址傳遞

㈢ 請問snmp協議實現的原理

看看《SNMP簡單網路管理協議》李明江,有用的

㈣ snmp的交互方式有哪三類實現機制分別是怎樣的

在snmp發展到V3版本後,把snmp的安全性提升到一個新高度,這同時也帶來了實現上的復雜性。在02年,03年我都曾經想進一步的了解它的實現,但都沒什麼進展。
這次在實現Csnmp的過程中,又一次的接觸到V3的底層實現機理。現把我們在實現Csnmp中的V3模塊的時候,對V3的一些實現細節做一總結,希望能縮短一些朋友掌握SNMPV3的時間和難度。(本文針對的朋友是對snmpV3有個接觸的,故對v3術語不做解釋)
我們先把加密和HMAC部分先放一下,等我們先講幾個別的問題後,再來看加密和HMAC這部分的時候,就會非常清晰了。
現在先把讀寫控制許可權這部分(VACM)做一分析。VACM這部分在Csnmp中實現的時候有如下三個Vector每個分別裝如下一個類:SecuToGroupTableItem、VacmAccessTableItem、ViewTreeFamiTableItem它們分別代表VacmSecurityToGroupTable、VacmAccessTable、VacmViewTreeFamilyTable這三張V3協議中的表。這三張表是配合起來一起完成對讀寫Mib信息的許可權控制的。 首先,用securityName和securityModel從SecuToGroupVector取出其對應的groupName, 其次用剛才取到的groupName加上SecurityModel、SecurityLevel以及是讀、還是寫操作這四個參數從VacmAccessVector取出其相應的viewName。最後一步是VACM的關鍵,通過剛才上一步取到的ViewName,再加上request OID進行如下許可權判斷:對於ViewNameVector中的每一條記錄首先判斷其ViewName是否和我們取出來的ViewName相同,相同的話,看request OID是否是以該條記錄中的subtree為開頭的,如果是的話,再判斷該條記錄的familyType是included(1)還是excluded(2),如果是「included(1)「的話則繼續判斷按同樣的步驟判斷下一條記錄,直到沒有符合ViewName相同的記錄。如果是「excluded(2)」的話,則退出,並向Manager(管理端)發出AuthError的錯誤Response。
也許上面的文檔寫的不怎麼清楚,但請各位稍微仔細掠一下的,就會發現VACM這部分其實較為簡單,因為在我們實現的過程中這一塊真正核心的代碼估計不超過100行。
下面我會花較大篇幅把各位關心的V3的加密和HMAC部分做一分析。首先講解一下Key Localization也就是密鑰的具體化,即該管理端下的每個Agent都有一個不同於其他Agent的Key。之所以要key Localization,這主要是V3協議考慮到一個管理端要管理多個Agent,如果管理端對每個Agent的密鑰都要取記住的話,這將是非常不方便的,第二個原因是即使有一個Agent的key被attacker取到了,他也無法知道其他的Agent的key。在實現Key Localization的時候,為滿足上面的一般都這么做:先用用戶的password,通過(MD5)處理得到對應的User key0,然後把剛才的User key0+你要通訊的Agent的EngineID,再一次通過MD5處理,這就獲得了你所需要的Localized Key。
這個Localized Key在接下來的加密和認證過程中都要用到(這是因為管理者可以只用一個password來產生加密的Key和認證的Key, 也就是加密的Key == 認證的key,但出於更好的安全性考慮的話,建議用兩個不同的password來分別產生加密Key和認證Key)。
好,現在先就V3的Authentication的處理做一分析: 首先按SNMPV3 PDU的要求把所有部分都加上,但把USM部分中的msgAuthenticationParameters部分用連續的12個(byte)0x00填充。等所有部分都填充好後,用剛才講到的認證Key+這個Request PDU一起,送入MD5,產生出一個12個byte的msgAuthenticationParameters,並用這個替換掉開始放入的12個空白byte,其實我們可以把msgAuthenticationParameters看作一個MAC它起到一個電子指紋的作用,這樣一個V3版本的Request PDU就可以發給某一Agent了。

㈤ SNMP協議如何用C表示出基本元素

自己先頂一下,還有SNMP的狀態機表示,真的弄不出來了,苦求!大俠幫忙,熱心人士幫頂,謝了!

㈥ C#,SNMP,有知道怎麼解析自定義的MIB文件的嗎

想獲得自定義mib中節點的信息,可以通過管理端也就是你所用的這個mib瀏覽器,向代理端發送查詢信息,代理端返回節點信息,這樣就獲得了,至於在代理端怎麼處理以及返回信息,可以用mib2c工具將自定義mib文件轉換為.c文件(c#不懂。。)在.c文件中添加返回信息即可,有什麼疑問可以追問

㈦ snmp代碼前段求理解

package a伺服器捕獲的可視化效果;
import jpcap.*;
import jpcap.packet.*;

import java.awt.Rectangle;
import java.lang.String;
import javax.swing.*;

public class CapturePK extends JFrame implements PacketReceiver
{
private JPanel jContentPane = null;
private JButton start=null;
private JButton Stop=null;
private JButton End=null;
private JButton Analy=null;
private JTextArea jta = null;
private JScrollPane jsp=null;
private JScrollPane udpcon=null;
private JTextArea udpcontext=null;
public static Boolean begin=false;
public byte[] data=null;
public CapturePK()
{
super();
System.out.println("第一步");
initialize();

}
private void initialize()
{
System.out.println("第二步");
this.setSize(600, 500);
this.setContentPane(getJContentPane());
this.setTitle("Send伺服器抓取信息");
begin=false;
}
private JPanel getJContentPane()
{
System.out.println("第三步");
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(getStart(), null);//開始按鈕
jContentPane.add(getEnd(), null); //離開按鈕
jContentPane.add(getStop(), null);//停止anniu
jContentPane.add(getAnaly(), null);
jContentPane.add(getJScrollPane(),null);
jContentPane.add(getJScrollPane1(),null);
}
return jContentPane;
}
private JScrollPane getJScrollPane() {
if (jsp == null) {
jsp = new JScrollPane();
jsp.setBounds(new Rectangle(20, 80, 500, 200));
jsp.setViewportView(getJta());
}
return jsp;
}
private JScrollPane getJScrollPane1() {
if (udpcon== null) {
udpcon = new JScrollPane();
udpcon.setBounds(new Rectangle(20, 300, 500, 150));
udpcon.setViewportView(getJUDP());
}
return udpcon;
}
private JTextArea getJUDP() {
if (udpcontext== null) {
udpcontext= new JTextArea();
}
udpcontext.append("源Port \t"+"目的Port\t"+"Version\t"+"Community\t\t"+"Command\t"
+"ResquestId\t"+"Error_Status\t"+"Error_index\t"+"Oid\t\t"+"OidValue\r\n");
return udpcontext;
}
private JTextArea getJta() {
if (jta == null) {
jta = new JTextArea();
}
jta.append("源IP\t\t"+"目的IP\t\t"+"Protocol\t"+"Version\n");
return jta;
}
private JButton getStart()
{
if (start == null) {
start = new JButton();
start.setBounds(new Rectangle(10, 30, 80, 20));
start.setText("Start");
start.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Boolean b=true;
setBeginValue(b);
capture();
}
});
}
return start;
}
private JButton getEnd()
{
if (End == null) {
End = new JButton();
End.setBounds(new Rectangle(200, 30, 80, 20));
End.setText("End");
End.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.exit(1);
}
});
}
return End;
}
private JButton getStop()
{
if (Stop == null) {
Stop = new JButton();
Stop.setBounds(new Rectangle(100, 30, 80, 20));
Stop.setText("Stop");
Stop.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Boolean b=false;
setBeginValue(b);
}
});
}
return Stop;
}
public JButton getAnaly()
{

if(Analy==null)
{
Analy=new JButton();
Analy.setBounds(new Rectangle(300,30,80,20));
Analy.setText("Clear");
Analy.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent e){
jta.setText("");
jta.append("源IP\t\t"+"目的IP\t\t"+"Protocol\t"+"Version\n");
udpcontext.setText("");
udpcontext.append("源Port \t"+"目的Port\t"+"Version\t"+"Community\t\t"+"Command\t"
+"ResquestId\t"+"Error_Status\t"+"Error_index\t"+"Oid\t\t"+"OidValue\r\n");
}
});
}
return Analy;
}

private void Analy(UDPPacket pk)
{
data=pk.data;
String data1;
String temp;
int bits;
int length;
int len;
data1=byteToString(data);

String version;
String Community;
String Command;
String ResquestId;
String Error_index;
String Error_status;
String Oid=null;
String Oidvalue;
//獲取版本號
System.out.println(data1);
temp=data1.substring(2,4);
bits=Judgebit(temp)*2+2;
version=data1.substring(bits,bits+6);
//獲取Community
bits=bits+6;
Community=data1.substring(bits,bits+16);
//get Command
bits=bits+16;
Command=data1.substring(bits,bits+2);
//獲取Command後面的數據(include itself)
data1=data1.substring(bits);
temp=data1.substring(2,4);//get the value behind command
//獲取requestid
bits=Judgebit(temp)*2+2;
int end=data1.indexOf("020100");
ResquestId=data1.substring(bits,end);
//獲取Error_status
Error_status=data1.substring(end,end+6);
//獲取Error_index
Error_index=data1.substring(end+6,end+12);

udpcontext.append(pk.src_port+"\t"+pk.dst_port+"\t"+version+"\t"
+Community+"\t"+Command+"\t"+ResquestId+"\t"
+Error_status+"\t"+Error_index+"\t") ;
//data1隻保留oid oidvalue 數據部分內容
data1=data1.substring(end+12);
//get the 結構類型後面的值
temp=data1.substring(2,4);
bits=Judgebit(temp);
//獲取從第一個oid開始的數據
data1=data1.substring(2+bits*2);
//get the length of oid and oidvalue
String temp1 =data1.substring(2,4);
//show the number of oid
//length=Judge(temp);
length=data1.length();
len=(Judge(temp1)+2)*2;
int number=length/len;
//get the oid
for(int i=0;i<number;i++)
{
temp=data1.substring(6,8);
length=Judge(temp);
temp1=data1.substring(2,4);
len=Judge(temp1);
Oid=data1.substring(8,8+length*2);
bits=8+length*2;
int ends=(len+2)*2;
Oidvalue=data1.substring(bits,ends );
data1=data1.substring(ends);
udpcontext.append(Oid+"\t"+Oidvalue+"\t");
}
udpcontext.append("\r\n");
}
private int Judgebit(String s)
{
int bits=0;
if(s.compareTo("80")<0)
{
bits=1;//長度只有兩個位元組
}
if(s.equals("81"))
{
bits=2;
}
if(s.equals("82"))
{
bits=3;
}
return bits;
}
private int Judge(String s)
{
int temp=0;
int high=0;
int low=0;
if(s.compareToIgnoreCase("0A")<0)
{
temp=Integer.parseInt(s);
}
else
{
String h=s.substring(0,1);
String l=s.substring(1,2);
high=change(h);
low=change(l);
temp=high*16+low;
}
return temp;
}
private int change(String s)//轉化為十進制數
{
int temp=0;
if(s.compareToIgnoreCase("A")<0)
{
temp=Integer.parseInt(s);
}
else
{
if(s.equalsIgnoreCase("A"))
temp=10;
if(s.equalsIgnoreCase("B"))
temp=11;
if(s.equalsIgnoreCase("C"))
temp=12;
if(s.equalsIgnoreCase("D"))
temp=13;
if(s.equalsIgnoreCase("E"))
temp=14;
if(s.equalsIgnoreCase("F"))
temp=15;
}

return temp;
}
private String byteToString(byte[] b)
{
StringBuffer buf = new StringBuffer();
for(int i=0;i<b.length;i++)
{
byte high, low;
byte maskHigh = (byte)0xf0;
byte maskLow = 0x0f;
high = (byte)((b[i] & maskHigh) >> 4);
low = (byte)(b[i] & maskLow);
buf.append(findHex(high));
buf.append(findHex(low));
}
return buf.toString();
}
private static char findHex(byte b)
{
int t = new Byte(b).intValue();
t = t < 0 ? t + 16 : t;

if ((0 <= t) &&(t <= 9)) {
return (char)(t + '0');
}

return (char)(t-10+'A');
}

private Boolean setBeginValue(Boolean b)
{
begin=b;
return begin;
}
private Boolean getBeginValue()
{
return begin;
}
public void receivePacket(Packet packet) //實現介面PacketReceiver類中的receivePacket方法
{
System.out.println("ok");
}
public void capture()
{
Packet pa;
try
{
NetworkInterface[] NI=JpcapCaptor.getDeviceList(); //獲取設備列表名
JpcapCaptor jpcap1= JpcapCaptor.openDevice(NI[1], 1000, true,50); // 打開網卡設備
for(int i=0;i<200;i++)
{
begin=getBeginValue();
if(begin)
{
pa=jpcap1.getPacket(); //獲取數據包
if (pa instanceof IPPacket) //判斷是否為IP數據包
{
IPPacket ip=(IPPacket)pa;
jta.append(ip.src_ip+"\t\t"+ip.dst_ip+"\t\t"+ip.protocol+"\t"+ip.version);
jta.append("\r\n");
if(ip.protocol==17)
{
UDPPacket udp=(UDPPacket)pa;
if(udp.src_port==161||udp.dst_port==162)
{
Analy(udp);
}
}
}
}
else
break;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{ //定義變數用存放數據包的相應的信息
CapturePK cpk=new CapturePK();
cpk.setVisible(true);
}
}

㈧ 有關snmp的get,getnext,getbulk操作的問題

關於snmp編程的資料其實很多。我建議你下載net-snmp開發包,看看裡面的代碼!他是用C語言編寫的,編譯後可以linux系統上測試。現成api是沒有,不過你可以在這個開發包找到很多有用的函數。你可以重點看一下asn.c(有關ber編碼文件)snmp_api.c(解析封裝snmp包的)。你把這些文件好好整理一下,就可以得到自己的api,這就是最好的列子。
我自己動手寫過snmp協議,實現get、getnext、set、snmptrap命令。代碼不會很長,只有幾千行。
如果有問題發郵件到[email protected]進行交流

㈨ 畢業設計 SNMP簡單網路管理協議的設計與實現 要求 通過對關鍵設備流量等參數的實時採集給出網路運行狀況

簡單的就是到網路上下載一個網路管理系統,如思科的網路管理系統,惠普的網路管理平台都可以。然後安裝到一個PC機上(權且叫它網路管理伺服器),進行搜索網段配置就可以開始收集網路信息了。
如果要求復雜的就是基於SNMP的網路管理系統的開發,其實也沒有多難,因為在網路是有很多開發包可以使用,JAVA及C語言的都有,你只要有一定的編程基礎是不難的。
但是,難的是對協議的理解與運用。

熱點內容
linuxio文件 發布:2025-01-24 13:40:21 瀏覽:435
在excel設密碼如何取消 發布:2025-01-24 13:38:54 瀏覽:480
電腦裝存儲時不能開機 發布:2025-01-24 13:38:52 瀏覽:282
2000人同時在線的小程序需要什麼伺服器 發布:2025-01-24 13:37:17 瀏覽:850
怎麼搭建linux伺服器配置 發布:2025-01-24 13:37:16 瀏覽:110
安卓版什麼時候上線麻將模式 發布:2025-01-24 13:32:48 瀏覽:963
演算法實驗分析 發布:2025-01-24 13:20:25 瀏覽:135
安卓和ios步數哪個准確 發布:2025-01-24 13:12:13 瀏覽:290
怎麼給電腦換配置 發布:2025-01-24 13:04:04 瀏覽:920
如何修改服務密碼10086 發布:2025-01-24 12:44:27 瀏覽:513