![我无法确定文件中的主机名是 A 记录还是别名](https://linux22.com/image/108388/%E6%88%91%E6%97%A0%E6%B3%95%E7%A1%AE%E5%AE%9A%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E4%B8%BB%E6%9C%BA%E5%90%8D%E6%98%AF%20A%20%E8%AE%B0%E5%BD%95%E8%BF%98%E6%98%AF%E5%88%AB%E5%90%8D.png)
这是我的脚本,我可以完成粗体部分。我试图通过查看我的主机名是 A 记录还是别名来完成我的脚本。我运气不好,真的需要别人的建议。我尝试过使用 grep 和 awk,但似乎不起作用。
#!/bin/sh
#Query DB for cnames
#Pulling cnames
#Lets use sed to clean up and remove "" that regex miss.
#Added dos2unix to get rid of the hidden M from /tmp/final.csv
mssql -f csv -c ~/applications/mssql/mssql.json -q "SELECT * FROM Cname" | cut -f 3 -d "," | sed 's/["]//g' | sort | uniq | dos2unix >/tmp/final.csv
#Validating cnames from file /tmp/final.csv
while read -r host
do
echo $host | egrep "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$" >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "host $host 8.8.8.8"
else
echo "unable to resolve '$host'" >&2
fi
done < /tmp/final.csv
# removed weird stars from some of these lines -- thrig
#Verify whether it's an A record or an alias
LOOKUP=`host $host 8.8.8.8`
if [ $? -eq 0 ]
then
echo $LOOKUP | grep -f "alias" | awk '{print $2}'| grep -v '#' | awk '{print $2}'
else
echo "$LOOKUP is null"
fi
# what is this in relation to?? -- thrig
done
答案1
DNS 中的别名是 CNAME,因此如果您要检查该别名,最好查询该记录类型,并使用选项“-t CNAME”。另外,您可能需要考虑使用 dig 而不是 host (我认为 host 已被弃用,但不确定),因为如果它是 A 记录,它不会返回任何内容,并且可能比 host 返回的方式更容易测试。例如:
$ dig -t CNAME +short ftp.med.cornell.edu
web-prd01.med.cornell.edu.
$ dig -t CNAME +short web-prd01.med.cornell.edu
最后一个命令没有输出。如果您确实想使用主机:
$ host -t CNAME ftp.med.cornell.edu
ftp.med.cornell.edu is an alias for web-prd01.med.cornell.edu.
$ host -t CNAME web-prd01.med.cornell.edu
web-prd01.med.cornell.edu has no CNAME record
我认为你应该能够完成这个脚本。