วิธีการดึงรายชื่อ โดเมนในเครือข่ายของคุณ โดยใช้ Windows API

หากคุณเป็นผู้ดูแลระบบเครือข่ายหรือเป็นนักพัฒนาที่ทำงานกับ Active Directory คุณอาจจำเป็นต้องดึงรายชื่อโดเมนที่มีอยู่ในเครือข่ายของคุณบ่อยครั้ง ไม่ว่าจะเพื่อการตรวจสอบ การจัดการทรัพยากร หรือการรักษาโปรโตคอลด้านความปลอดภัยให้เหมาะสม การเข้าถึงข้อมูลโดเมนจึงเป็นสิ่งสำคัญ ในบล็อกโพสต์นี้ เราจะแสดงวิธีการทำภารกิจนี้โดยใช้ Windows API ร่วมกับ LDAP queries

การทำความเข้าใจกับปัญหา

เพื่อดึงรายชื่อโดเมนทั้งหมดในเครือข่ายของคุณ คุณมักจะต้องติดต่อกับ Active Directory ความท้าทายคือการใช้โปรโตคอลและคำค้นที่ถูกต้องเพื่อดึงข้อมูลนี้ออกมาอย่างมีประสิทธิภาพ โชคดีที่ภารกิจนี้สามารถทำได้ด้วยการเขียนสคริปต์เพียงเล็กน้อยเท่านั้น!

วิธีการแก้ปัญหา

การใช้ VBScript ร่วมกับ LDAP Queries

หนึ่งในวิธีที่ง่ายที่สุดในการดึงข้อมูลโดเมนคือการใช้ VBScript ร่วมกับ LDAP (Lightweight Directory Access Protocol) queries ด้านล่างนี้ เราจะนำเสนอรหัสตัวอย่างที่สามารถรันบนเครื่องใดก็ได้ที่เชื่อมต่อกับเครือข่ายที่ใช้ 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. สร้างการเชื่อมต่อ:

    • สร้างการเชื่อมต่อกับ Active Directory โดยใช้ ADODB.Connection
  4. ดำเนินการตามคำค้น:

    • คำค้น Active Directory จะถูกดำเนินการ และผลลัพธ์จะถูกเก็บในออบเจ็กต์ Recordset
  5. แสดงผลลัพธ์:

    • สคริปต์จะวนผ่านออบเจ็กต์ Recordset แสดงชื่อโดเมนแต่ละชื่อจนกว่าจะครบทุกรายการ

แหล่งข้อมูลเพิ่มเติม

สำหรับผู้ที่ชอบทำงานในสภาพแวดล้อม C# เวอร์ชัน C# นี้ ก็สามารถใช้ได้ ซึ่งอาจให้ผลลัพธ์ที่คล้ายคลึงกันแต่มีการพิจารณาการนำไปใช้งานที่แตกต่างกัน

สรุป

การดึงรายชื่อโดเมนในเครือข่ายของคุณเป็นกระบวนการที่ตรงไปตรงมาขณะที่คุณใช้ Windows API ร่วมกับ LDAP queries โดยการใช้รหัส VBScript ที่จัดเตรียมไว้ คุณสามารถรวบรวมข้อมูลที่จำเป็นได้อย่างรวดเร็วและมีประสิทธิภาพ เพิ่มความสามารถในการจัดการทรัพยากร Active Directory ของคุณ หากคุณกำลังมองหาประสิทธิภาพหรือฟีเจอร์เพิ่มเติม ให้พิจารณาไปสำรวจทางเลือก C# เพื่อทางออกที่มีความยืดหยุ่นมากขึ้น

ตอนนี้คุณมีเครื่องมือในการจัดการโดเมนในเครือข่ายของคุณอย่างมีประสิทธิภาพ ลองใช้รหัสด้านบน และคุณจะเห็นว่าสคริปต์มีพลังในการจัดการเครือข่ายมากเพียงใด!