服务器代理设置与MIB信息获取实验报告,MIB浏览器的设计试验报告

一.实验目的

1、基本掌握了 MIB的结构;

2、掌握C++环境下SNMP编程的基本方法。

二.实验环境

1、VC++ 6.0

2、《Visual C++开发基于SNMP网络管理软件》书的第七章内容和源代码,其主要源代码在工程文件的MibBrowserView.cpp中。

三.实验要求

由于MibBrowser.dsw给出的源程序代码中,每次只能得到一个对象的值,因此本实验的要求就是:修改Get和Getnext操作的显示结果,使其能够把一次性把一个OID子树下的所有对象的内容能够显现出来。具体要求如下:

1.如果OID子树下没有表对象,把该子树下的所有对象的值显示在右侧的表格中。

2.如果OID子树下有标量对象,也有表对象,把该子树下的所有标量对象的值和表对象中所有值显示在右侧的表格中。标量对象的显示方式采用原来的显示方式,而表对象内容的显示必须是表格,可以采用连接的形式,在现在显示List的右边以表格的形式显示素有所有对象的值。

3.如果OID子树下只有表对象,把该子树下的所有对象中所有值显示在右侧的表格中,要求采用表格的形式,而不是原来的树形结构。

四.实验报告的内容

//GET操作;

void CMibBrowserView::OnGet()

{

HTREEITEM hNode;

MibNode* pNodeData;

CString ipadd,community,oidstr;

m_ipadd.GetWindowText(ipadd);

if(m_ipadd.IsBlank())

{

AfxMessageBox("IP地址错误!");

return ;

}

m_ipadd.GetWindowText(ipadd);

m_community.GetWindowText(community);

m_oid.GetWindowText(oidstr);

ipadd+=":161";

Snmp::socket_startup();

UdpAddress address((LPCTSTR)ipadd);

Oid oid((LPCTSTR)oidstr);

snmp_version version=version1;

int status;

Snmp snmp(status, 0, false);

Pdu pdu;

Vb vb;

vb.set_oid(oid);

pdu += vb;

CTarget ctarget(address);

ctarget.set_version(version);

ctarget.set_retry(1);

ctarget.set_timeout(100);

ctarget.set_readcommunity((LPCTSTR)community);

SnmpTarget *target;

target = &ctarget;

status = snmp.get(pdu, *target);

if (status ==SNMP_CLASS_SUCCESS)

{

pdu.get_vb(vb,0);

CString reply_oid=vb.get_printable_oid();

CStringreply_value=vb.get_printable_value();

hNode=SearchNode(reply_oid);

if (hNode!=NULL)

{

pNodeData=(MibNode*)m_tree.GetItemData(hNode);

reply_oid.Replace((LPCTSTR)pNodeData->POid,

(LPCTSTR)m_tree.GetItemText(hNode));

if (pNodeData->PInteger!=NULL)

{

POSITIONindex=pNodeData->PInteger->Find(reply_value);

if (index!=NULL)

{

pNodeData->PInteger->GetNext(index);

reply_value=pNodeData->PInteger->GetNext(index);

}

}

}

if (m_list.GetItemCount()>0)

m_list.DeleteAllItems();

introw=m_list.InsertItem(1,reply_oid);

m_list.SetItemText(row,1,reply_value);

}

Snmp::socket_cleanup();

CMainFrame *pF=(CMainFrame *)AfxGetMainWnd();

int num=m_list.GetItemCount();

oidstr.Format("%d",num);

oidstr="共取回"+oidstr+"个对象";

pF->m_wndStatusBar.SetPaneText(0,oidstr);

}

//GETNEXT操作:

void CMibBrowserView::OnGetnext()

{

HTREEITEM hNode;

MibNode* pNodeData;

CString ipadd,community,oidstr;

m_ipadd.GetWindowText(ipadd);

if(m_ipadd.IsBlank())

{

AfxMessageBox("IP地址错误!");

return ;

}

m_ipadd.GetWindowText(ipadd);

ipadd+=":161";

m_community.GetWindowText(community);

m_oid.GetWindowText(oidstr);

Snmp::socket_startup();

UdpAddress address((LPCTSTR)ipadd);

Oid oid((LPCTSTR)oidstr);

snmp_version version=version1;

int status;

Snmp snmp(status, 0, false);

Pdu pdu;

Vb vb;

vb.set_oid(oid);

pdu += vb;

CTarget ctarget( address);

ctarget.set_version(version);

ctarget.set_retry(1);

ctarget.set_timeout(100);

ctarget.set_readcommunity((LPCTSTR)community);

SnmpTarget *target;

target = &ctarget;

status = snmp.get_next(pdu,*target);

if (status ==SNMP_CLASS_SUCCESS)

{

pdu.get_vb(vb,0);

CString reply_oid=vb.get_printable_oid();

CStringreply_value=vb.get_printable_value();

hNode=SearchNode(reply_oid);

if (hNode!=NULL)

{

pNodeData=(MibNode*)m_tree.GetItemData(hNode);

reply_oid.Replace((LPCTSTR)pNodeData->POid,

(LPCTSTR)m_tree.GetItemText(hNode));

if(pNodeData->PInteger!=NULL)

{

POSITIONindex=pNodeData->PInteger->Find(reply_value);

if (index!=NULL)

{

pNodeData->PInteger->GetNext(index);

reply_value=pNodeData->PInteger->GetNext(index);

}

}

}

if (m_list.GetItemCount()>0)

m_list.DeleteAllItems();

introw=m_list.InsertItem(1,reply_oid);

m_list.SetItemText(row,1,reply_value);

}

else

AfxMessageBox("操作失败,请检查配置!");

Snmp::socket_cleanup();

CMainFrame *pF=(CMainFrame *)AfxGetMainWnd();

int num=m_list.GetItemCount();

oidstr.Format("%d",num);

oidstr="共取回"+oidstr+"个对象";

pF->m_wndStatusBar.SetPaneText(0,oidstr);

}

五.参考资料

Visual C++开发基于SNMP网络管理软件(含盘),作者: 任相臣,徐䶮,武孟军,

出版社: 人民邮电出版社,2007

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于使用SNMP第三方API或工具获取MIB信息信息的指导。 首先,SNMP是Simple Network Management Protocol的缩写,是一种用于网络设备监控和管理的协议。MIB(Management Information Base)则是管理信息库,包含了SNMP所管理的网络设备的信息。 要获取MIB信息信息,可以使用SNMP API或工具。以下是一些常见的SNMP API和工具: 1. Net-SNMP:一个免费的开源SNMP工具包,可以在Linux、Unix和Windows系统上运行。它包括一个命令行工具和多个库,可以用于获取设置和监视SNMP设备的信息。 2. pysnmp:一个用于Python语言的SNMP库。它支持SNMPv1、SNMPv2c和SNMPv3,并可以用于获取设置和监视SNMP设备的信息。 3. SNMP4J:一个用于Java语言的SNMP库。它支持SNMPv1、SNMPv2c和SNMPv3,并可以用于获取设置和监视SNMP设备的信息。 使用这些API或工具,您可以编写程序来获取MIB信息信息。以下是一个使用Net-SNMP获取SNMP设备信息的示例Python程序: ``` import netsnmp # 设置SNMP设备的IP地址、SNMP团体名和OID ip = '192.168.1.1' community = 'public' oid = netsnmp.VarList(netsnmp.Varbind('.1.3.6.1.2.1.1.1.0')) # 通过SNMP获取设备信息 result = netsnmp.snmpwalk(oid, Version=2, DestHost=ip, Community=community) # 输出结果 print(result) ``` 这个程序使用Net-SNMP库来获取IP地址为192.168.1.1的SNMP设备的系统描述信息(OID为.1.3.6.1.2.1.1.1.0),并将结果输出到控制台。 希望这能帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值