CMD nslookup 脚本返回“超时”错误

CMD nslookup 脚本返回“超时”错误

我想编写一个 CMD 脚本来自动检查一组域的 MX 记录(存储在 TXT 文件中)以用于报告目的。

当我nslookup对单个域执行此操作时,没有问题:

nslookup

当我使用我的脚本时:

@echo off
setlocal enabledelayedexpansion

set "inputFile=domains.txt"
set "outputFile=mx_results.txt"

echo. > %outputFile%

for /f "delims=" %%i in (%inputFile%) do (
   for /f "delims=" %%j in ('nslookup -q=mx %%i') do (
      set "result=%%j"
   )

   echo !result! >> %outputFile%

我收到一条错误消息:*** Request to UnKnown timed-out

脚本 nslookup

domains.txt文件包含以下三个测试域:

gmail.com
apple.com
microsoft.com

是不是脚本有问题,或者是什么问题?

编辑1: 我听从了建议并创建了一个新的答案。

答案1

是不是剧本有问题?

有几个错误:

  1. 您的括号不匹配(缺少)

  2. echo !result! >> %outputFile%是在错误的位置(它应该在前一个之后,echo否则你只能得到循环中的最后一行输出for)。

  3. 您需要=q=mx使用时退出^

  4. findstr产生一些您可能不想要的输出(例如Non-authoritative answer:

尝试以下脚本:

@echo off
rem avoid polluting global envoronment space
setlocal enabledelayedexpansion

set "inputFile=domains.txt"
set "outputFile=mx_results.txt"

echo. > %outputFile%

for /f "delims=" %%i in (%inputFile%) do (
   for /f "skip=1 delims=" %%j in ('nslookup -q^=mx %%i 2^>nul ^| find "MX"') do (
   set "result=%%j"
   echo !result! >> %outputFile%
   )
)   

rem type %outputFile%

endlocal

输出:

gmail.com       MX preference = 10, mail exchanger = alt1.gmail-smtp-in.l.google.com
gmail.com       MX preference = 5, mail exchanger = gmail-smtp-in.l.google.com
gmail.com       MX preference = 20, mail exchanger = alt2.gmail-smtp-in.l.google.com
gmail.com       MX preference = 40, mail exchanger = alt4.gmail-smtp-in.l.google.com
apple.com       MX preference = 20, mail exchanger = mx-in-mdn.apple.com
apple.com       MX preference = 20, mail exchanger = mx-in-rno.apple.com
apple.com       MX preference = 10, mail exchanger = mx-in.g.apple.com

笔记:

我使用findstr错误重定向来删除不需要的输出nslookup

答案2

我忘了说了,我只需要一行输出,而不是整个 MX 数据集。存储哪个数据集也无关紧要。此外,如果某个域中出现拼写错误,输出应该存储一条错误消息。我目前的解决方案与 BIND 9 结合使用,如下所示:

@echo off
setlocal enabledelayedexpansion

set "inputFile=domains.txt"
set "outputFile=mx_results.txt"

echo. > %outputFile%

for /f "delims=" %%i in (%inputFile%) do (
   set "result=ERROR"
   for /f "delims=" %%j in ('dig +short mx %%i') do (
      set "result=%%j"
   )

   echo !result! >> %outputFile%
)

相关内容