Immer alle Hostnamen von der IP-Adresse in Perl
Ich versuche einen Weg zu finden, um alle Hostnamen für die Auflösung einer IP-Adresse.
Die gethostbyaddr-Funktion erscheint nur abrufen, den ersten Datensatz aus der DNS (egal, wenn es ein Skalar oder Liste Kontext).
Beispiel:
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,?)
}
Vom 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.
Ich habe gehört, dass die Net::DNS ist ein wenig robuster, aber ich habe keine Glück bekommen, ziehen alle Einträge als gut.
InformationsquelleAutor arcdegree | 2011-04-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich verwendet eine Kombination von Antworten gegeben, die hier und anderswo auf stack overflow, die Antwort zu finden, die ich suchte.
InformationsquelleAutor arcdegree
Den
gethostby...
- Schnittstelle ist Recht alt und klobig, definiert wird zurück in Urzeiten, bevor Perl bekam Referenzen und Ansprüche an OO. Und es funktioniert nicht, die Art und Weise, die Sie versuchen, es zu benutzen. Wenn verwendet, in der Liste den Kontext, es gibt den primären Namen als erstes element, und eine durch Leerzeichen-getrennte(!) Liste der Aliasnamen als die zweite:Nun, das ist die Theorie; ich habe nicht finden keine IP-Adressen, die mit mehreren PTR-records offhand, also kann ich nicht testen, ob
gethostbyaddr
tatsächlich zurückgeben-wahrscheinlich hängt von Ihrem zugrunde liegenden C-runtime-aber es funktioniert, wenn Siegethostbyname
mit einemCNAME
d name, zum Beispiel.Ich habe schnell gegoogelt bis eine version des source Codes für die DNS-Antwort Parsen, der alten C-Bibliotheken benutzen -- und es stellt sich heraus, dass, wenn man von einer IP-Adresse es hört einfach bei der ersten
PTR
resource-record. Wohl, es funktioniert einfach wie geplant, da mehrerePTR
Datensätze wird nicht empfohlen. Zurück in den Tag gab es ein Konzept des 'kanonischen' Namen des Hosts, der diePTR
Datensatz zeigen. Aber ein weiterer Grund es nicht zu tun ist genau das, dass die C-Bibliothek wählt eine zufällig, was zu unvorhersehbaren Ergebnissen. Das ist die Weise, wie die Welt ist, die Sie erhalten, zu entscheiden, ob es dir gefällt.Großartiger Kommentar, vielen Dank für die Klarstellung.
InformationsquelleAutor LHMathies
Hier ist ein kleines Programm, das ich verwenden, um die lookup-Sie alle PTR-Datensätze für eine Netzmaske (beispielsweise 192.0.2.0/28 ) bei Missbrauch tracking-Aufgaben. Es sendet bis zu 15 Anfragen pro Sekunde und wenn Sie alle gesendet, liest dann die Antworten (so Sie brauchen ein wenig Arbeit, um ordnungsgemäß zu funktionieren für größere Netto-Blöcke).
InformationsquelleAutor Ask Bjørn Hansen
Ich glaube nicht, dass dies ist ein gut geformt problem-Anweisung. Im Allgemeinen Fall gibt es eine fast unendliche Anzahl von DNS-Namen auflösen konnten, um beliebigen IP-Adresse, auch unbekannte auf der party, hält der Adresse. Reverse-lookups sind grundsätzlich unzuverlässig, und sind nicht in der Lage, die Beantwortung der Frage, der poster möchte, da alle Namen für eine IP muss nicht in den sichtbaren Rückseite der Karte.
Die erste Antwort, die zählt der Rückseite der Karte, ist das beste was man tun kann, aber es werden irgendwelche Namen, die nicht in der Karte.
InformationsquelleAutor dbrower
Dies ist, was ich verwendet habe:
Solange $rr->name findet Namen, es hält Sie Sie hinzufügen.
InformationsquelleAutor perlcat