Recherche DNS avec des caractères génériques?

8

Quelque chose comme nslookupou digoffrir la possibilité de rechercher sur la base de quelque chose contenu dans le nom ... comme une recherche générique ou quelque chose?

J'essaie de faire un petit script avec un wrapper GUI pour notre équipe de helpdesk. Idéalement, j'aimerais qu'ils puissent rechercher le nom de famille de l'utilisateur (quelque chose qui est toujours présent dans l'enregistrement DNS), puis je remplirai un menu déroulant avec les options possibles à choisir.

Je n'arrive pas à trouver un moyen d'avoir effectivement l'équivalent de nslookup *miller*... ce serait bien de revenir ensuite

Name: sf-jacobmiller.localdomain.com
Address: 10.10.10.121

Name: sf-justinmiller.localdomain.com
Address: 10.10.10.144

..qui je pourrais ensuite analyser dans un pulldown pour eux de choisir.

Je n'ai pas encore examiné ce qui est disponible avec ldapsearchlequel je pourrais faire ce que je recherche. Ma seule exigence est que cela soit intégré à OSX et je n'aurai pas besoin d'installer autre chose, sinon je suis ouvert à toutes les solutions que vous pouvez offrir. Merci

TryTryAgain
la source

Réponses:

11

Vous pouvez obtenir une liste complète des entrées dans une zone avec un transfert de zone; vous devez autoriser cela pour les systèmes autorisés de votre serveur DNS.

Une fois cela fait, vous pouvez exécuter le transfert et grep le résultat:

dig axfr localdomain.com | grep -i miller
Shane Madden
la source
Aussi simple et direct que j'aurais pu l'espérer. Merci
TryTryAgain
Je voudrais modifier votre réponse pour grep -iqu'elle soit insensible à la casse, sinon je me suis rendu compte que la casse causerait trop de problèmes. Mais je ne peux pas faire un montage aussi mineur. Merci encore pour une solution aussi élégante, exactement ce que je cherchais.
TryTryAgain
6

Un serveur de noms ne vous permettra pas, par conception, de rechercher une zone ou de rechercher les zones pour lesquelles il fait autorité. Au-delà de la raison évidente de réduire les vecteurs d'attaque (vous ne pouvez pas faire de requête HTTP / 1.1 à un hôte si vous ne connaissez pas son nom), il y a une très bonne raison à cela: une zone peut elle-même contenir des caractères génériques, donc demander pour chaque hôte dans une telle zone, c'est comme diviser par zéro.

Si vous utilisez le serveur de noms dont vous souhaitez rechercher les enregistrements, vous pouvez effectuer un transfert de zone vers un serveur de noms local et rechercher directement les enregistrements. Vous devrez toujours analyser les enregistrements de texte dans le format dans lequel ils sont transférés, car un serveur de noms local ne répondra pas différemment.

dartonw
la source
6

Vous ne pouvez demander à un serveur DNS que s'il a un enregistrement spécifique. Donc, non, il n'y aura pas un tel outil pour DNS.

Éditer

Le transfert de zone est bien sûr une possibilité s'il est disponible.

Christopher Perrin
la source
On dirait que tu t'es trompé, comme je m'y attendais.
TryTryAgain
3
@TryTryAgain En fait, dans le cas général , il est tout à fait correct: Notez les mots clés de la réponse que vous avez accepté: need to allow this for authorized systems in your DNS server. Par exemple, si vous tentez un transfert de zone serverfault.com(ou en fait à peu près n'importe quelle zone que vous ne contrôlez pas ou pour laquelle vous n'avez pas pris d'arrangements avec les administrateurs DNS), vous n'obtiendrez aucun résultat.
voretaq7
4
@TryTryAgain Le phrasé apparaît également comme légèrement grossier. Si la réponse était aussi évidente que vous le faites entendre, vous n'auriez pas eu à poster la question. Nous sommes tous là pour nous entraider ... en général.
Andrew B
1

En accord avec la réponse cochée, je pensais qu'une boucle for pourrait être une alternative pour quelqu'un qui n'est pas autorisé à effectuer un transfert de zone. Si vous connaissez la plage IP:

name="mthebeau"
net="123.45.67."
for ip in $( seq 1 255 ); do {
    sleep 1; # be kind to the server, unauthorized user
    text="$( nslookup $net$ip 2>&1 | grep "$name" )";
    if [ -z "$text" ]; then continue; fi;
    echo "$text";
}; do

J'ai recherché cette réponse parce que je voulais ouvrir mon bureau à un utilisateur local dont l'adresse IP et le nom de la machine que je ne connaissais pas.

user456228
la source