📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace SNMPApp_bookExample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void nameBtn_Click(object sender, EventArgs e)
{
//若必需信息没有填写完全,则退出该段程序
if (!checkTextBox())
return;
//获得主机地址与团体名
string hoststr = hostTextBox.Text.ToString();
string comstr = comTextBox.Text.ToString();
//初始化收到的SNMP响应包
byte[] resstr = new byte[1024];
//初始化一个SNMP对象msg
SNMP msg = new SNMP();
//向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.5.0"的对象的值
resstr = msg.getMessage("get",hoststr,comstr,"1.3.6.1.2.1.1.5.0");
//若返回消息的首字节为0xff 说明传输失败
if (0xff == resstr[0])
{
//弹出错误消息 并返回
MessageBox.Show("没有收到来自 "+hoststr+" 的消息。");
return;
}
//若传输成功 则显示设备位置信息
resultListBox.Items.Add("设备的网络名称:");
//获得团体名长度
int comleng = Convert.ToInt16(resstr[6]);
//获得MIB对象长度
int mibleng = Convert.ToInt16(resstr[23 + comleng]);
//获得设备位置信息的数据类型
int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
//获得信息的长度
int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
//计算出信息的起始下标
int datastart = 26 + comleng + mibleng;
//通过信息的起始下标与信息长度获得设备位置信息的字符串
string outprint = Encoding.ASCII.GetString(resstr, datastart, dataleng);
//将信息输出到ListBox中
resultListBox.Items.Add("数据类型为:" + datatype + ",值为: " + outprint);
return;
}
private void addBtn_Click(object sender, EventArgs e)
{
//若必需信息没有填写完全,则退出该段程序
if (!checkTextBox())
return;
//获得主机地址与团体名
string hoststr = hostTextBox.Text.ToString();
string comstr = comTextBox.Text.ToString();
//初始化收到的SNMP响应包
byte[] resstr = new byte[1024];
SNMP msg = new SNMP();
//向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.6.0"的对象的值
resstr = msg.getMessage("get", hoststr,comstr, "1.3.6.1.2.1.1.6.0");
//若返回消息的首字节为0xff 说明传输失败
if (resstr[0] == 0xff)
{
MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
return;
}
//若传输成功 则显示设备位置信息
resultListBox.Items.Add("设备的位置:");
//获得团体名长度
int comleng = Convert.ToInt16(resstr[6]);
//获得MIB对象长度
int mibleng = Convert.ToInt16(resstr[23 + comleng]);
//获得信息
//获得信息类型
int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
//获得信息长度
int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
//获得信息在SNMP包中的开始下标
int start = 26 + comleng + mibleng;
//获得设备的位置信息 并存入outprint字符串中
string outprint = Encoding.ASCII.GetString(resstr, start, dataleng);
//显示设备的位置信息
resultListBox.Items.Add("地址信息类型为: " + datatype + ",值为: " + outprint);
return;
}
private void runtimeBtn_Click(object sender, EventArgs e)
{
//若必需信息没有填写完全,则退出该段程序
if (!checkTextBox())
return;
//获得主机地址与团体名
string hoststr = hostTextBox.Text.ToString();
string comstr = comTextBox.Text.ToString();
//初始化收到的SNMP响应包
byte[] resstr = new byte[1024];
SNMP msg = new SNMP();
int runtime=0;
//向主机发送SNMP消息 查询位于"1.3.6.1.2.1.1.3.0"的对象的值
resstr = msg.getMessage("get", hoststr,comstr, "1.3.6.1.2.1.1.3.0");
//若返回消息的首字节为0xff 说明传输失败
if (resstr[0] == 0xff)
{
MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
return;
}
//若传输成功 则显示设备启动时间信息
resultListBox.Items.Add("设备的启动时间:");
//获得团体名长度
int comleng = Convert.ToInt16(resstr[6]);
//获得MIB对象长度
int mibleng = Convert.ToInt16(resstr[23 + comleng]);
//获得消息
//获得信息类型
int datatype = Convert.ToInt16(resstr[24 + comleng + mibleng]);
//获得信息长度
int dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
//获得信息在SNMP包中的开始下标
int start = 26 + comleng + mibleng;
//如果时间数据的长度大于0
while (dataleng > 0)
{
//时间数据的首字符左移8位
runtime = (runtime << 8) + resstr[start++];
dataleng--;
}
//显示设备的运行时间信息
resultListBox.Items.Add("设备的运行时间类型为:" + datatype + ",值为: " +runtime);
return;
}
private void ipAddBtn_Click(object sender, EventArgs e)
{
//若必需信息没有填写完全,则退出该段程序
if (!checkTextBox())
return;
int comleng, mibleng, start, dataleng,curmibleng;
string value;
//将需要查询的对象标识符放入mib字符串中
string mib = "1.3.6.1.2.1.4.22.1";
string nextstr = mib;
//获得主机地址与团体名
string hoststr = hostTextBox.Text.ToString();
string comstr = comTextBox.Text.ToString();
//获得对象标识符的长度
curmibleng=mib.Length;
//初始化收到的SNMP响应包
byte[] resstr = new byte[1024];
//初始化SNMP对象
SNMP msg = new SNMP();
//开始接受消息
//接受该节点下的所有消息
while (true)
{
//向主机发送SNMP消息 查询位于"1.3.6.1.2.1.4.22.1"的对象的值
//并获得下一个MIB对象标识符的位置
resstr=msg.getMessage("getnext",hoststr,comstr,nextstr);
//若返回消息的首字节为0xff 说明传输失败
if (resstr[0] == 0xff)
{
MessageBox.Show("没有收到来自 " + hoststr + " 的消息。");
return;
}
//获得团体名长度
comleng = Convert.ToInt16(resstr[6]);
//获得MIB对象长度
mibleng = Convert.ToInt16(resstr[23+comleng]);
//获得信息长度
dataleng = Convert.ToInt16(resstr[25 + comleng + mibleng]);
//计算出信息在SNMP包中的开始下标
start = 26 + comleng + mibleng;
//获得网络设备的IP地址映射表
value = BitConverter.ToString(resstr,start,dataleng);
//获得下一个MIB对象标识符
nextstr = msg.nextMIBMessage(resstr);
//若下一个MIB对象标识符与初始查询的MIB对象标识符是同一级别的则跳出循环
if (!(nextstr.Substring(0, curmibleng) == mib))
break;
//选择输出映射表中的物理地址
if(6==dataleng)
resultListBox.Items.Add(nextstr+" = " +value);
}
return;
}
private void clearBtn_Click(object sender, EventArgs e)
{
resultListBox.Items.Clear();
}
public bool checkTextBox()
{
//如果主机地址或团体名为空
if (("" == hostTextBox.Text) || ("" == comTextBox.Text))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -