1 votes

Comment retourner uniquement les enregistrements DNS vides ou "problématiques" pour les requêtes en masse

Lors de l'entrée en masse de données, je veux vérifier que je mets chacune au bon endroit en effectuant une requête en bloc avec dig. Dig affichera tous les résultats positifs avec :

dig +noall +answer

ou

dig +short

Et cela se rapproche encore plus, comme indiqué dans une réponse à une autre question :

dig +noall +question +answer

Mais cela affiche toujours toute la sortie "positive", ce qui vous oblige à rechercher dans la sortie en bloc deux points-virgules d'affilée au début de la ligne pour identifier les enregistrements qui ne renvoient rien.

Ce que je recherche, c'est une commande (elle n'a pas besoin d'être Dig) qui ne renverra que les erreurs ou qui indiquera uniquement les enregistrements sans résultat, de sorte que seuls ceux-ci soient affichés, et non la sortie typique des enregistrements correctement saisis.

1voto

Clayton Points 4443

Beaucoup de façons de le faire... juste un peu de script simple. Même une réponse Python dans la question à laquelle vous avez fait référence.

  • Appeler DIG plusieurs fois au lieu d'une seule avec un fichier en bloc. Cela renvoie 1 ligne en cas d'échec, 2 ou plus en cas de succès. Afficher le nom en fonction de la réussite ou de l'échec.

  • Utiliser la méthode de recherche DNS de votre langage de script favori et évaluer le code de retour. J'aime powershell, et pour cela vous utiliseriez [System.Net.Dns]::GetHostByAddress("fully.qualified.domain.name")

  • Appeler DIG une fois avec un fichier en bloc, et analyser la sortie (expressions régulières). Exemple ci-dessous, encore une fois en powershell. Si vous êtes un utilisateur Unix, les expressions régulières sont également là. J'ai utilisé SED il y a de nombreuses années, mais il existe probablement des moyens plus simples de nos jours.

zz

[string]$digout = dig +noall +answer +question goodname1 goodname2 badname1 goodname3 badname2
$digout = $digout -replace ("\r\n", "")
$digout.split(";") | select-string -notmatch "\d\s+IN"

Renvoie :

badname1.            IN    A
badname2.            IN    A

La 1ère ligne affecte la sortie de DIG à une variable en tant que chaîne PAS un tableau. Cela est nécessaire car les expressions régulières fonctionnent sur les chaînes et non sur les tableaux. La 2ème ligne supprime les retours chariot / saut de ligne de cette variable. La partie 3A divise la variable de sorte que chaque question et sa réponse apparaissent sur la même ligne. La partie 3B filtre ce texte pour montrer uniquement les questions sans réponse.

0voto

Dave Mateer Points 163

Ce genre de chose sera beaucoup plus facile dans un langage de script. Par exemple, en Python, une recherche erronée lancera une exception :

Python 3.5.1 (default, Mar  3 2016, 09:29:07) 
[GCC 5.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.gethostbyname('google.com')
'216.58.216.78'
>>> socket.gethostbyname('alsdkfjowiejlskdjf.com')
Traceback (most recent call last):
  File "", line 1, in 
socket.gaierror: [Errno -2] Name or service not known

donc il suffit ensuite de faire toutes vos recherches et d'imprimer uniquement les résultats qui se trouvent dans votre bloc d'essai-capture.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X