Je ne parviens pas à voir si mes noms d'hôtes de mon fichier sont soit un enregistrement A, soit un alias.

1

Voici mon script et je suis bon pour la section audacieuse. J'essaie de terminer mon script en vérifiant si mes noms d'hôte sont un enregistrement A ou un alias. Je n'ai pas de chance et j'ai vraiment besoin des conseils de quelqu'un. J'ai essayé d'utiliser grep et awk et semble ne pas fonctionner.

#!/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
jphil1971
la source
C'est là que j'ai des problèmes. J'essaie de voir quels noms d'hôte de /tmp/final.csv sont soit un enregistrement A, soit un alias. Je ne sais pas comment faire pour que cela fonctionne et je suis sûr que le code est faux.
jphil1971

Réponses:

2

Un alias dans DNS est un CNAME. Par conséquent, si vous vérifiez cela, il serait préférable de rechercher ce type d'enregistrement, utilisez l'option '-t CNAME'. Vous pouvez également envisager d'utiliser dig au lieu d'hôte (je pense que l'hôte est obsolète, mais il n'en est pas sûr), car il ne renvoie rien s'il s'agit d'un enregistrement A et peut-être plus facile à tester que le retour de l'hôte. Par exemple:

$ dig -t CNAME +short ftp.med.cornell.edu
web-prd01.med.cornell.edu.

$ dig -t CNAME +short web-prd01.med.cornell.edu

Cette dernière commande n'a pas de sortie. Si vous voulez vraiment utiliser host:

$ 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

Je pense que vous devriez pouvoir terminer le script avec ça.

Vallée
la source
hostet nslookupsont en effet des outils déconseillés / non recommandés pour les opérations DNS. digest le recommandé.
Patrick Mevzek
D'où avez-vous obtenu qui hostest obsolète? Il vient dans le même paquet de ISC que dig. C'est juste une version plus simple de dig.
Johan Myréen
1
obsolète est peut-être trop fort, c’est juste que dès que vous apprenez à utiliser, digil n’ya aucun cas où vous devez revenir host. Alors, pourquoi apprendre 2 outils où l’un est clairement tout ce dont vous avez besoin? Comme le dit la documentation: "Le gestionnaire d'informations de domaine (dig) est l'outil de recherche le plus polyvalent et le plus complet." (discussion entre dig, host et nslookup)
Patrick Mevzek
Je pensais l'avoir lu dans une page de manuel indiquant que l'hôte allait devenir obsolète, mais je ne le trouve plus. Il y avait un plan pour déprécier nslookup et host en 2004, alors c'est peut-être ce à quoi je pensais: en.wikipedia.org/wiki/Nslookup
Dale