L'obtention de tous les noms d'hôte de l'adresse IP en Perl
J'essaie de trouver un moyen d'obtenir tous les noms d'hôtes qui permettent de résoudre une adresse IP.
La fonction gethostbyaddr s'affiche pour récupérer uniquement le premier enregistrement de DNS (peu importe si c'est dans scalaire ou de liste, contexte).
Exemple:
my $hostname = gethostbyaddr(inet_aton($ip_to_check), AF_INET);
$print($hostname); //output: joe.example.com
my @hostnames = gethostbyaddr(inet_aton($ip_to_check), AF_INET);
foreach my $hostname (@hostnames){
print "(", join(',',@hostnames), ")"; //output: (joe.example.com,,2,4,?)
}
À partir du terminal:
$ host 192.168.1.5
5.1.168.192.in-addr.arpa domain name pointer joe.example.com.
5.1.168.192.in-addr.arpa domain name pointer john.example.com.
J'ai entendu dire que le Net::DNS est un peu plus robuste, mais je n'ai pas eu de chance pour vous que pour tirer toutes les entrées.
OriginalL'auteur arcdegree | 2011-04-15
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé une combinaison de réponses d'ici et d'ailleurs sur un débordement de pile à trouver la réponse que je cherchais.
OriginalL'auteur arcdegree
La
gethostby...
interface est assez vieux et maladroit, étant définie de retour dans les temps primitifs, avant de Perl ai des références et prétentions à l'OO. Et il ne fonctionne pas de la façon dont vous êtes en essayant de l'utiliser. Lorsque utilisé dans un contexte de liste, il renvoie le nom primaire comme le premier élément et un espace séparé(!) liste des alias comme la deuxième:Maintenant, c'est la théorie; je n'ai pas de localiser les adresses IP avec plusieurs enregistrements PTR désinvolte, donc je ne peux pas tester si
gethostbyaddr
sera fait retour -- cela dépend probablement sur votre sous-jacente C runtime ainsi, mais ça ne fonctionne si vous utilisezgethostbyname
avec unCNAME
d nom, par exemple.J'ai rapidement cherché sur google une version du code source de la réponse DNS l'analyse que les anciennes bibliothèques C -- et il s'avère que lors de la recherche d'une adresse IP, il s'arrête simplement à la première
PTR
enregistrement de ressource. Sans doute, il est juste à fonctionner comme prévu, puisque le fait d'avoir plusieursPTR
enregistrements n'est pas recommandé. De retour dans la journée, il y a un concept de la 'canonique' nom de l'hôte qui l'PTR
dossier. Mais une autre raison de ne pas le faire est exactement ce que la bibliothèque C en choisit une au hasard, donnant des résultats imprévisibles. C'est la façon dont le monde est à vous de décider si vous l'aimez.Grand commentaire, merci pour la clarification.
OriginalL'auteur LHMathies
Voici un petit programme que j'utilise pour rechercher tous les enregistrements PTR pour un masque de réseau (par exemple 192.0.2.0/28 ) lorsque vous faites l'abus de suivi des tâches. Il envoie jusqu'à 15 requêtes par seconde et quand ils sont tous envoyés puis commence à lire les réponses (si il avais besoin d'un peu de travail pour fonctionner correctement pour le plus grand net blocs).
OriginalL'auteur Ask Bjørn Hansen
Je ne pense pas que ce soit un bien formée énoncé du problème. Dans le cas général, il y a un nombre presque infini de noms DNS qui pourraient résoudre à n'importe quelle adresse IP, même inconnus à la partie qui contient l'adresse. Inverse les recherches sont fondamentalement peu fiables, et ne sont pas capables de répondre à la question de l'affiche tiens, puisque tous les noms pour les IP n'ont pas besoin d'être dans le visible inverse de la carte.
La première réponse, qui énumère l'inverse de la carte, est le mieux qu'on puisse faire, mais il va manquer aucun des noms qui n'ont pas été inscrites dans la carte.
OriginalL'auteur dbrower
C'est ce que j'ai utilisé:
Tant que $rr->nom trouve des noms, il ne cesse d'ajouter de.
OriginalL'auteur perlcat