حل اسم النطاق: البحث عن سجل DNS الرئيسي في PowerShell

إذا كنت تدير خوادم الويب أو البريد الإلكتروني، فإنك تعلم كم تعتمد هذه الخوادم بشكل كبير على سجلات DNS المكونة بشكل جيد. يمكن أن تتسبب السجلات الناقصة لدى DNS في حدوث مشاكل متنوعة، بما في ذلك عدم قدرة المستخدمين على العثور على موقع الويب الخاص بك أو عدم تسليم الرسائل البريدية. الشيء الجيد هو أن cmdlet Resolve-DnsName في PowerShell موجود، ومعه يمكن أتمتة مراقبة سجلات DNS من خلال البرمجة.

يكون يوم المسؤول ممتلئًا بما فيه الكفاية، وفحص يدوياً ما إذا كان بإمكان توجيه سجلات DNS بشكل مناسب يتطلب مزيدًا من الجهد اليدوي.

في هذا المقال، ستتعلم كيفية استخدام cmdlet Resolve-DnsName للاستعلام عن سجلات DNS باستخدام PowerShell. بحلول نهاية هذا المقال، ستكون قد تعلمت أيضًا كيفية إنشاء سكريبت أساسي لإعداد تقرير حول سجلات DNS التي تم تعيينها للمراقبة.

متطلبات أولية

هذا المقال هو مرشد تعليمي، وإذا كنت تعتزم متابعة الأمثلة، فستحتاج إلى:

Resolve-DnsName: محلل DNS في PowerShell

هناك أكثر من طريقة لأداء استعلام DNS. يشبه cmdlet Resolve-DnsName إلى حد ما أداة سطر الأوامر nslookup المرفقة مع نظام التشغيل Windows أو dig إذا كنت مسؤولًا عن Linux.

تقدم بعض المواقع خدمات مراقبة/تقارير سجل DNS. ولكن، هذه الخدمات من الطرف الثالث غالبًا ما تأتي بتكلفة، بالطبع. هناك بديل مجاني، يتيح لك أيضًا إظهار مهاراتك في البرمجة!

يقوم cmdlet Resolve-DnsName، كما يوحي اسمه، بحل أسماء DNS إلى عناوين IP والعكس. هذا الأمر جزء من وحدة PowerShell dnsclient التي، حتى تاريخ كتابة هذا النص، متوفرة مع Windows 10، وWindows Server 2012/R2، وWindows Server 2016، وWindows Server 2019.

بما أن Resolve-DnsName هو cmdlet PowerShell، فإنه يُرجع نتائجه ككائنات يمكن تخزينها وتلاعبها وتصديرها. على سبيل المثال، البحث عن سجل DNS لـ google.com باستخدام الأمر Resolve-DnsName google.com يعطيك النتيجة المعروضة أدناه.

DNS Record lookup result using Resolve-DnsName

تم إرجاع النتيجة كـ كائن يتيح لك تصدير النتائج إلى ملف CSV، أو تلاعب الشكل لإنتاج تقارير HTML.

يختلف cmdlet Resolve-DnsName عن أداة nslookup القديمة. تُرجع nslookup سلسلة نصية بسيطة. يمكنك رؤية مثال في لقطة الشاشة التالية. إذا كنت بحاجة إلى تحليل أي من هذه المعلومات، فسيكون الأمر صعبًا.

DNS record lookup result using nslookup

الاستعلام عن أنواع مختلفة من سجلات DNS

بشكل افتراضي، يستعلم Resolve-DnsName عن أنواع سجلات DNS A و AAAA . على سبيل المثال، إذا قمت بالبحث عن سجل DNS لـ gmail.com باستخدام الأمر أدناه:

Resolve-DnsName -Name gmail.com

كما يمكنك رؤية أدناه، يتم إرجاع سجلات AAAA و A فقط. هذا لأن نوع سجل DNS الذي يجب البحث عنه لم يتم تحديده.

DNS record for gmail.com

الآن، نظرًا لأننا جميعًا نعلم أن gmail.com هو نطاق بريد إلكتروني يستخدمه خدمة البريد الإلكتروني التابعة لـ Google، يجب أن يكون هناك سجل MX مرتبط به، أليس كذلك؟ حسنًا، ليس هناك حاجة للافتراض عندما يمكنك التأكيد باستخدام هذا الأمر:

Resolve-DnsName -Name gmail.com -Type MX

المخرج الموضح في لقطة الشاشة أدناه يظهر قائمة سجلات MX لـ gmail.com.

MX Record list of gmail.com

لمعرفة المزيد عن الأنواع المختلفة للسجلات التي يمكن استخدامها مع Resolve-DnsName، قم بزيارة هذا الرابط وابحث عن الجدول المتعلق بالمعامل -Type. أو يمكنك مراجعة مساعدة Resolve-DnsName باستخدام الأمر get-help Resolve-DnsName.

استخدام خوادم محددة للاستعلام عن DNS

حل-اسم-النطاق يستخدم عناوين خوادم DNS المكونة على جهاز الكمبيوتر الخاص بك افتراضيًا. ولكن يمكنك أيضًا جعل حل-اسم-النطاق يستخدم خادم DNS محدد عند إجراء الاستعلامات.

على سبيل المثال، إذا كنت ترغب في استخدام Google Public DNS للبحث عن السجلات، يمكنك القيام بذلك عن طريق إضافة معلمة -Server في الأمر الخاص بك على غرار المثال أدناه.

# عناوين خوادم Google Public DNS
$dnsServer = @('8.8.8.8','8.8.4.4')
Resolve-DnsName adamtheautomator.com -Server $dnsServer

سيكون نتيجة الأمر أعلاه مشابهة لتلك الموضحة في الصورة أدناه.

DNS record lookup results using a specific DNS servers

في هذه النقطة، قد تسأل نفسك، “لماذا يجب علي استخدام خادم DNS مختلف؟”. هذا سؤال صحيح. إذا حاولت البحث عن نفس السجل باستخدام خادم DNS الافتراضي الخاص بجهازك، أو خادم DNS آخر، فقد تحصل على نتيجة مماثلة على الأرجح.

قد تكون هناك العديد من الأسباب لاستخدام خوادم DNS مختلفة مع حل-اسم-النطاق. قد تتضمن بعض هذه الأسباب:

  • السرعة – قد تكون بعض خوادم DNS أسرع من غيرها.
  • الأمان – قد تحتوي بعض خوادم DNS على إجراءات أمان أكثر من غيرها تمنع عمليات الاختراق والهجمات.
  • توفر السجلات – في معظم الحالات، تمتلك المؤسسات خوادم DNS الداخلية الخاصة بها التي تحتوي على المناطق والسجلات للأسماء التي يتم حلها داخليًا فقط. في هذه الحالة، ستفشل محاولة البحث عن اسم داخلي باستخدام خادم DNS عام.
DNS record lookup failure
  • خوادم DNS لا تقوم بإعادة توجيه الطلبات – بعض المؤسسات لا تسمح بإعادة توجيه DNS. ستفشل محاولة استخدامها للبحث في سجلات DNS العامة.
  • تحليل واختبار – عندما تكون خوادم DNS المفضلة لديك غير مستجيبة، قد ترغب في اختبار البحث باستخدام خادم DNS مختلف.

الإبلاغ عن سجلات DNS باستخدام سكريبت PowerShell

الآن بعد أن تعلمت أساسيات كيفية استخدام cmdlet Resolve-DnsName، في هذا القسم، ستتعلم كيفية إنشاء سكريبت PowerShell لرصد والإبلاغ عن سجلات DNS. يجب أن تكون قادرًا على تطبيق المعرفة التي اكتسبتها في الأقسام السابقة حتى الآن في بناء هذا السكريبت.

قم بتشغيل محرر النصوص الخاص بك وأنشئ ملفًا جديدًا باسم GetDnsRecord.ps1.

تعريف المتغيرات

أولاً، حدد المتغيرات التي ستستخدم. ستتضمن هذه المتغيرات ما يلي:

  • $NameList – سيحمل هذا المتغير أسماء سجلات DNS التي ترغب في أن يستعلم عنها سكريبتك
  • $Serverlist – استخدم هذا المتغير لتحديد خوادم DNS التي سيستخدمها السكريبت للبحث.

انسخ الشيفرة أدناه والصقها في بداية سكريبتك.

$NameList = @('adamtheautomator.com','powershell.org','xyz.local')
$ServerList = @('8.8.8.8','8.8.4.4')

إجراء عمليات البحث في DNS

التالي، يجب أن يكون الشيفرة قادرة على البحث عن سجل DNS لكل من الأسماء المحددة. في هذه الحالة، سيتم استخدام حلقة التكرار لتكرار قائمة السجلات والبحث عن كل اسم باستخدام Resolve-DnsName.

السطر $FinalResult = @() ينشئ مصفوفة فارغة حيث ستتم تخزين النتيجة النهائية. ثم، باستخدام حلقة التكرار، يقوم PowerShell بتمرير كل عنصر في المتغير $NameList إلى متغير يدعى $Name.

في كل تكرار، ينشئ السطر $tempObj = "" | Select-Object Name,IPAddress,Status,ErrorMessage كائنًا مؤقتًا بأربع خصائص لاحتواء نتيجة البحث الناجح لـ DNS.

ثم، يتم استخدام البيان try{} لتشغيل أمر Resolve-DnsName للبحث في سجلات DNS A وملء قيم $tempObj. إذا فشلت عملية البحث في DNS، يقوم البيان catch{} بالتقاط الخطأ، وسيتم تضمين الخطأ في كائن $tempObj.

في نهاية كل تكرار، سيتم إلحاق قيمة كائن $tempObj بـ $FinalResult. وعندما يتم معالجة آخر عنصر في مصفوفة $NameList، ستخرج الحلقة. ثم، سيتم عرض قيمة $FinalResult.

انسخ الشيفرة أدناه والصقها في نهاية سيناريو الخاص بك. لا حاجة لتغيير القيم.

$FinalResult = @()
foreach ($Name in $NameList) {
    $tempObj = "" | Select-Object Name, IPAddress, Status, ErrorMessage
    try {
        $dnsRecord = Resolve-DnsName $Name -Server $ServerList -ErrorAction Stop | Where-Object { $_.Type -eq 'A' }
        $tempObj.Name = $Name
        $tempObj.IPAddress = ($dnsRecord.IPAddress -join ',')
        $tempObj.Status = 'OK'
        $tempObj.ErrorMessage = ''
    }
    catch {
        $tempObj.Name = $Name
        $tempObj.IPAddress = ''
        $tempObj.Status = 'NOT_OK'
        $tempObj.ErrorMessage = $_.Exception.Message
    }
    $FinalResult += $tempObj
}
return $FinalResult

بعد حفظ السيناريو، قم بتشغيله في PowerShell بالاتصال بالاسم GetDnsRecord.ps1. يظهر في الاستعراض أدناه الإخراج.

Script to lookup multiple DNS records using Resolve-DnsName

كما يمكنك رؤية النتيجة أعلاه، فإن الإخراج هو كائن يكون مفيدًا إذا كنت ترغب في تصدير النتائج إلى ملف مثل CSV باستخدام الأمر أدناه.

.\GetDnsRecord.ps1 | Export-Csv DnsRecord.csv -NoTypeInformation

سيكون إخراج CSV مشابهًا لتلك التي أدناه.

DNS record lookup report exported to a CSV file

الاستنتاج

في هذا المقال، تعلمت أساسيات كيفية استخدام cmdlet Resolve-DnsName لأداء بحث سجلات DSN في PowerShell. كما تعلمت كيف يختلف Resolve-DnsName عن أدوات أخرى مثل أداة nslookup.

رأيت كيف يمكن استخدام Resolve-DnsName في سيناريوهات النصوص لتحقيق بحث السجلات DNS تلقائيًا. سيكون ذلك مفيدًا كأداة للمراقبة لضمان أنك على دراية بالحالة الحالية لسجلات DNS التي تراقبها.

باستخدام مهارات البرمجة الخاصة بك في PowerShell، يمكن تحسين السكربت الخاص بالتقارير عن طريق إضافة كود لإرسال التقرير عبر البريد الإلكتروني إلى المستلمين المحددين. كما يمكن تعديله لإنشاء إخراج HTML جذاب بصريًا.

في النهاية، Resolve-DnsName هي أداة ممتازة للبحث عن DNS سواء كنت تستخدمها يدويًا أو للتلقائية في السكربتات. الآن لديك المعرفة حول كيفية عملها، ومن الصعب عليك العثور على وسائل لاستخدامها كجزء من مهام الإدارة الخاصة بك.

قراءة إضافية

Source:
https://adamtheautomator.com/resolve-dnsname/