对两个列表执行 dig

对两个列表执行 dig

我需要对域和这些域别名进行挖掘,因此结果将是:
IF 域(+ 没有别名)并且正在使用我的名称服务器 -> 然后打印出
IF 域和别名都使用我的名称服务器 -> 然后打印出
其他所有内容都没有(包括当域使用我的名称服务器而别名不使用时)。我在 MySQL 中存储了域,并且有我正在处理的脚本:

for domain in `echo "$QUERY1" | mysql -N -s -u $USER -p$PASS $DBNAME -h$HOST | awk '{print $1}'; do
    lookup=$(dig $domain ns +short)
    if [[ "$lookup" =~ 'XXX' ]]; then
        our=1
        break
    else
        our=0
        break
    fi
done

在此查询中,我列出了所有内容(域和别名)。我当然可以创建另一个查询来仅列出别名或仅列出域。看来我需要将域的所有别名组合在一起,并循环遍历域名+别名列表。如果其中任何一个不使用 NS,我就必须设置指示打印域的变量。让我知道您的想法,如果可能的话请分享解决方案。

答案1

请考虑以下您正在处理的脚本的替代方案:

mysql --silent --skip-column-names \
    --user="$USER" --password="$PASSWORD" \
    --host="$HOST" --database="$DBNAME" \
    --execute="$QUERY1" |
awk '{ printf("%s ns +short\n", $1) }' |
if dig -f - | grep -q "XXX"; then
    our=1
else
    our=0
fi

我更喜欢在脚本中使用长选项,因为它们是自记录的。

中的查询可以以不需要的$QUERY1方式设计:awk

SELECT CONCAT(column, " ns +short") FROM ...

我已经dig从来自管道的标准输入中读取了它的查询awk,这有助于我们在输出中grep查找。XXX

不需要混乱的循环。

显然,它最后并没有做你想做的事情,而只是做你现在做的事情,但由于我对 DNS 查找不太了解,所以我就留到这里。

相关内容