[smokeping-users] non-uniqe DNS IDs with SmokePing and AnotherDNS

Gert Doering gert at space.net
Wed Oct 24 19:07:18 CEST 2012


forwarded to the list on request, in case someone might have more insight 
or better Perl-Fu...

----- Forwarded message from Gert Doering <gert at space.net> -----

Date: Wed, 24 Oct 2012 12:14:11 +0200
From: Gert Doering <gert at space.net>
Subject: non-uniqe DNS IDs with SmokePing and AnotherDNS
User-Agent: Mutt/1.5.21 (2010-09-15)

Hi Olaf, Tobi,

I've run into an issue with SmokePing, its AnotherDNS probe, and Net::DNS
that I do not understand.

Specifically, every DNS probe SmokePing sends carries the very same
Query ID - which it shouldn't do from a DNS PoV, but even from staring
at the code involved, this should not happen (I have traces from various
versions of SmokePing and perl on FreeBSD and Linux that show this, so 
I claim it's not my local installation that is borked).

SmokePing does this (AnotherDNS.pm, pingone()):

-------------------- snip ---------------------
    my $packet = Net::DNS::Packet->new( $lookuphost, $recordtype )->data;
    for ( my $run = 0 ; $run < $self->pings($target) ; $run++ ) {
-------------------- snip ---------------------

while Net::DNS::Header does:

-------------------- snip ---------------------
        sub nextid { int rand(MAX_ID); }

sub new {
        my $class = shift;

        bless { id      => nextid(),
-------------------- snip ---------------------

together, this should achieve:

 - for every invocation of pingone(), a new (random) DNS ID is rolled
 - for all $self->pings($target)  (5), the same ID is used, as the same
   Net::DNS::Packet is sent
   (whether this is "right" is debatable, but it is the way it is today)

but, what I see is that *every* *single* DNS packet that AnotherDNS
creates, no matter for which target (different packets!), or for which
run-of-5, will *always* use the very same DNS query ID - verified by
calling Data::Dumper on what Net::DNS::Packet->new() returns, "id => ..."
changes when I restart SmokePing, but after that, it's always the same.

Now, one could argue that "something in SmokePing is breaking rand()",
but it's not so easy.  If I change the SmokePing code to do this:

-------------------- snip ---------------------
    my $p1 = Net::DNS::Packet->new( $lookuphost, $recordtype );
    for ( my $run = 0 ; $run < $self->pings($target) ; $run++ ) {
        $p1->header->id( int(rand(65535)) );
        my $packet = $p1->data;
-------------------- snip ---------------------

it will send a random query ID for every single packet - so rand() is not
to blame.

OTOH, Net::DNS::Packet is also very well-behaved if I call it from a 
test program

-------------------- snip ---------------------
#!/usr/bin/perl -w
use Data::Dumper;
use Net::DNS;

foreach my $i (0..4)
    my $packet = Net::DNS::Packet->new( "www.space.net", "A" );
    print Dumper($packet);
-------------------- snip ---------------------

-> new ID every time (this is what *should* happen for different runs of
SmokePing's "pingone()" - i.e. for different targets, or every 5 minutes
for a new set of DNS queries).

Soooo... something in SmokePing is affecting Net::DNS::Header's
"nextid()" in surprising ways, and I can't find it...

I think it's a SmokePing bug (the query ID should be randomized for 
every single packet, not only between runs) *but* the fact that it
can break what Net::DNS::Header is doing might warrant looking at the
implementation in Net::DNS - "applications should not be able to break
that!".  No?

thanks for your attention :-)

Gert Doering
        -- NetMaster
have you enabled IPv6 on something today...?

SpaceNet AG                        Vorstand: Sebastian v. Bomhard
Joseph-Dollinger-Bogen 14          Aufsichtsratsvors.: A. Grundner-Culemann
D-80807 Muenchen                   HRB: 136055 (AG Muenchen)
Tel: +49 (89) 32356-444            USt-IdNr.: DE813185279
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 306 bytes
Desc: not available
Url : http://lists.oetiker.ch/pipermail/smokeping-users/attachments/20121024/94d165f3/attachment-0001.pgp 

More information about the smokeping-users mailing list