nemo14 Ответов: 1

Обнаружение SNMP-устройства по сети с помощью C#


Дорогой, я разрабатываю сервис c#, который должен сканировать сеть для обнаружения активных snmp-устройств. Я хотел бы получить результат, аналогичный результатам команды NMAP, выполняемой с Linux, с точки зрения основанных устройств.

nmap -P0-v-sU-p 161 192.168.1.0 / 24

Что я уже пробовал:

Просто для проверки я сделал небольшое приложение для сканирования открытого UDP-порта. Сначала я запускаю прослушиватель в поток на порту 161, а затем запускаю отправитель. но я смог вернуть ответ только на 1 устройство, в то время как NMAP вернул мне гораздо больше устройств.

Есть какие-нибудь предложения?

Заранее спасибо,

вот вам мой код:

UDP listner

<pre>// UDP Listener
private void button1_Click(object sender, EventArgs e)
    {
        new Thread(() =>
        {
            Thread.CurrentThread.IsBackground = true;
            int port = int.Parse(txtPort.Text);
            bool done = false;
            IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 161);
            UdpClient listener = new UdpClient(groupEP);
            string received_data;
            byte[] receive_byte_array;
            try
            {
                while (!done)
                {
                    Console.WriteLine("SERVER: Waiting for broadcast");
                    receive_byte_array = listener.Receive(ref groupEP);

                    if (!hosts.ContainsKey(groupEP.Address.ToString()) )   {
                        // Console.WriteLine("Received a broadcast from {0}", groupEP.ToString());
                        hosts.Add(groupEP.Address.ToString(), groupEP.Address.ToString());
                        Console.WriteLine("SERVER: Received a broadcast from {0}", groupEP.Address.ToString());
                        received_data = Encoding.ASCII.GetString(receive_byte_array, 0, receive_byte_array.Length);
                        //Console.WriteLine("data follows \n{0}\n\n", received_data);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

        }).Start();
    }


а здесь Отправитель UDP

<pre>// UDP Sender
    private void button2_Click(object sender, EventArgs e)
    {
        new Thread(() =>
        {
            int port = int.Parse(txtPort.Text);
            string message = txtMessage.Text;
            Boolean done = false;
            Boolean exception_thrown = false;
            Socket sending_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
            IPAddress send_to_address = IPAddress.Parse("192.168.1.255");
            IPEndPoint sending_end_point = new IPEndPoint(send_to_address, port);
            while (!done)
            {
                string text_to_send = message;
                if (text_to_send.Length == 0)
                {
                    done = true;
                }
                else
                {
                    byte[] send_buffer = Encoding.ASCII.GetBytes(text_to_send);
                    Console.WriteLine("CLIENT: sending to address: {0} port: {1}",
                    sending_end_point.Address,
                    sending_end_point.Port);
                    try
                    {
                        sending_socket.SendTimeout = 5000;
                        sending_socket.SendTo(send_buffer, sending_end_point);
                    }
                    catch (Exception send_exception)
                    {
                        exception_thrown = true;
                        Console.WriteLine("CLIENT:  Exception {0}", send_exception.Message);
                    }
                    if (exception_thrown == false)
                    {
                        Console.WriteLine("CLIENT: Message has been sent to the broadcast address");
                    }
                    else
                    {
                        exception_thrown = false;
                        Console.WriteLine("CLIENT: The exception indicates the message was not sent.");
                    }
                }
            } // end of while (!done)

        }).Start();
    }
}

1 Ответов

Рейтинг:
2

Graeme_Grant

Я использовал название вашего вопроса в поиске Google: Обнаружение SNMP-устройства по сети с помощью c-Google Search[^] и нашел это: SnmpSharpNet / SNMP библиотека для C#[^]


nemo14

спасибо за вашу подсказку. Ссылка полезна для запроса устройства, но мне нужно сначала определить список устройств, у которых открыт snmp-порт (он использует протокол UDP). Есть идеи?

Graeme_Grant

Я думал, что это там, когда читал. Посмотри еще раз. В противном случае я бы не стал долго говорить с google об ответе, как это сделал Я - смотрите мою ссылку на поиск google.