Obtener equipos de la red local con C# .NET

Hola amigos, después de ya bastante tiempo sin publicar aquí en el blog en esta ocasión les traemos una pequeña clase que les puede ser muy útil ya que nos permite obtener los nombres de todos los equipos conectados en nuestra red local.

using System;
using System.Runtime.InteropServices;
using System.Security;
using System.Collections;
using System.Windows.Forms;

namespace ListNetworkComputers
{
    public sealed class NetworkBrowser
    {
        public NetworkBrowser()
        {
        }

        #region Dll Imports
        [DllImport("Netapi32", CharSet = CharSet.Auto, SetLastError = true), SuppressUnmanagedCodeSecurityAttribute]
        public static extern int NetServerEnum(
            string ServerNane,
            int dwLevel,
            ref IntPtr pBuf,
            int dwPrefMaxLen,
            out int dwEntriesRead,
            out int dwTotalEntries,
            int dwServerType,
            string domain,
            out int dwResumeHandle
            );
        [DllImport("Netapi32", SetLastError = true), SuppressUnmanagedCodeSecurityAttribute]
        public static extern int NetApiBufferFree(
            IntPtr pBuf);
        [StructLayout(LayoutKind.Sequential)]
        public struct _SERVER_INFO_100
        {
            internal int sv100_platform_id;
            [MarshalAs(UnmanagedType.LPWStr)]
            internal string sv100_name;
        }
        #endregion

        #region Public Methods
        public ArrayList getNetworkComputers()
        {
            ArrayList networkComputers = new ArrayList();
            const int MAX_PREFERRED_LENGTH = -1;
            int SV_TYPE_WORKSTATION = 1;
            int SV_TYPE_SERVER = 2;
            IntPtr buffer = IntPtr.Zero;
            IntPtr tmpBuffer = IntPtr.Zero;
            int entriesRead = 0;
            int totalEntries = 0;
            int resHandle = 0;
            int sizeofINFO = Marshal.SizeOf(typeof(_SERVER_INFO_100));
            try
            {

                int ret = NetServerEnum(null, 100, ref buffer, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out resHandle);
                if (ret == 0)
                {
                    for (int i = 0; i < totalEntries; i++)
                    {
                        tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO));

                        _SERVER_INFO_100 svrInfo = (_SERVER_INFO_100)
                            Marshal.PtrToStructure(tmpBuffer, typeof(_SERVER_INFO_100));
                        networkComputers.Add(svrInfo.sv100_name);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problem with acessing network computers in NetworkBrowser " +
                    "\r\n\r\n\r\n" + ex.Message,
                    "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return null;
            }
            finally
            {
                NetApiBufferFree(buffer);
            }
            return networkComputers;
        }
        #endregion
    }
}

Todo el código anterior debemos copiarlo a una nueva clase de C# (.cs) para posteriormente mandar llamar a sus métodos, para lograr dichas llamadas debemos utilizar el código siguiente.

 ListNetworkComputers.NetworkBrowser nb = new ListNetworkComputers.NetworkBrowser();
 foreach (string pc in nb.getNetworkComputers())
 {
      listbox1.Items.Add(pc);
 }

En nuestro ejemplo estamos obteniendo todos los nombres de los equipos en la red y los estamos mostrando en una ListBox de C# para su posterior gestión o manejo.

Esperamos que este sencillo ejemplo les haya servido y cualquier cosa estamos para ayudar.

10 comentarios en “Obtener equipos de la red local con C# .NET

  1. ahora me interesa saber la direccion ip de esos usuarios que me da el ejmplo me pueden decir como?

  2. alberto ramirez

    Disculpa, no se que puede estar mal peroen este caso a mi no me funciona, solo muestra el nombre de la pc donde lo estas corriendo,

  3. una ayudita como veo las direccion ip de esos usuarios que me da el ejemplo?

  4. gracias me ha servido mucho, al igual que los demás me gustaría ver la dirección IP de los usuarios

  5. porque no me muestra el nombre de todos los equipos…?, solo me muestran 5 de los 15 maquinas que hay.

  6. Hola! Sólo aparecen los componentes del equipo local. No puedo ver ningún otro equipo.
    Saludos!

  7. Buenas, he probado el programa y funciona bien, pero me he dado cuenta de que no detecta todos los dispositivos. Por ejemplo a mi me interesaría que en la lista de máquinas aparezcan los móviles y las tablets.. ¿Sería esto posible?

  8. ariel cuellar silva

    Disculpa me gustaria una ayuda, es que quiero tener un control de quien entra a mi wifi, y saber la hora que entro, y como me podria comunicar con el router.

  9. para obtener datos como el software y hardaware seria la misma estructura ?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s