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