Como Obter uma Lista de Domínios na Sua Rede Usando a API do Windows

Se você é um administrador de rede ou um desenvolvedor trabalhando com o Active Directory, pode frequentemente precisar recuperar uma lista de domínios presentes na sua rede. Seja para fins de monitoramento, gerenciamento de recursos ou para garantir protocolos de segurança adequados, ter acesso às informações do domínio é essencial. Neste post do blog, explicaremos como realizar essa tarefa usando a API do Windows com consultas LDAP.

Entendendo o Problema

Para obter uma lista de todos os domínios na sua rede, você tipicamente interagirá com o Active Directory. O desafio está em usar o protocolo e as consultas corretas para extrair essas informações de maneira eficaz. Felizmente, a tarefa pode ser realizada com apenas um pouco de script!

A Solução

Usando VBScript com Consultas LDAP

Uma das maneiras mais simplificadas de recuperar informações de domínio é usando VBScript combinado com consultas LDAP (Single Directory Access Protocol). Abaixo, iremos guiá-lo através de um script de exemplo que pode ser executado em qualquer máquina conectada à rede onde o Active Directory está em uso.

Código de Exemplo em VBScript

Aqui está o script que você pode usar para recuperar a lista de domínios:

' Este código VBScript obtém a lista dos domínios contidos na 
' floresta na qual o usuário que está executando o script está logado

' ---------------------------------------------------------------
' Do livro "Active Directory Cookbook" por Robbie Allen
' Editora: O'Reilly and Associates
' ISBN: 0-596-00466-4
' Site do livro: 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

Análise do Script

  1. Inicializar Conexão LDAP:

    • O script começa obtendo uma referência à raiz do diretório.
    • GetObject("LDAP://RootDSE") busca a raiz do diretório.
  2. Definir Caminho e Filtros de Consulta:

    • strADsPath: Isso define o caminho para o contexto de nomeação do domínio.
    • strFilter: Especifica o tipo de objetos a serem pesquisados; neste caso, apenas domínios.
  3. Estabelecer Conexão:

    • A conexão com o Active Directory é estabelecida usando ADODB.Connection.
  4. Executar a Consulta:

    • A consulta do Active Directory é executada e os resultados são armazenados em um objeto recordset.
  5. Exibir Resultados:

    • O script itera através do recordset, exibindo cada nome de domínio até que todas as entradas tenham sido mostradas.

Recursos Adicionais

Para aqueles que preferem trabalhar no ambiente C#, esta versão em C# também está disponível. Esta alternativa pode fornecer resultados semelhantes com considerações de implementação potencialmente diferentes.

Conclusão

Recuperar uma lista de domínios na sua rede é um processo simples ao utilizar a API do Windows juntamente com consultas LDAP. Usando o código VBScript fornecido, você pode coletar rapidamente e efetivamente os dados necessários, melhorando sua capacidade de gerenciar os recursos do Active Directory. Se você está buscando por desempenho adicional ou recursos, considere explorar a alternativa em C# para uma solução mais robusta.

Agora você está equipado com as ferramentas para gerenciar os domínios da sua rede de forma eficiente. Experimente implementar o código acima e você perceberá como a programação pode ser poderosa na gestão de redes!