Cómo Obtener una Lista de Dominios en Su Red Usando la API de Windows

Si usted es un administrador de red o un desarrollador que trabaja con Active Directory, es posible que frecuentemente necesite recuperar una lista de los dominios presentes en su red. Ya sea para fines de monitoreo, gestión de recursos o para asegurar el cumplimiento de protocolos de seguridad adecuados, tener acceso a la información del dominio es esencial. En esta publicación del blog, explicaremos cómo llevar a cabo esta tarea utilizando la API de Windows con consultas LDAP.

Entendiendo el Problema

Para obtener una lista de todos los dominios en su red, normalmente interactuará con Active Directory. El desafío radica en utilizar el protocolo correcto y las consultas para extraer esta información de manera efectiva. ¡Afortunadamente, la tarea se puede realizar con solo un poco de scripting!

La Solución

Usando VBScript con Consultas LDAP

Una de las formas más sencillas de obtener información de dominio es mediante el uso de VBScript combinado con consultas LDAP (Protocolo de Acceso a Directorios Ligero). A continuación, le guíaremos a través de un script de ejemplo que se puede ejecutar en cualquier máquina conectada a la red donde se usa Active Directory.

Código de Ejemplo de VBScript

Aquí está el script que puede utilizar para recuperar la lista de dominios:

' Este código VBScript obtiene la lista de los dominios contenidos en el 
' bosque en el que el usuario que ejecuta el script ha iniciado sesión

' ---------------------------------------------------------------
' Del libro "Active Directory Cookbook" por Robbie Allen
' Editorial: O'Reilly y Associates
' ISBN: 0-596-00466-4
' Sitio web del libro: http://rallenhome.com/books/adcookbook/code.html
' ---------------------------------------------------------------

set objRootDSE = GetObject("LDAP://RootDSE")
strADsPath =  "<GC://" & objRootDSE.Get("rootDomainNamingContext") & ">;;"
strFilter  = "(objectcategory=domainDNS);"
strAttrs   = "name;"
strScope   = "SubTree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strADsPath & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
    Wscript.Echo objRS.Fields(0).Value
    objRS.MoveNext
wend

Desglose del Script

  1. Inicializar la Conexión LDAP:

    • El script comienza obteniendo una referencia a la raíz del directorio.
    • GetObject("LDAP://RootDSE") obtiene la raíz del directorio.
  2. Establecer la Ruta y Filtros de Consulta:

    • strADsPath: Establece la ruta para el contexto de nombramiento del dominio.
    • strFilter: Especifica el tipo de objetos a buscar; en este caso, solo dominios.
  3. Establecer Conexión:

    • La conexión a Active Directory se establece utilizando ADODB.Connection.
  4. Ejecutar la Consulta:

    • La consulta de Active Directory se ejecuta y los resultados se almacenan en un objeto recordset.
  5. Mostrar Resultados:

    • El script itera a través del recordset, mostrando cada nombre de dominio hasta que se hayan mostrado todas las entradas.

Recursos Adicionales

Para aquellos que prefieren trabajar en el entorno de C#, esta versión en C# también está disponible. Esta alternativa puede proporcionar resultados similares con consideraciones de implementación potencialmente diferentes.

Conclusión

Recuperar una lista de dominios en su red es un proceso sencillo cuando se utiliza la API de Windows junto con consultas LDAP. Al usar el código VBScript proporcionado, puede reunir rápidamente y de manera efectiva los datos necesarios, mejorando su capacidad para gestionar recursos de Active Directory. Si busca un rendimiento o características adicionales, considere explorar la alternativa en C# para una solución más robusta.

Ahora está equipado con las herramientas para gestionar eficazmente los dominios de su red. ¡Intente implementar el código anterior y verá lo poderoso que puede ser el scripting en la gestión de redes!