zt .NET環境下的SNMP程式設計
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace ConsoleSNMP
{ public class Program
{ static void Main()
{ string host = "192.168.1.1";
string communityName = "public";
SNMP conn = new SNMP();
byte[] response = new byte[1024];
Console.WriteLine("Device SNMP information:");
response = conn.get("GetRequest", host, communityName, "1.3.6.1.2.1.1.5.0");
if (response[0] == 0xff)
{ Console.WriteLine("No response from {0}", host);
return; }
int commlength = Convert.ToInt16(response[6]);
int miblength = Convert.ToInt16(response[23 + commlength]);
int datatype = Convert.ToInt16(response[24 + commlength + miblength]);
int datalength = Convert.ToInt16(response[25 + commlength + miblength]);
int datastart = 26 + commlength + miblength;
string output = Encoding.ASCII.GetString(response, datastart, datalength); Console.WriteLine(" 機器名: - Datatype: {0}, Value: {1}", datatype, output); Console.ReadLine();
} }
class SNMP
{ public byte[] get(string request, string host, string community, string mibstring)
{ byte[] packet = new byte[1024];
byte[] mib = new byte[1024];
int snmplen;
int comlen = community.Length;
string[] mibvals = mibstring.Split('.');
int miblen = mibvals.Length;
int cnt = 0, temp=0, i=0;
int orgmiblen = miblen;
int pos = 0; //將mib字串格式轉換為整數格式,如果值大於128需要多個位元組空間儲存,同時增加mib庫的長度
for (i = 0; i < orgmiblen; i++) { temp = Convert.ToInt16(mibvals[i]);
if (temp > 127) { mib[cnt] = Convert.ToByte(128 + (temp / 128)); mib[cnt + 1] = Convert.ToByte(temp - ((temp / 128) * 128)); cnt += 2; miblen++; }
else { mib[cnt] = Convert.ToByte(temp); cnt++; } }
snmplen = 29 + comlen + miblen - 1; //snmp包序列開始
packet[pos++] = 0x30; packet[pos++] = Convert.ToByte(snmplen - 2); //snmp版本號
packet[pos++] = 0x02;//整數型別
packet[pos++] = 0x01;//長度
packet[pos++] = 0x01;//snmp 版本1 //團體名稱
packet[pos++] = 0x04;//字串型別
packet[pos++] = Convert.ToByte(comlen);//團體名稱長度
byte[] data = Encoding.ASCII.GetBytes(community);
for (i = 0; i < data.Length; i++) { packet[pos++] = data[i];//轉化團體名稱到包中 } //新增GetRequest 或是GetNextRequest 值
if (request == "GetRequest") { packet[pos++] = 0xA0; } else { packet[pos++] = 0xA1; } packet[pos++] = Convert.ToByte(20 + miblen - 1); //Request ID packet[pos++] = 0x02;//整數型別
packet[pos++] = 0x04;//長度
packet[pos++] = 0x00;//SNMP request ID
packet[pos++] = 0x00; ++] = 0x00;
packet[pos++] = 0x01; //錯誤狀態
packet[pos++] = 0x02;//整數型別
packet[pos++] = 0x01;//長度
packet[pos++] = 0x00;//SNMP錯誤型別 //錯誤索引
packet[pos++] = 0x02;//整數型別
packet[pos++] = 0x01;//長度
packet[pos++] = 0x00;//SNMP錯誤索引
packet[pos++] = 0x30;//不同物件序列開始標誌
packet[pos++] = Convert.ToByte(6 + miblen - 1);//不同物件的長度
packet[pos++] = 0x30;//物件序列的開始
packet[pos++] = Convert.ToByte(6 + miblen - 1 - 2);//尺寸
packet[pos++] = 0x06;//物件型別
packet[pos++] = Convert.ToByte(miblen - 1);//長度 //MIB資訊開始位置
packet[pos++] = 0x2b; //把MIB數字放入包中
for (i = 2; i < miblen; i++)
{ packet[pos++] = Convert.ToByte(mib[i]); }
packet[pos++] = 0x05;//空物件值
packet[pos++] = 0x00;//空 //透過Socket把包送到指定機器
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
IPHostEntry ihe = Dns.Resolve(host);
IPEndPoint iep = new IPEndPoint(ihe.AddressList[0], 161);
EndPoint ep = (EndPoint)iep; sock.SendTo(packet, snmplen, SocketFlags.None, iep);
try { int recv = sock.ReceiveFrom(packet, ref ep);//接受返回資料 } catch (SocketException)
{ packet[0] = 0xff; }
return packet;
} } }
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7868752/viewspace-1056070/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 打造一個好用的 Windows 程式設計環境 2.程式設計環境Windows程式設計
- Python 開發環境搭建(5):SNMPPython開發環境
- java程式設計環境Java程式設計
- VC++程式設計環境下的除錯步驟C++程式設計除錯
- GPU程式設計(一):Ubuntu下的CUDA8.0環境搭建GPU程式設計Ubuntu
- linux或者CentOS環境下安裝.NET Core環境LinuxCentOS
- 6款實用的Python程式設計環境!Python程式設計
- Windows核心程式設計(一)-環境搭建Windows程式設計
- googleoppiaPythonWeb程式設計執行環境搭建GoPythonWeb程式設計
- unix環境高階程式設計(中)-程式篇程式設計
- 【轉載】MapReduce程式設計 Intellij Idea配置MapReduce程式設計環境程式設計IntelliJIdea
- 【環境踩坑】ubuntu下jupyter的環境設定問題Ubuntu
- unix環境高階程式設計(下)-高階IO和程式間通訊篇程式設計
- 環境藝術設計 環境藝術設計課程 招聘
- SAP 雲平臺 ABAP 程式設計環境的前世今生程式設計
- 【Tensorflow_DL_Note2】Windows下OpenCv和Tensorflow聯合程式設計環境的配置WindowsOpenCV程式設計
- python環境包生成_CodingPark程式設計公園Python程式設計
- 程式設計入門18:Python生產環境程式設計Python
- Spark程式設計環境搭建及WordCount例項Spark程式設計
- Linux環境程式設計程式間通訊機制理解Linux程式設計
- Windows環境下的Nginx環境搭建WindowsNginx
- 容器雲環境下如何設計儲存架構?架構
- 《Linux系統程式設計訓練營》5_環境變數程式設計Linux程式設計變數
- U-net的環境配置
- Linux(CentOS)下.NET,mono環境的安裝步驟整理LinuxCentOSMono
- linux環境程式設計(2): 使用pipe完成程式間通訊Linux程式設計
- NOI Linux 基礎知識與程式設計環境Linux程式設計
- unix環境高階程式設計(上)-檔案篇程式設計
- Java環境下載、配置環境、編寫我的第一個Java程式Java
- Unix環境高階程式設計——開源的標準化努力程式設計
- 當前就業環境下,程式設計師應該自降薪資應聘嗎?就業程式設計師
- linux環境程式設計(3): 使用POSIX IPC完成程式間通訊Linux程式設計
- 讀《我和Labview》8按自己喜好設定程式設計環境View程式設計
- 新硬體環境下日誌模組的設計與演進
- 程式設計新手最好別依賴整合開發環境程式設計開發環境
- .NET的併發程式設計(TPL程式設計)是什麼?程式設計
- .NET 中的併發程式設計程式設計
- .NET 程式設計師的 Playground :LINQPad程式設計師
- 打造一個好用的 Windows 程式設計環境 1.常用軟體Windows程式設計