亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#簡單實現SNMP的方法

2019-10-29 21:41:07
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C#簡單實現SNMP的方法,通過一個簡單的自定義類分析了C#實現SNMP的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了C#簡單實現SNMP的方法。分享給大家供大家參考。具體如下:

 

 
  1. /** 
  2. C# Network Programming  
  3. by Richard Blum 
  4. Publisher: Sybex  
  5. ISBN: 0782141765 
  6. */ 
  7. using System; 
  8. using System.Text; 
  9. using System.Net; 
  10. using System.Net.Sockets; 
  11. public class SimpleSNMP 
  12. public static void Main(string[] argv) 
  13. int commlength, miblength, datatype, datalength, datastart; 
  14. int uptime = 0; 
  15. string output; 
  16. SNMP conn = new SNMP(); 
  17. byte[] response = new byte[1024]; 
  18. Console.WriteLine("Device SNMP information:"); 
  19. // Send sysName SNMP request 
  20. response = conn.get("get", argv[0], argv[1], "1.3.6.1.2.1.1.5.0"); 
  21. if (response[0] == 0xff) 
  22. Console.WriteLine("No response from {0}", argv[0]); 
  23. return
  24. // If response, get the community name and MIB lengths 
  25. commlength = Convert.ToInt16(response[6]); 
  26. miblength = Convert.ToInt16(response[23 + commlength]); 
  27. // Extract the MIB data from the SNMP response 
  28. datatype = Convert.ToInt16(response[24 + commlength + miblength]); 
  29. datalength = Convert.ToInt16(response[25 + commlength + miblength]); 
  30. datastart = 26 + commlength + miblength; 
  31. output = Encoding.ASCII.GetString(response, datastart, datalength); 
  32. Console.WriteLine(" sysName - Datatype: {0}, Value: {1}"
  33. datatype, output); 
  34. // Send a sysLocation SNMP request 
  35. response = conn.get("get", argv[0], argv[1], "1.3.6.1.2.1.1.6.0"); 
  36. if (response[0] == 0xff) 
  37. Console.WriteLine("No response from {0}", argv[0]); 
  38. return
  39. // If response, get the community name and MIB lengths 
  40. commlength = Convert.ToInt16(response[6]); 
  41. miblength = Convert.ToInt16(response[23 + commlength]); 
  42. // Extract the MIB data from the SNMP response 
  43. datatype = Convert.ToInt16(response[24 + commlength + miblength]); 
  44. datalength = Convert.ToInt16(response[25 + commlength + miblength]); 
  45. datastart = 26 + commlength + miblength; 
  46. output = Encoding.ASCII.GetString(response, datastart, datalength); 
  47. Console.WriteLine(" sysLocation - Datatype: {0}, Value: {1}", datatype, output); 
  48. // Send a sysContact SNMP request 
  49. response = conn.get("get", argv[0], argv[1], "1.3.6.1.2.1.1.4.0"); 
  50. if (response[0] == 0xff) 
  51. Console.WriteLine("No response from {0}", argv[0]); 
  52. return
  53. // Get the community and MIB lengths 
  54. commlength = Convert.ToInt16(response[6]); 
  55. miblength = Convert.ToInt16(response[23 + commlength]); 
  56. // Extract the MIB data from the SNMP response 
  57. datatype = Convert.ToInt16(response[24 + commlength + miblength]); 
  58. datalength = Convert.ToInt16(response[25 + commlength + miblength]); 
  59. datastart = 26 + commlength + miblength; 
  60. output = Encoding.ASCII.GetString(response, datastart, datalength); 
  61. Console.WriteLine(" sysContact - Datatype: {0}, Value: {1}"
  62. datatype, output); 
  63. // Send a SysUptime SNMP request 
  64. response = conn.get("get", argv[0], argv[1], "1.3.6.1.2.1.1.3.0"); 
  65. if (response[0] == 0xff) 
  66. Console.WriteLine("No response from {0}", argv[0]); 
  67. return
  68. // Get the community and MIB lengths of the response 
  69. commlength = Convert.ToInt16(response[6]); 
  70. miblength = Convert.ToInt16(response[23 + commlength]); 
  71. // Extract the MIB data from the SNMp response 
  72. datatype = Convert.ToInt16(response[24 + commlength + miblength]); 
  73. datalength = Convert.ToInt16(response[25 + commlength + miblength]); 
  74. datastart = 26 + commlength + miblength; 
  75. // The sysUptime value may by a multi-byte integer 
  76. // Each byte read must be shifted to the higher byte order 
  77. while(datalength > 0) 
  78. uptime = (uptime << 8) + response[datastart++]; 
  79. datalength--; 
  80. Console.WriteLine(" sysUptime - Datatype: {0}, Value: {1}"
  81. datatype, uptime); 
  82. class SNMP 
  83. public SNMP() 
  84. public byte[] get(string request, string host, string community, string mibstring) 
  85. byte[] packet = new byte[1024]; 
  86. byte[] mib = new byte[1024]; 
  87. int snmplen; 
  88. int comlen = community.Length; 
  89. string[] mibvals = mibstring.Split('.'); 
  90. int miblen = mibvals.Length; 
  91. int cnt = 0, temp, i; 
  92. int orgmiblen = miblen; 
  93. int pos = 0; 
  94. // Convert the string MIB into a byte array of integer values 
  95. // Unfortunately, values over 128 require multiple bytes 
  96. // which also increases the MIB length 
  97. for (i = 0; i < orgmiblen; i++) 
  98. temp = Convert.ToInt16(mibvals[i]); 
  99. if (temp > 127) 
  100. mib[cnt] = Convert.ToByte(128 + (temp / 128)); 
  101. mib[cnt + 1] = Convert.ToByte(temp - ((temp / 128) * 128)); 
  102. cnt += 2; 
  103. miblen++; 
  104. else 
  105. mib[cnt] = Convert.ToByte(temp); 
  106. cnt++; 
  107. snmplen = 29 + comlen + miblen - 1; //Length of entire SNMP packet 
  108. //The SNMP sequence start 
  109. packet[pos++] = 0x30; //Sequence start 
  110. packet[pos++] = Convert.ToByte(snmplen - 2); //sequence size 
  111. //SNMP version 
  112. packet[pos++] = 0x02; //Integer type 
  113. packet[pos++] = 0x01; //length 
  114. packet[pos++] = 0x00; //SNMP version 1 
  115. //Community name 
  116. packet[pos++] = 0x04; // String type 
  117. packet[pos++] = Convert.ToByte(comlen); //length 
  118. //Convert community name to byte array 
  119. byte[] data = Encoding.ASCII.GetBytes(community); 
  120. for (i = 0; i < data.Length; i++) 
  121. packet[pos++] = data[i]; 
  122. //Add GetRequest or GetNextRequest value 
  123. if (request == "get"
  124. packet[pos++] = 0xA0; 
  125. else 
  126. packet[pos++] = 0xA1; 
  127. packet[pos++] = Convert.ToByte(20 + miblen - 1); //Size of total MIB 
  128. //Request ID 
  129. packet[pos++] = 0x02; //Integer type 
  130. packet[pos++] = 0x04; //length 
  131. packet[pos++] = 0x00; //SNMP request ID 
  132. packet[pos++] = 0x00; 
  133. packet[pos++] = 0x00; 
  134. packet[pos++] = 0x01; 
  135. //Error status 
  136. packet[pos++] = 0x02; //Integer type 
  137. packet[pos++] = 0x01; //length 
  138. packet[pos++] = 0x00; //SNMP error status 
  139. //Error index 
  140. packet[pos++] = 0x02; //Integer type 
  141. packet[pos++] = 0x01; //length 
  142. packet[pos++] = 0x00; //SNMP error index 
  143. //Start of variable bindings 
  144. packet[pos++] = 0x30; //Start of variable bindings sequence 
  145. packet[pos++] = Convert.ToByte(6 + miblen - 1); // Size of variable binding 
  146. packet[pos++] = 0x30; //Start of first variable bindings sequence 
  147. packet[pos++] = Convert.ToByte(6 + miblen - 1 - 2); // size 
  148. packet[pos++] = 0x06; //Object type 
  149. packet[pos++] = Convert.ToByte(miblen - 1); //length 
  150. //Start of MIB 
  151. packet[pos++] = 0x2b; 
  152. //Place MIB array in packet 
  153. for(i = 2; i < miblen; i++) 
  154. packet[pos++] = Convert.ToByte(mib[i]); 
  155. packet[pos++] = 0x05; //Null object value 
  156. packet[pos++] = 0x00; //Null 
  157. //Send packet to destination 
  158. Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 
  159. ProtocolType.Udp); 
  160. sock.SetSocketOption(SocketOptionLevel.Socket, 
  161. SocketOptionName.ReceiveTimeout, 5000); 
  162. IPHostEntry ihe = Dns.Resolve(host); 
  163. IPEndPoint iep = new IPEndPoint(ihe.AddressList[0], 161); 
  164. EndPoint ep = (EndPoint)iep; 
  165. sock.SendTo(packet, snmplen, SocketFlags.None, iep); 
  166. //Receive response from packet 
  167. try 
  168. int recv = sock.ReceiveFrom(packet, ref ep); 
  169. catch (SocketException) 
  170. packet[0] = 0xff; 
  171. return packet; 
  172. public string getnextMIB(byte[] mibin) 
  173. string output = "1.3"
  174. int commlength = mibin[6]; 
  175. int mibstart = 6 + commlength + 17; //find the start of the mib section 
  176. //The MIB length is the length defined in the SNMP packet 
  177. // minus 1 to remove the ending .0, which is not used 
  178. int miblength = mibin[mibstart] - 1; 
  179. mibstart += 2; //skip over the length and 0x2b values 
  180. int mibvalue; 
  181. for(int i = mibstart; i < mibstart + miblength; i++) 
  182. mibvalue = Convert.ToInt16(mibin[i]); 
  183. if (mibvalue > 128) 
  184. mibvalue = (mibvalue/128)*128 + Convert.ToInt16(mibin[i+1]); 
  185. //ERROR here, it should be mibvalue = (mibvalue-128)*128 + Convert.ToInt16(mibin[i+1]); 
  186. //for mib values greater than 128, the math is not adding up correctly  
  187. i++; 
  188. output += "." + mibvalue; 
  189. return output; 

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品永久免费精品| 亚洲在线免费看| 久久久久女教师免费一区| 欧美大尺度在线观看| 国产成人亚洲综合青青| 欧美电影免费观看电视剧大全| 日韩亚洲欧美成人| 青草成人免费视频| 91青草视频久久| 日韩中文字幕免费看| 亚洲国产成人精品电影| 国产亚洲欧洲在线| 2019国产精品自在线拍国产不卡| 欧美成人精品三级在线观看| 欧美成人免费播放| 亚洲色图综合久久| 久久亚洲私人国产精品va| 欧美一级成年大片在线观看| 国产精品视频在线观看| 日本精品视频在线播放| 国产一区二区丝袜| 91探花福利精品国产自产在线| 国产精品久久久亚洲| 色一情一乱一区二区| 国产亚洲精品一区二555| 日韩电视剧在线观看免费网站| 亚洲视频网站在线观看| 亚洲精品videossex少妇| 成人国产精品av| 国内精品在线一区| 色www亚洲国产张柏芝| 日本亚洲欧美三级| 91免费的视频在线播放| 亚洲欧美日韩中文在线| 在线精品国产欧美| 国产激情综合五月久久| 欧美电影免费在线观看| 在线看日韩av| 亚洲欧美日韩一区二区在线| 亚洲人午夜色婷婷| 欧美激情一级二级| 日韩女优人人人人射在线视频| 国产91精品高潮白浆喷水| 国产伦精品一区二区三区精品视频| 91av视频在线| 久久久久久久久国产| 欧美国产高跟鞋裸体秀xxxhd| 欧美成人午夜激情| 中文字幕在线看视频国产欧美在线看完整| 日韩中文字幕第一页| 国产丝袜精品第一页| 91精品视频一区| 久久久久久av| 欧美日韩精品在线播放| 992tv在线成人免费观看| 91精品久久久久久久久久久久久久| 日本午夜在线亚洲.国产| 8090理伦午夜在线电影| 亚洲国产一区自拍| 亚洲电影免费观看高清完整版在线| 日韩欧美在线字幕| 91av网站在线播放| 黑人欧美xxxx| 国语自产精品视频在线看| 成人欧美一区二区三区黑人| 高清视频欧美一级| 亚洲在线一区二区| 久久偷看各类女兵18女厕嘘嘘| 国产精品中文久久久久久久| 日韩欧美在线视频观看| 日韩电影视频免费| 91日本在线视频| 中文字幕亚洲专区| 成人免费网站在线看| 久久精品视频在线播放| www.久久撸.com| 国产91精品不卡视频| 亚洲字幕在线观看| 日韩中文字幕视频在线| 亚洲国产成人91精品| 欧美日韩在线视频观看| 97久久久久久| 亚洲精品成人免费| 国产精品视频久| 国产成人精品视频在线观看| 亚洲精品二三区| 久久久久久97| 69**夜色精品国产69乱| 亚洲va久久久噜噜噜| 久操成人在线视频| 久久久久久久久亚洲| 日韩av电影免费观看高清| 国产精品美女久久久久av超清| 亚洲国产精品一区二区久| 国产亚洲美女久久| 青草热久免费精品视频| 人九九综合九九宗合| 菠萝蜜影院一区二区免费| 中文字幕v亚洲ⅴv天堂| 综合激情国产一区| 日韩电视剧在线观看免费网站| 久久精品视频一| 亚洲精品国产suv| 超碰精品一区二区三区乱码| 亚洲美女免费精品视频在线观看| 97香蕉久久超级碰碰高清版| 91经典在线视频| 亚洲图片欧美日产| 色香阁99久久精品久久久| 欧美日韩午夜剧场| 欧美黑人一区二区三区| 国产精国产精品| 久久久久久久999| 97在线看福利| 国产在线精品播放| 亚洲va男人天堂| 欧美久久精品午夜青青大伊人| 久久视频这里只有精品| 黄色成人在线免费| 日韩免费中文字幕| 国产精品久久综合av爱欲tv| 日韩天堂在线视频| 久久久91精品| 色噜噜亚洲精品中文字幕| 日韩视频免费看| 国产精品视频最多的网站| 日韩免费看的电影电视剧大全| 日韩中文字幕在线精品| 国产+成+人+亚洲欧洲| 亚洲日本中文字幕免费在线不卡| 亚洲天堂av在线播放| 高清欧美一区二区三区| 欧美黑人性猛交| 亚洲人午夜色婷婷| 久久99久国产精品黄毛片入口| 九九热精品视频| 97视频在线观看播放| 亚洲国产另类 国产精品国产免费| 国产精品白嫩初高中害羞小美女| 色偷偷av一区二区三区乱| 久久精品国产一区二区电影| 国产精品久久久久久av| 亚洲精品国产精品乱码不99按摩| 国产精品女主播视频| 亚洲色无码播放| 欧洲亚洲在线视频| 欧美激情视频在线免费观看 欧美视频免费一| 国产精品www色诱视频| 日本中文字幕不卡免费| 热久久99这里有精品| 国产精品大片wwwwww| 亚洲电影第1页| 在线精品91av| 久久久国产精品x99av| 欧美成人精品在线视频| 亚洲欧美一区二区三区情侣bbw| 8x海外华人永久免费日韩内陆视频| 欧美国产日韩一区| 中文字幕精品在线| 久久在精品线影院精品国产| 日韩久久免费视频| 乱亲女秽乱长久久久| 精品久久久久久亚洲国产300| 热久久视久久精品18亚洲精品|