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 "NetMap.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. bool MyStringArray::GetTree(CString &ip,CString &community,CString &oid_str)           
  56. {
  57.  bool result=true;
  58. Snmp::socket_startup(); 
  59. UdpAddress address((LPCTSTR)ip); 
  60. address.set_port(161);
  61. //构造一个地址对象;
  62. Oid Baseoid((LPCTSTR)oid_str);
  63. //构造一个OID对象;
  64. snmp_version version=version1;                 
  65. int status;
  66. Snmp snmp(status, 0, false);
  67. //构造一个snmp对象;
  68. Pdu pdu;                             
  69. Vb vb;                           
  70. vb.set_oid(Baseoid);                    
  71. pdu += vb;          
  72. //构造PDU并设置vb;
  73. CTarget ctarget(address); 
  74. ctarget.set_version( version);         
  75. ctarget.set_retry(1);           
  76. ctarget.set_timeout(100); 
  77. ctarget.set_readcommunity((LPCTSTR)community);
  78. //构造一个CTarget对象并设置相应的参数;
  79. SnmpTarget *target;
  80. target = &ctarget;
  81. Oid NextOid(Baseoid);
  82. //构造一个辅助OID;
  83. NextOid+=".1";
  84. CString reply_oid;
  85. CString reply_value;
  86. //返回值;
  87. while (Baseoid.nCompare(Baseoid.len(),NextOid)==0) 
  88. //如果NextOid以Baseoid开始,进行getnext操作;
  89. {
  90. status=snmp.get_next(pdu, *target); 
  91. if (status == SNMP_CLASS_SUCCESS)   
  92. {  
  93.             pdu.get_vb(vb,0);
  94. //取出第一个(仅有一个)VB;
  95.         vb.get_oid(NextOid);
  96. //取出返回的OID,存放到NextOid;
  97. reply_oid=vb.get_printable_oid();
  98. reply_value=vb.get_printable_value();
  99. if (reply_value.GetLength()==0)
  100. reply_value="NULL";
  101.             //如操作成功,取出返回的OID以及值;
  102.              if (Baseoid.nCompare(Baseoid.len(),NextOid)==0)
  103.  {
  104.  reply_oid.TrimLeft();
  105.  reply_oid.TrimRight();
  106.  reply_value.TrimLeft();
  107.  reply_value.TrimRight();
  108.  OidStr.Add(reply_oid);
  109.  Value.Add(reply_value);
  110.  //s2s.Add(reply_oid,reply_value);
  111.  }
  112. //保存到CMapStringToString对象中;
  113.   }
  114.      else
  115. {
  116.         result=false;
  117.     break;
  118. }
  119. vb.set_oid(NextOid);
  120. vb.set_null();
  121. pdu.set_vb(vb,0);
  122. //重新设置vb,准备进入下一循环;
  123. }
  124. Snmp::socket_cleanup(); 
  125. return result;
  126. }
  127. void MyStringArray::GetOne(CString &ip,CString &community,
  128.    CString &oid_str,CString &reply)
  129. {
  130. //ip+=":161";
  131. Snmp::socket_startup(); 
  132. UdpAddress address((LPCTSTR)ip); 
  133. address.set_port(161);
  134. Oid oid((LPCTSTR)oid_str); 
  135. snmp_version version=version1;                 
  136. int status;
  137. Snmp snmp(status, 0, false);
  138.  Pdu pdu;                             
  139.  Vb vb;                           
  140.  vb.set_oid(oid);                    
  141.  pdu += vb;                           
  142.  CTarget ctarget(address); 
  143.  ctarget.set_version(version);         
  144.  ctarget.set_retry(1);           
  145.  ctarget.set_timeout(100); 
  146.  ctarget.set_readcommunity((LPCTSTR)community); 
  147.  SnmpTarget *target;
  148.  target = &ctarget;
  149.  status = snmp.get(pdu, *target); 
  150.  if (status == SNMP_CLASS_SUCCESS)   
  151.     {  
  152.      pdu.get_vb(vb,0);
  153. // CString reply_oid=vb.get_printable_oid();
  154.      reply=vb.get_printable_value();
  155.  reply.TrimLeft();
  156.  reply.TrimRight();
  157. }
  158. Snmp::socket_cleanup(); 
  159. }
  160. void MyStringArray::GetNextOne(CString &ip,CString &community,
  161.    CString &oid_str,CString &reply)
  162. {
  163. //ip+=":161";
  164. Snmp::socket_startup(); 
  165. UdpAddress address((LPCTSTR)ip); 
  166. address.set_port(161);
  167. Oid oid((LPCTSTR)oid_str); 
  168. snmp_version version=version1;                 
  169. int status;
  170. Snmp snmp(status, 0, false);
  171.  Pdu pdu;                             
  172.  Vb vb;                           
  173.  vb.set_oid(oid);                    
  174.  pdu += vb;                           
  175.  CTarget ctarget(address); 
  176.  ctarget.set_version(version);         
  177.  ctarget.set_retry(1);           
  178.  ctarget.set_timeout(100); 
  179.  ctarget.set_readcommunity((LPCTSTR)community); 
  180.  SnmpTarget *target;
  181.  target = &ctarget;
  182.  status = snmp.get(pdu, *target); 
  183.  if (status == SNMP_CLASS_SUCCESS)   
  184.     {  
  185.      pdu.get_vb(vb,0);
  186.  oid_str=vb.get_printable_oid();
  187.      reply=vb.get_printable_value();
  188.  oid_str.TrimLeft();
  189.  oid_str.TrimRight();
  190.  reply.TrimLeft();
  191.  reply.TrimRight();
  192. }
  193. Snmp::socket_cleanup(); 
  194. }
  195. void MyStringArray::Set(CString &ip,CString &community,
  196. CString &oid_str,CString value,int x)
  197. {
  198. Snmp::socket_startup(); 
  199. UdpAddress address((LPCTSTR)ip); 
  200. address.set_port(161);
  201. Oid oid((LPCTSTR)oid_str); 
  202. snmp_version version=version1;                 
  203. int status;
  204.  Pdu pdu;                             
  205.  Vb vb;                           
  206.  vb.set_oid(oid); 
  207.  switch (x)
  208. {
  209.   case 0:
  210.  {
  211.       int iv=atoi((LPCTSTR)value);
  212.       vb.set_value(iv);
  213.   break;
  214.  }
  215.   case 1:
  216.  {
  217.       OctetStr octetstr((LPCTSTR)value);
  218.       if (octetstr.valid()) 
  219.   vb.set_value(octetstr);
  220.   break;
  221.  }
  222.  }
  223.   pdu += vb; 
  224.  CTarget ctarget(address); 
  225.  ctarget.set_version(version);         
  226.  ctarget.set_retry(1);           
  227.  ctarget.set_timeout(300); 
  228.  ctarget.set_writecommunity((LPCTSTR)community); 
  229.  SnmpTarget *target;
  230.  target = &ctarget;    
  231.  Snmp snmp(status, 0, false);
  232.  if ( status != SNMP_CLASS_SUCCESS) 
  233.  {
  234.       AfxMessageBox("SNMP++ Session Create Failed");
  235.       return ;
  236.    }
  237. status=snmp.set(pdu, *target);
  238. Snmp::socket_cleanup(); 
  239. }