Obtener nombre de dominio en C#

Syed Hassan Sabeeh Kazmi 12 octubre 2023
  1. Utilice la clase ManagementObjectSearcher para obtener el nombre de dominio en C#
  2. Utilice el espacio de nombres System.Net.NetworkInformation para obtener el nombre de dominio en C#
  3. Utilice System.Environment.UserDomainName para obtener el nombre de dominio en C#
  4. Utilice System.DirectoryServices.ActiveDirectory para obtener el nombre de dominio en C#
Obtener nombre de dominio en C#

Este tutorial explica los diferentes tipos de nombres de dominio y le muestra cómo obtenerlos para un usuario específico en C#. Un nombre de dominio puede ser una entidad de seguridad de usuario/equipo del dominio de Active Directory, el DNS principal de la pila de la red o un nombre DNS que resuelve una dirección IP de equipo/usuario en una red.

Hay cuatro formas principales en C# para obtener estos nombres de dominio y elegir uno que cumpla con sus requisitos y dependa en gran medida de sus tareas. Si está buscando el dominio de Active Directory de la computadora, desea obtener (o acceder) el dominio al que pertenecen la entidad de seguridad de la computadora y la entidad de seguridad del usuario.

En general, desea que esta información establezca una conexión estable con Active Directory; recuerde, el principal del usuario y de la computadora no están necesariamente en el mismo dominio. Por otro lado, el sufijo DNS principal de la pila de la red local también puede ser un nombre de dominio que desea obtener y, en la mayoría de los casos, acceder u obtenerlo es probablemente el mismo que el dominio al que pertenecen tanto el principal de seguridad de la computadora como el pertenece el principal del usuario actualmente autenticado.

Es posible que desee que el sufijo DNS principal de la pila de la red local sea un nombre de dominio para conectarse correctamente a través de LAN, aunque los dispositivos no tengan nada que ver con Active Directory.

La última opción, si está interesado en la dirección IP del usuario como nombre de dominio, que puede estar entre cero e infinitos registros DNS, y puede ser HTTP_HOST para enviar la solicitud que está procesando actualmente; tampoco tiene que hacer nada con Active Directory de Microsoft.

Utilice la clase ManagementObjectSearcher para obtener el nombre de dominio en C#

Pertenece al espacio de nombres System.Management y ayuda a los usuarios a recuperar objetos de gestión (un nombre de dominio es un objeto de gestión) en función de una consulta específica. Es fácil de usar y perfecto para los principiantes de C# para recuperar información de administración o nombre de dominio.

Puede enumerar información de administración sobre unidades de disco, adaptadores de red, procesos, información del sistema, conexiones de red, servicios en pausa, etc. Utiliza consultas WMI (representadas en ObjectQuery) como entrada cuando se crea una instancia y ManagementScope que representa el espacio de nombres WMI para ejecutar las consultas del usuario.

using System;
using System.Management;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      SelectQuery query = new SelectQuery("Win32_ComputerSystem");
      using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query)) {
        foreach (ManagementObject mo in searcher.Get()) {
          label1.Text = mo.ToString();
        }
      }
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Producción:

ManagementObjectSearcher

Los veteranos de C# y los desarrolladores experimentados también pueden aprovechar sus opciones avanzadas adicionales en EnumerationOptions. Comprender la clase ManagementObjectSearcher es fácil; ejecuta la consulta dada en el ámbito especificado y devuelve el nombre de dominio que coincide con la consulta en una ManagementObjectCollection cuando se invoca el método Get() en el objeto de la clase.

Es un ejemplo perfecto de obtener el nombre de dominio dinámicamente cuando la computadora está en Active Directory para el administrador. Use SelectQuery para crear una consulta y asígnela al objeto de clase y aplique el método Get() en ese objeto para obtener el nombre de dominio.

Utilice el espacio de nombres System.Net.NetworkInformation para obtener el nombre de dominio en C#

Puede usar System.Net.NetworkInformation.IPGlobalProperties.GetIPGlobalProperties().DomainName para obtener el sufijo DNS principal de la pila de red como nombre de dominio y obtener el nombre DNS que resuelve la dirección IP de la computadora/usuario.

La propiedad IPGlobalProperties.DomainName pertenece al espacio de nombres System.Net.NetworkInformation y puede obtener el nombre de dominio en el que está registrada la computadora local.

El objeto IPGlobalProperties contiene la información de dominio (tipo proporcionado por el sistema) sobre la computadora local, y el espacio de nombres System.Net.NetworkInformation le brinda acceso a los datos de tráfico de su red y a la información de la dirección de la red.

Sin embargo, puede usar la clase NetworkInterface si desea información sobre su interfaz de red en la computadora local.

using System;
using System.Net.NetworkInformation;  // essential namespace
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties();
      string domain_name = properties.DomainName.ToString();
      label1.Text = domain_name;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Producción:

Información de red

Utilice System.Environment.UserDomainName para obtener el nombre de dominio en C#

Como parte del espacio de nombres Sistema, la propiedad Environment.UserDomainName le proporciona el nombre de dominio de la red o el dominio del principal de seguridad asociado con el usuario actual.

Puede enfrentar problemas para recuperar su nombre de dominio del servidor, la red local o su computadora si el sistema operativo no admite la recuperación de la información del dominio o el nombre de dominio de la red es inaccesible.

El nombre de dominio del usuario o las credenciales de la cuenta de dominio tienen el formato del carácter \ y un nombre de usuario. Puede obtener el nombre de dominio del usuario sin el nombre de usuario con la ayuda de la propiedad UserDomainName y el nombre de usuario sin el nombre de dominio con la ayuda de la propiedad UserName.

using System;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Environment.UserDomainName;
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Producción:

Nombre de dominio de usuario

El propósito principal de la propiedad UserDomainName es obtener el nombre de dominio de su cuenta de Windows para el usuario actual (refiriéndose a usted).

En caso de que falle el intento de obtener el nombre de dominio a través de esta propiedad, puede intentar recuperar/obtener automáticamente el nombre de dominio asociado con el usuario mencionado en la propiedad Nombre de usuario.

Utilice System.DirectoryServices.ActiveDirectory para obtener el nombre de dominio en C#

Puede usar el método System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain() para obtener el dominio del principio de seguridad de la computadora actual, que pertenece al Directorio Activo.

Si su computadora o máquina local no es parte del dominio del que está tratando de recuperar información o el controlador de dominio está fuera de contacto, arroja una excepción ActiveDirectoryObjectNotFoundException.

El método GetComputerDomain pertenece a la clase Domain, que forma parte del espacio de nombres System.DirectoryServices.ActiveDirectory. Puede usar el método Domain.GetComputerDomain para obtener el nombre de dominio en C# proporcionando una referencia a su espacio de nombres.

Devuelve un objeto Dominio que representa el nombre de dominio y es independiente de las credenciales de dominio con las que se ejecuta la aplicación.

using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Windows.Forms;

namespace domain_name {
  public partial class Form1 : Form {
    public Form1() {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e) {
      label1.Text = Domain.GetComputerDomain().ToString();
    }

    private void label1_Click(object sender, EventArgs e) {}
  }
}

Producción:

Directorio Activo

Independientemente de las credenciales de dominio de la cuenta autorizada o de confianza, puede utilizar el método GetCurrentDomain para recuperar fácilmente el nombre de dominio de la computadora. Puede acceder al modelo de objetos de un dominio de abstracción de alto nivel para obtener la información del dominio como parte de sus servicios de Microsoft Active Directory.

Este tutorial le enseñó cómo obtener el nombre de dominio en C#. Puede ser un nombre de dominio de AD, el nombre de dominio de su red, el nombre de dominio de su computadora local o cualquier otro que pueda obtener con los enfoques mencionados mientras mantiene el rendimiento de su aplicación C#.

Syed Hassan Sabeeh Kazmi avatar Syed Hassan Sabeeh Kazmi avatar

Hassan is a Software Engineer with a well-developed set of programming skills. He uses his knowledge and writing capabilities to produce interesting-to-read technical articles.

GitHub