MyStringArray.cpp
上传用户:hbytqc8
上传日期:2014-07-31
资源大小:527k
文件大小:6k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. // MyStringArray.cpp: implementation of the MyStringArray class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Rsh.h"
  6. #include "MyStringArray.h"
  7. #include "snmp_pp.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. MyStringArray::MyStringArray()
  17. {
  18. err="";
  19. }
  20. MyStringArray::~MyStringArray()
  21. {
  22. }
  23. void MyStringArray::Add(CString &s_Oid,CString &s_Value)
  24. {
  25. OidStr.Add(s_Oid);
  26. Value.Add(s_Value);
  27. }
  28. CString MyStringArray::GetOid(int index)
  29. {
  30. if (index<OidStr.GetSize())
  31. return OidStr.GetAt(index);
  32. else
  33. return err;
  34. }
  35. CString MyStringArray::GetValue(int index)
  36. {
  37. if (index<Value.GetSize())
  38. return Value.GetAt(index);
  39. else
  40. return err;
  41. }
  42. void MyStringArray::SetValue(int index,CString Str)
  43. {
  44. Value.SetAt(index,(LPCTSTR)Str);
  45. }
  46. int MyStringArray::GetCount()
  47. {
  48. return OidStr.GetSize();
  49. }
  50. void MyStringArray::clear()
  51. {
  52. OidStr.RemoveAll();
  53. Value.RemoveAll();
  54. }
  55. void MyStringArray::GetTree(CString &ip,CString &community,CString &oid_str)           
  56. {
  57. Snmp::socket_startup(); 
  58. UdpAddress address((LPCTSTR)ip); 
  59. address.set_port(161);
  60. //构造一个地址对象;
  61. Oid Baseoid((LPCTSTR)oid_str);
  62. //构造一个OID对象;
  63. snmp_version version=version1;                 
  64. int status;
  65. Snmp snmp(status, 0, false);
  66. //构造一个snmp对象;
  67. Pdu pdu;                             
  68. Vb vb;                           
  69. vb.set_oid(Baseoid);                    
  70. pdu += vb;          
  71. //构造PDU并设置vb;
  72. CTarget ctarget(address); 
  73. ctarget.set_version( version);         
  74. ctarget.set_retry(1);           
  75. ctarget.set_timeout(100); 
  76. ctarget.set_readcommunity((LPCTSTR)community);
  77. //构造一个CTarget对象并设置相应的参数;
  78. SnmpTarget *target;
  79. target = &ctarget;
  80. Oid NextOid(Baseoid);
  81. //构造一个辅助OID;
  82. NextOid+=".1";
  83. CString reply_oid;
  84. CString reply_value;
  85. //返回值;
  86. while (Baseoid.nCompare(Baseoid.len(),NextOid)==0) 
  87. //如果NextOid以Baseoid开始,进行getnext操作;
  88. {
  89. status=snmp.get_next(pdu, *target); 
  90. if (status == SNMP_CLASS_SUCCESS)   
  91. {  
  92.             pdu.get_vb(vb,0);
  93. //取出第一个(仅有一个)VB;
  94.         vb.get_oid(NextOid);
  95. //取出返回的OID,存放到NextOid;
  96. reply_oid=vb.get_printable_oid();
  97. reply_value=vb.get_printable_value();
  98. if (reply_value.GetLength()==0)
  99. reply_value="NULL";
  100.             //如操作成功,取出返回的OID以及值;
  101.              if (Baseoid.nCompare(Baseoid.len(),NextOid)==0)
  102.  {
  103.  reply_oid.TrimLeft();
  104.  reply_oid.TrimRight();
  105.  reply_value.TrimLeft();
  106.  reply_value.TrimRight();
  107.  OidStr.Add(reply_oid);
  108.  Value.Add(reply_value);
  109.  //s2s.Add(reply_oid,reply_value);
  110.  }
  111. //保存到CMapStringToString对象中;
  112.  }
  113. else
  114. {
  115.          AfxMessageBox("读取操作失败,请检查配置!");
  116.  return;
  117. }
  118. vb.set_oid(NextOid);
  119. vb.set_null();
  120. pdu.set_vb(vb,0);
  121. //重新设置vb,准备进入下一循环;
  122. }
  123. Snmp::socket_cleanup(); 
  124. }
  125. void MyStringArray::GetOne(CString &ip,CString &community,
  126.    CString &oid_str,CString &reply)
  127. {
  128. Snmp::socket_startup(); 
  129. UdpAddress address((LPCTSTR)ip); 
  130. address.set_port(161);
  131. Oid oid((LPCTSTR)oid_str); 
  132. snmp_version version=version1;                 
  133. int status;
  134. Snmp snmp(status, 0, false);
  135.  Pdu pdu;                             
  136.  Vb vb;                           
  137.  vb.set_oid(oid);                    
  138.  pdu += vb;                           
  139.  CTarget ctarget(address); 
  140.  ctarget.set_version(version);         
  141.  ctarget.set_retry(1);           
  142.  ctarget.set_timeout(100); 
  143.  ctarget.set_readcommunity((LPCTSTR)community); 
  144.  SnmpTarget *target;
  145.  target = &ctarget;
  146.  status = snmp.get(pdu, *target); 
  147.  if (status == SNMP_CLASS_SUCCESS)   
  148.     {  
  149.      pdu.get_vb(vb,0);
  150.      reply=vb.get_printable_value();
  151.  reply.TrimLeft();
  152.  reply.TrimRight();
  153. }
  154.  else
  155.     reply="";
  156. Snmp::socket_cleanup(); 
  157. }
  158. void MyStringArray::GetNextOne(CString &ip,CString &community,
  159.    CString &oid_str,CString &reply)
  160. {
  161. //ip+=":161";
  162. Snmp::socket_startup(); 
  163. UdpAddress address((LPCTSTR)ip); 
  164. address.set_port(161);
  165. Oid oid((LPCTSTR)oid_str); 
  166. snmp_version version=version1;                 
  167. int status;
  168. Snmp snmp(status, 0, false);
  169.  Pdu pdu;                             
  170.  Vb vb;                           
  171.  vb.set_oid(oid);                    
  172.  pdu += vb;                           
  173.  CTarget ctarget(address); 
  174.  ctarget.set_version(version);         
  175.  ctarget.set_retry(1);           
  176.  ctarget.set_timeout(100); 
  177.  ctarget.set_readcommunity((LPCTSTR)community); 
  178.  SnmpTarget *target;
  179.  target = &ctarget;
  180.  status = snmp.get(pdu, *target); 
  181.  if (status == SNMP_CLASS_SUCCESS)   
  182.     {  
  183.      pdu.get_vb(vb,0);
  184.  oid_str=vb.get_printable_oid();
  185.      reply=vb.get_printable_value();
  186.  oid_str.TrimLeft();
  187.  oid_str.TrimRight();
  188.  reply.TrimLeft();
  189.  reply.TrimRight();
  190. }
  191.   else
  192.     reply="";
  193. Snmp::socket_cleanup(); 
  194. }
  195. bool MyStringArray::GetTwo(CString &ip,CString &community,CString &oid1,CString oid2,
  196.   unsigned long&r1,unsigned long &r2)
  197. {
  198. bool res;
  199. r1=0;
  200. r2=0;
  201. Snmp::socket_startup(); 
  202. UdpAddress address((LPCTSTR)ip); 
  203. address.set_port(161);
  204. Oid cpu_oid,mem_oid;
  205. cpu_oid=oid1;
  206. mem_oid=oid2;
  207. snmp_version version=version1;                 
  208. int status;
  209. Snmp snmp(status, 0, false);
  210.  Pdu pdu;                             
  211.  Vb vb;                           
  212.  vb.set_oid(cpu_oid);                    
  213.  pdu += vb;            
  214.  vb.set_oid(mem_oid);                    
  215.  pdu += vb;       
  216.  CTarget ctarget(address); 
  217.  ctarget.set_version(version);         
  218.  ctarget.set_retry(1);           
  219.  ctarget.set_timeout(300); 
  220.  ctarget.set_readcommunity((LPCTSTR)community); 
  221.  SnmpTarget *target;
  222.  target = &ctarget;
  223.  status = snmp.get(pdu, *target); 
  224.  if (status == SNMP_CLASS_SUCCESS)   
  225.     {  
  226.      pdu.get_vb(vb,0);
  227.  vb.get_value(r1);
  228.      pdu.get_vb(vb,1);
  229.  vb.get_value(r2);
  230.  res=true;
  231.     }
  232.  else
  233.     res=false;
  234. Snmp::socket_cleanup();
  235. return res; 
  236. }