Net:DNS und nichtrekursive Queries

13/10/2010 - 15:07 von Marc Haber | Report spam
Hi,

ich möchte gerne in einem Script herausfinden, wohin gewisse
Topleveldomains delegiert sind[1]. Mein System ist Debian unstable und
hat perl 5.10.0.

Dazu habe ich das folgende Script:
#!/usr/bin/perl -w

use strict;
use Net::DNS;
use Data::Dumper;

my $res=Net::DNS::Resolver->new(recurse=>0,search=>"",domain=>"");
$res->nameservers(("192.58.128.30"));
my $query = $res->send("uk\.", "NS");
if ($query) {
print "query returned non-empty output";
print Dumper($query);
} else {
warn "query failed: ", $res->errorstring, "";
}

Wenn ich das laufen lasse, bekomme ich zurück:
|query returned non-empty output
|$VAR1 = bless( {
| 'answer' => [],
| 'buffer' => \'��
| uk�
| �
|nsanic�
| �
| �ns2�$�
| �ns4�$�
| �ns6�$�
| �ns7�$�
| �nsc�$�
| �ns3�$�
| �ns5�$�
| �nsb�$�
| �nsd�$�
| �ns1�$����B�����H��S���H� 0�5��������Z������l��y(�� ���d� � � ����e�~���f�����g',
| 'question' => [
| bless( {
| 'qclass' => 'IN',
| 'qname' => 'uk',
| 'qtype' => 'NS'
| }, 'Net::DNS::Question' )
| ],
| 'answerfrom' => '192.58.128.30',
| 'answersize' => 482,
| 'additional' => [],
| 'authority' => [],
| 'header' => bless( {
| 'nscount' => 11,
| 'cd' => 0,
| 'qdcount' => 1,
| 'ancount' => 0,
| 'rcode' => 'NOERROR',
| 'tc' => 0,
| 'opcode' => 'QUERY',
| 'ad' => 0,
| 'ra' => 0,
| 'qr' => 1,
| 'arcount' => 14,
| 'id' => 55488,
| 'aa' => 0,
| 'rd' => 0
| }, 'Net::DNS::Header' ),
| 'offset' => 20
| }, 'Net::DNS::Packet' );

Man beachte die leere answer- und authority-Sektion.

Wenn ich mit tcpdump auf das Kabel gucke, bekommt das Script durchaus
eine Antwort mit nichtleerer Authoritysektion, was man anhand von
"nscount" auch in der Ausgabe des Net::DNS::Packet-Objekts sehen
kann.

Parset Net::DNS::Resolver die Antwort nicht korrekt oder mache ich
etwas verkehrt?

Grüße
Marc

[1] die eigentliche Aufgabe ist komplexer[2] und wurde zur
Demonstration meiner aktuellen Herausforderung vereinfacht.
[2] ich möchte für eine lange Liste von Domains Irregularitàten in der
Delegation ermitteln und muss dazu herausfinden, was wirklich in den
Zonefiles der TLD steht. Sprich, ich _muss_ Rekursion abschalten.
Marc Haber | " Questions are the | Mailadresse im Header
Mannheim, Germany | Beginning of Wisdom " | http://www.zugschlus.de/
Nordisch by Nature | Lt. Worf, TNG "Rightful Heir" | Fon: *49 621 72739834
 

Lesen sie die antworten

#1 Ralf Döblitz
13/10/2010 - 20:55 | Warnen spam
Marc Haber <mh+ schrieb:
Hi,

ich möchte gerne in einem Script herausfinden, wohin gewisse
Topleveldomains delegiert sind[1]. Mein System ist Debian unstable und
hat perl 5.10.0.

Dazu habe ich das folgende Script:
#!/usr/bin/perl -w

use strict;
use Net::DNS;
use Data::Dumper;

my $res=Net::DNS::Resolver->new(recurse=>0,search=>"",domain=>"");
$res->nameservers(("192.58.128.30"));
my $query = $res->send("uk\.", "NS");
if ($query) {
print "query returned non-empty output";
print Dumper($query);
} else {
warn "query failed: ", $res->errorstring, "";
}


[...]
Man beachte die leere answer- und authority-Sektion.



Bei Answer ist das auch korrekt, da gibt es nàmlich keine. Ich bekommen
hie rnur Daten in Authority und Additional zurück.

[...]
Parset Net::DNS::Resolver die Antwort nicht korrekt oder mache ich
etwas verkehrt?



Letzteres. ;-)

Die Sections werden erst on demand geparset, dadurch siehst du im
Dumper-Output noch nichts. Wenn du $query->authority() und/oder
$query->additional() aufrufst, dann solltest du die benötigten Daten
bekommen (und danach sieht man sie auch im Dumper-Output).

Ralf
Ralf Döblitz * Schapenstraße 6 * 38104 Braunschweig * Germany
Phone: +49-531-2361223 Fax: +49-531-2361224 mailto:
Homepage: http://www.escape.de/users/selene/
Mit UTF-8 kann man gleichzeitig àöüßÄÖÜæœłø‱¼½¾¤¹²³¢€£¥¶§¬÷×±©®™¡¿ verwenden…

Ähnliche fragen