C# İle SNMP Programlama

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Sharp
    Sharp's avatar
    Kayıt Tarihi: 02/Temmuz/2007
    Erkek

    arkadaşlar bu konuda bilgisi olan bu kütüphaneyle uğraşmış olan varmı elimdeki mevcut sunucuların bilgilerini snmp yardımıyla çekmek istiyorum 

    bu konuda elinde örnek  kod yada döküman olan varmı


    www.yesilgrow.com - Growshop
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    renegadealien
    renegadealien's avatar
    Üstün Hizmet Madalyası Savaş Madalyası Başarı Madalyası Üstün Hizmet Madalyası Developer Madalyası
    Kayıt Tarihi: 23/Mart/2003
    Erkek

    Uğraştığım zamanlarda codeprojectte güzel bi örnek bulmuştum, bi bakiim sende bak.


    10.05.2013 tarihli google arama sonucu : Aradığınız - "herşeyin hayırlısı rampanın bayırlısı" - ile ilgili hiçbir arama sonucu mevcut değil. Kendi özlü sözümdür, kaynak belirterek kullanınız.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    UCANTENEKE
    UCANTENEKE's avatar
    Kayıt Tarihi: 30/Ağustos/2005
    Erkek
    baktınız mı??

    Bence bu dünya üzerinde seçilmiş ırk diye bi kavram varsa bu ırk kesin ruslardır.Onlar daha iyisini yapana kadar en iyisi onlar
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    TxT
    TxT's avatar
    Kayıt Tarihi: 13/Eylül/2007
    Erkek

    Bunlar iş görürmü ? 

    SNMP library - http://www.codeproject.com/KB/cs/SNMPDLL.aspx

    SNMP agent and client in C# -  http://www.codeproject.com/Questions/240592/SNMP-agent-and-client-in-Csharp

    Tool to traverse MIB tree using SNMP - http://www.codeproject.com/KB/IP/MIB_Browser_tool.aspx

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    mstraker
    mstraker's avatar
    Kayıt Tarihi: 11/Haziran/2007
    Erkek

    SNMP ile ilgili döküman bulmak zor genelde standartları ile ilgili kaynaklar bulursun.

    Ben kendimce bir sınıf yazmıştım standartlarından yola çıkarak onu paylaşayım.

    SNMP protokolünün kullandığı port 161. port tur.(Trap bilgilendirmesi hariç : Trap olayı da otomatik bilgilendirme mekanizması snmp nin istediğin bir durumda değişiklik olduğunda haber ediyor)

    Bunun dışında Program & Features kısmından bilgisini çekmek istediğin makinanın SNMP özelliğini aktif etmelisin.

    Bu benim snmp sınıf kodum :

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    
    namespace SnmpManager
    {
        class SNMP
        {
            public SNMP()
            {
            }
    
            #region SNMP istek için GET Methodu
                    public byte[] get(string request, string host, string community, string mibstring)
                    {
                        #region DEĞİŞKEN TANIMLARI
                        // Mesaj paketi
                        byte[] packet = new byte[1024];
                        byte[] mib = new byte[1024];
    
                        // SNMP paketinin uzunluğunu belirliyoruz    
                        int snmplen;
    
                        // Community uzunluğu
                        // Bu uzunluğa göre paket belirleniyor
                        int comlen = community.Length;
                        string[] mibvals = mibstring.Split('.');
                        int miblen = mibvals.Length;
                        int cnt = 0, temp, i;
                        int orgmiblen = miblen;
    
                        // Paketin bayt dizisi için kullanılan sayısal değer 
                        int pos = 0;
                        #endregion
    
                        #region String MIB ->> Byte[] Integer
                        // String MIB değerini integer byte dizisine çeviriyoruz
                        // 128 den büyük değerler için çift byte alıyoruz
                        // Buna göre de mib uzunluğu artıyor
                        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++;
                            }
                        }
                        #endregion
    
                        #region SNMP MESAJ FORMATI
                        #region Tüm SNMP paketinin uzunluğu
                        snmplen = 29 + comlen + miblen - 1;
                        #endregion
    
                        #region SNMP Dizisi Başlangıcı :  0x30 --> Başla
                        packet[pos++] = 0x30;
                        #endregion
    
                        #region SNMP dizi uzunluğu
                        packet[pos++] = Convert.ToByte(snmplen - 2);
                        #endregion
    
                        #region SNMP versiyonu belirtiyoruz  :      SNMP Versiyon 1 --> 0 , SNMP Versiyon 2 --> 1  , SNMP Versiyon 3 --> 2
                        packet[pos++] = 0x02; //Integer tipinde
                        packet[pos++] = 0x01; //uzunluk
                        packet[pos++] = 0x00; //SNMP version 
                        #endregion
    
                        #region Community adını belirtiyoruz
                        packet[pos++] = 0x04; // String tipinde
                        #endregion
    
                        #region Community uzunluğu
                        packet[pos++] = Convert.ToByte(comlen);
                        #endregion
    
                        #region Community ismini byte dizisine çeviriyoruz
                        byte[] comToByte = Encoding.ASCII.GetBytes(community);
    
                        for (i = 0; i < comToByte.Length; i++)
                        {
                            packet[pos++] = comToByte[i];
                        }
                        #endregion
    
                        #region Mesaj tipini GetRequest olarak belirliyoruz :
                        packet[pos++] = 0xA0;
                        #endregion
    
                        #region MIB nin toplam boyutu
                        packet[pos++] = Convert.ToByte(20 + miblen - 1);
                        #endregion
    
                        #region Request ID
                        packet[pos++] = 0x02; //Integer type
                        packet[pos++] = 0x04; //length
                        packet[pos++] = 0x00; //SNMP request ID
                        packet[pos++] = 0x00;
                        packet[pos++] = 0x00;
                        packet[pos++] = 0x01;
                        #endregion
    
                        #region Error status
                        packet[pos++] = 0x02; //Integer type
                        packet[pos++] = 0x01; //length
                        packet[pos++] = 0x00; //SNMP error status
                        #endregion
    
                        #region Error index
                        packet[pos++] = 0x02; //Integer type
                        packet[pos++] = 0x01; //length
                        packet[pos++] = 0x00; //SNMP error index
                        #endregion
    
                        #region Start of variable bindings
                        packet[pos++] = 0x30; //Start of variable bindings sequence
                        packet[pos++] = Convert.ToByte(6 + miblen - 1); // Size of variable binding
                        packet[pos++] = 0x30; //Start of first variable bindings sequence
                        packet[pos++] = Convert.ToByte(6 + miblen - 1 - 2); // size
                        packet[pos++] = 0x06; //Object type
                        packet[pos++] = Convert.ToByte(miblen - 1); //length
                        #endregion
    
                        #region Start of MIB
                        packet[pos++] = 0x2b;
                        #endregion
    
    
                        #region Place MIB array in packet
                        for (i = 2; i < miblen; i++)
                            packet[pos++] = Convert.ToByte(mib[i]);
                        packet[pos++] = 0x05; //Null object value
                        packet[pos++] = 0x00; //Null
                        #endregion
    
    
                        #endregion
    
                        #region MESAJ HEDEFE YOLLANIYOR
    
                        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);
    
                        #endregion
    
                        #region MESAJA GELEN CEVAP ALINIYOR
    
                        try
                        {
                            int recv = sock.ReceiveFrom(packet, ref ep);
                        }
                        catch (SocketException)
                        {
                            packet[0] = 0xff;
                        }
                        return packet;
    
                        #endregion
    
                    }
            #endregion
    
        }
    }
    

     

     Bu sınıfı yarattıktan sonra aşağıdaki kod ile istediğin verilerin mib değerlerini girerek çekebilirsin.

    Not : MIB (Management Information Base)

     MIB’ler hiyerarşik bir yapıda kayıtlı tutulan bilgi koleksiyonudur. SNMP’de belirli bir değişkenin değerine ulaşmak için evrensel olarak belirlenmiş bu koleksiyonun ilgili birimi kullanılır. Örneğin bir cihazın üreticisi tarafından atanan cihaz açıklaması için 1.3.6.1.2.1.2 birimindeki bilgiye ulaşmak gerekir. Ağaç yapısında bu rakamların karşılığı iso. identified-organization. Dod. internet. mgmt. mib-2. description değerine karşılık gelmektedir.

               //---------------------------------- Send a SysUptime SNMP request ---------------------------------//
                int commlength, miblength, datatype, datalength, datastart;
                int uptime = 0;
                string output;
                SNMP conn = new SNMP();
                byte[] response = new byte[ 1024 ];
    
                response = conn.get( "get", txtHostIP.Text, txtCommunity.Text, "1.3.6.1.2.1.1.4.0" );
                
                if( response[ 0 ] == 0xff )
                {
                    richTextBox1.Text += "No response from " + txtHostIP.Text + "\n\n" ;
                    return;
                }
                // Get the community and MIB lengths of the response
                commlength = Convert.ToInt16( response[ 6 ] );
                miblength = Convert.ToInt16( response[ 23 + commlength ] );
                // Extract the MIB data from the SNMp response
                datatype = Convert.ToInt16( response[ 24 + commlength + miblength ] );
                datalength = Convert.ToInt16( response[ 25 + commlength + miblength ] );
                datastart = 26 + commlength + miblength;
                // The sysUptime value may by a multi-byte integer
                // Each byte read must be shifted to the higher byte order
                while( datalength > 0 )
                {
                    uptime = ( uptime << 8 ) + response[ datastart++ ];
                    datalength--;
                }
    
                richTextBox1.Text += "Uptime : " + uptime.ToString()  + datatype.ToString() + "\n";

     

    Bunlar da işine yarayabilecek kaynaklar;

     

    http://www.net-snmp.org/

    http://www.rane.com/pdf/ranenotes/SNMP_Simple_Network_Management_Protocol.pdf  ---> Bu kaynakta özellikle mesaj tipleri filan açıkca var hocam otur bak kendin yaz daha iyi

    http://www.tcpipguide.com/free/t_TCPIPInternetStandardManagementFrameworkandSNMPSta.htm

    http://technet.microsoft.com/tr-tr/library/cc783142(d=lightweight,v=WS.10).aspx


    what makes you think i am not?
Toplam Hit: 1716 Toplam Mesaj: 5