digigrupp.com       Home  Downloads  Support  About  Contact  Search 

Simple SNMP Query Tool - Open Source - C# (C-sharp)

Downloadmain.cssnmp.cssnmpsocket.csmib.csrfc2mib.cscompile.cmd  

SNMP communication module

// Author: Toomas Kaljus
// http://www.digigrupp.com

namespace DG
{
    public class SNMPSocket
    {
        public int SocketTimeout = 5000; // default to 3 seconds
        private System.Net.Sockets.Socket Socket;
        private System.Net.IPEndPoint IPEndPoint;
        public System.Net.EndPoint EndPoint;
        private string HostAddress;

        ~SNMPSocket()
        {
            if (Socket != null) Socket.Close();
        }

        public SNMPPacket Send(string Host, SNMPPacket SNMP)
        {
            // Resolve IP address (do it only once)
            if (HostAddress != Host) {
#if NET20
                System.Net.IPAddress[] IPAddress = System.Net.Dns.GetHostAddresses(Host);
                IPEndPoint = new System.Net.IPEndPoint(IPAddress[0], 161);
#else
                System.Net.IPHostEntry IPHostEntry = System.Net.Dns.Resolve(Host);
                IPEndPoint = new System.Net.IPEndPoint(IPHostEntry.AddressList[0], 161);
#endif
                EndPoint = (System.Net.EndPoint)IPEndPoint;
                HostAddress = Host;
            }

            // Create and initialize the socket (do it only once)
            if (Socket == null) {
                Socket = new System.Net.Sockets.Socket( System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
                Socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, System.Net.Sockets.SocketOptionName.SendTimeout, SocketTimeout);
                Socket.SetSocketOption(System.Net.Sockets.SocketOptionLevel.Socket, System.Net.Sockets.SocketOptionName.ReceiveTimeout, SocketTimeout);
            }

            Socket.SendTo(SNMP.GetBytes(), IPEndPoint);
            byte[] Packet = new byte[10240];
            int ReceivedLenght = Socket.ReceiveFrom(Packet, ref EndPoint);
            SNMP = new SNMPPacket(ref Packet);
            return SNMP;
        }
    }
}