Windows API를 사용하여 네트워크의 도메인 목록 가져오는 방법

네트워크 관리자이거나 Active Directory와 작업하는 개발자라면, 네트워크에 존재하는 도메인 목록을 자주 검색해야 할 필요가 있을 것입니다. 모니터링 목적, 리소스 관리, 또는 적절한 보안 프로토콜을 보장하기 위해 도메인 정보에 접근하는 것은 필수적입니다. 이 블로그 포스트에서는 LDAP 쿼리를 사용하여 Windows API로 이 작업을 수행하는 방법을 설명하겠습니다.

문제 이해하기

네트워크의 모든 도메인 목록을 가져오기 위해서는 일반적으로 Active Directory와 상호작용하게 됩니다. 이 정보를 효과적으로 추출하기 위해 올바른 프로토콜 및 쿼리를 사용하는 것이 도전 과제가 됩니다. 다행히도, 약간의 스크립팅으로 이 작업을 수행할 수 있습니다!

해결책

LDAP 쿼리와 함께 VBScript 사용하기

도메인 정보를 가져오는 가장 간편한 방법 중 하나는 VBScript와 LDAP (경량 디렉터리 액세스 프로토콜) 쿼리를 조합하여 사용하는 것입니다. 아래는 Active Directory가 사용되고 있는 네트워크에 연결된 어떤 머신에서도 실행할 수 있는 샘플 스크립트입니다.

샘플 VBScript 코드

도메인 목록을 검색하기 위해 사용할 수 있는 스크립트는 다음과 같습니다:

' 이 VBScript 코드는 스크립트를 실행하는 사용자가 로그인한 
' 포리스트에 포함된 도메인 목록을 가져옵니다.

' ---------------------------------------------------------------
' "Active Directory Cookbook" 저자: Robbie Allen
' 출판사: O'Reilly and Associates
' ISBN: 0-596-00466-4
' 도서 웹사이트: 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

스크립트 분해

  1. LDAP 연결 초기화:

    • 스크립트는 디렉토리의 루트에 대한 참조를 가져오는 것으로 시작합니다.
    • GetObject("LDAP://RootDSE")는 디렉토리의 루트를 가져옵니다.
  2. 경로 및 쿼리 필터 설정:

    • strADsPath: 도메인 이름 맥락을 설정하는 경로입니다.
    • strFilter: 검색할 객체의 유형을 지정합니다; 이 경우 도메인만 검색합니다.
  3. 연결 설정:

    • ADODB.Connection을 사용하여 Active Directory에 대한 연결이 설정됩니다.
  4. 쿼리 실행:

    • Active Directory 쿼리가 실행되고, 결과는 레코드셋 객체에 저장됩니다.
  5. 결과 표시:

    • 스크립트는 레코드셋을 반복하면서 각 도메인 이름을 표시하며, 모든 항목이 표시될 때까지 진행합니다.

추가 자료

C# 환경에서 작업하기를 선호하는 분들을 위해 이 C# 버전도 제공됩니다. 이 대안은 비슷한 결과를 제공할 수 있으며, 구현 시 고려해야 할 사항이 다를 수 있습니다.

결론

네트워크에서 도메인 목록을 검색하는 것은 Windows API와 LDAP 쿼리를 활용하면 간단한 과정입니다. 제공된 VBScript 코드를 사용하면 필요한 데이터를 빠르고 효과적으로 수집할 수 있어 Active Directory 리소스를 관리하는 데 도움이 됩니다. 추가 성능이나 기능을 원하신다면, 더 강력한 솔루션을 위해 C# 대안을 탐색해 보시는 것이 좋습니다.

이제 네트워크의 도메인을 효율적으로 관리할 수 있는 도구를 갖추게 되었습니다. 위의 코드를 구현해 보세요. 네트워크 관리에서 스크립팅의 힘이 얼마나 강력한지 알게 될 것입니다!