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 "LanFlow.h"
  6. #include "MyStringArray.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. MyStringArray::MyStringArray()
  16. {
  17. err="";
  18. }
  19. MyStringArray::~MyStringArray()
  20. {
  21. }
  22. void MyStringArray::Add(CString &s_Oid,CString &s_Value)
  23. {
  24. OidStr.Add(s_Oid);
  25. Value.Add(s_Value);
  26. }
  27. CString MyStringArray::GetOid(int index)
  28. {
  29. if (index<OidStr.GetSize())
  30. return OidStr.GetAt(index);
  31. else
  32. return err;
  33. }
  34. CString MyStringArray::GetValue(int index)
  35. {
  36. if (index<Value.GetSize())
  37. return Value.GetAt(index);
  38. else
  39. return err;
  40. }
  41. void MyStringArray::SetValue(int index,CString Str)
  42. {
  43. Value.SetAt(index,(LPCTSTR)Str);
  44. }
  45. int MyStringArray::GetCount()
  46. {
  47. return OidStr.GetSize();
  48. }
  49. void MyStringArray::clear()
  50. {
  51. OidStr.RemoveAll();
  52. Value.RemoveAll();
  53. }
  54. void MyStringArray::GetTree(CString &ip,CString &community,CString &oid_str)           
  55. {
  56. // ip+=":161";
  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. vb.set_oid(NextOid);
  114. vb.set_null();
  115. pdu.set_vb(vb,0);
  116. //重新设置vb,准备进入下一循环;
  117. }
  118. Snmp::socket_cleanup(); 
  119. }
  120. void MyStringArray::GetOne(CString &ip,CString &community,
  121.    CString &oid_str,CString &reply)
  122. {
  123. //ip+=":161";
  124. Snmp::socket_startup(); 
  125. UdpAddress address((LPCTSTR)ip); 
  126. address.set_port(161);
  127. Oid oid((LPCTSTR)oid_str); 
  128. snmp_version version=version1;                 
  129. int status;
  130. Snmp snmp(status, 0, false);
  131.  Pdu pdu;                             
  132.  Vb vb;                           
  133.  vb.set_oid(oid);                    
  134.  pdu += vb;                           
  135.  CTarget ctarget(address); 
  136.  ctarget.set_version(version);         
  137.  ctarget.set_retry(1);           
  138.  ctarget.set_timeout(100); 
  139.  ctarget.set_readcommunity((LPCTSTR)community); 
  140.  SnmpTarget *target;
  141.  target = &ctarget;
  142.  status = snmp.get(pdu, *target); 
  143.  if (status == SNMP_CLASS_SUCCESS)   
  144.     {  
  145.      pdu.get_vb(vb,0);
  146. // CString reply_oid=vb.get_printable_oid();
  147.      reply=vb.get_printable_value();
  148.  reply.TrimLeft();
  149.  reply.TrimRight();
  150. }
  151. Snmp::socket_cleanup(); 
  152. }
  153. void MyStringArray::GetNextOne(CString &ip,CString &community,
  154.    CString &oid_str,CString &reply)
  155. {
  156. //ip+=":161";
  157. Snmp::socket_startup(); 
  158. UdpAddress address((LPCTSTR)ip); 
  159. address.set_port(161);
  160. Oid oid((LPCTSTR)oid_str); 
  161. snmp_version version=version1;                 
  162. int status;
  163. Snmp snmp(status, 0, false);
  164.  Pdu pdu;                             
  165.  Vb vb;                           
  166.  vb.set_oid(oid);                    
  167.  pdu += vb;                           
  168.  CTarget ctarget(address); 
  169.  ctarget.set_version(version);         
  170.  ctarget.set_retry(1);           
  171.  ctarget.set_timeout(100); 
  172.  ctarget.set_readcommunity((LPCTSTR)community); 
  173.  SnmpTarget *target;
  174.  target = &ctarget;
  175.  status = snmp.get(pdu, *target); 
  176.  if (status == SNMP_CLASS_SUCCESS)   
  177.     {  
  178.      pdu.get_vb(vb,0);
  179.  oid_str=vb.get_printable_oid();
  180.      reply=vb.get_printable_value();
  181.  oid_str.TrimLeft();
  182.  oid_str.TrimRight();
  183.  reply.TrimLeft();
  184.  reply.TrimRight();
  185. }
  186. Snmp::socket_cleanup(); 
  187. }
  188. void MyStringArray::Set(CString &ip,CString &community,
  189. CString &oid_str,CString value,int x)
  190. {
  191. Snmp::socket_startup(); 
  192. UdpAddress address((LPCTSTR)ip); 
  193. address.set_port(161);
  194. Oid oid((LPCTSTR)oid_str); 
  195. snmp_version version=version1;                 
  196. int status;
  197.  Pdu pdu;                             
  198.  Vb vb;                           
  199.  vb.set_oid(oid); 
  200.  switch (x)
  201. {
  202.   case 0:
  203.  {
  204.       int iv=atoi((LPCTSTR)value);
  205.       vb.set_value(iv);
  206.   break;
  207.  }
  208.   case 1:
  209.  {
  210.       OctetStr octetstr((LPCTSTR)value);
  211.       if (octetstr.valid()) 
  212.   vb.set_value(octetstr);
  213.   break;
  214.  }
  215.  }
  216.   pdu += vb; 
  217.  CTarget ctarget(address); 
  218.  ctarget.set_version(version);         
  219.  ctarget.set_retry(1);           
  220.  ctarget.set_timeout(300); 
  221.  ctarget.set_writecommunity((LPCTSTR)community); 
  222.  SnmpTarget *target;
  223.  target = &ctarget;    
  224.  Snmp snmp(status, 0, false);
  225.  if ( status != SNMP_CLASS_SUCCESS) 
  226.  {
  227.       AfxMessageBox("SNMP++ Session Create Failed");
  228.       return ;
  229.    }
  230. status=snmp.set(pdu, *target);
  231.    // if ( status != SNMP_CLASS_SUCCESS) 
  232. //  AfxMessageBox("设置操作失败!");
  233. Snmp::socket_cleanup();  // Shut down socket subsystem
  234. }