วิธีการดึงรายชื่อ โดเมนในเครือข่ายของคุณ
โดยใช้ 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
การวิเคราะห์สคริปต์
-
เริ่มต้นการเชื่อมต่อ LDAP:
- สคริปต์เริ่มต้นโดยการได้รับการอ้างอิงไปยังรากของไดเรกทอรี
GetObject("LDAP://RootDSE")
ดึงรากของไดเรกทอรี
-
ตั้งค่าพาธและตัวกรองคำค้น:
strADsPath
: ตั้งค่าพาธสำหรับบริบทการตั้งชื่อโดเมนstrFilter
: กำหนดประเภทของวัตถุที่ค้นหา ในกรณีนี้คือโดเมนเท่านั้น
-
สร้างการเชื่อมต่อ:
- สร้างการเชื่อมต่อกับ Active Directory โดยใช้
ADODB.Connection
- สร้างการเชื่อมต่อกับ Active Directory โดยใช้
-
ดำเนินการตามคำค้น:
- คำค้น Active Directory จะถูกดำเนินการ และผลลัพธ์จะถูกเก็บในออบเจ็กต์ Recordset
-
แสดงผลลัพธ์:
- สคริปต์จะวนผ่านออบเจ็กต์ Recordset แสดงชื่อโดเมนแต่ละชื่อจนกว่าจะครบทุกรายการ
แหล่งข้อมูลเพิ่มเติม
สำหรับผู้ที่ชอบทำงานในสภาพแวดล้อม C# เวอร์ชัน C# นี้ ก็สามารถใช้ได้ ซึ่งอาจให้ผลลัพธ์ที่คล้ายคลึงกันแต่มีการพิจารณาการนำไปใช้งานที่แตกต่างกัน
สรุป
การดึงรายชื่อโดเมนในเครือข่ายของคุณเป็นกระบวนการที่ตรงไปตรงมาขณะที่คุณใช้ Windows API ร่วมกับ LDAP queries โดยการใช้รหัส VBScript ที่จัดเตรียมไว้ คุณสามารถรวบรวมข้อมูลที่จำเป็นได้อย่างรวดเร็วและมีประสิทธิภาพ เพิ่มความสามารถในการจัดการทรัพยากร Active Directory ของคุณ หากคุณกำลังมองหาประสิทธิภาพหรือฟีเจอร์เพิ่มเติม ให้พิจารณาไปสำรวจทางเลือก C# เพื่อทางออกที่มีความยืดหยุ่นมากขึ้น
ตอนนี้คุณมีเครื่องมือในการจัดการโดเมนในเครือข่ายของคุณอย่างมีประสิทธิภาพ ลองใช้รหัสด้านบน และคุณจะเห็นว่าสคริปต์มีพลังในการจัดการเครือข่ายมากเพียงใด!