![파일의 호스트 이름이 A 레코드인지 별칭인지 확인할 수 없습니다.](https://linux55.com/image/108388/%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EC%9D%B4%EB%A6%84%EC%9D%B4%20A%20%EB%A0%88%EC%BD%94%EB%93%9C%EC%9D%B8%EC%A7%80%20%EB%B3%84%EC%B9%AD%EC%9D%B8%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..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" 옵션을 사용하는 것이 가장 좋습니다. 또한 A 레코드인 경우 아무것도 반환하지 않고 호스트가 반환하는 방식보다 테스트하기가 더 쉬울 수 있으므로 호스트 대신 dig 사용을 고려할 수도 있습니다(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
내 생각엔 당신이 이 스크립트를 완성할 수 있어야 할 것 같아요.