# HG changeset patch # User Heiko Schlittermann # Date 1505252223 -7200 # Node ID a08198ba515094b593ea430af8c81bc0df729ff1 # Parent 52d1ff194af0c64b038ddb20e6ab62177e492fdf Moved to git://git.schlittermann.de/users/heiko/dnssec-info.git diff -r 52d1ff194af0 -r a08198ba5150 Build.PL --- a/Build.PL Tue Apr 07 14:14:51 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -#!perl -use strict; -use warnings; -use Module::Build; - -Module::Build->new( - dist_name => 'dnssec-info', - dist_abstract => 'tool to get dnssec information', - version_from => 'lib/DNSSec.pm', - module_name => 'DNSSec', - requires => { - 'Net::DNS' => 0, - 'Net::DNS::SEC' => 0, - }, - test_requires => { - 'Test::Exception' => 0, - }, -)->create_build_script; diff -r 52d1ff194af0 -r a08198ba5150 README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/README Tue Sep 12 23:37:03 2017 +0200 @@ -0,0 +1,1 @@ +moved to git://git.schlittermann.de/users/heiko/dnssec-info diff -r 52d1ff194af0 -r a08198ba5150 bin/dnssec-info --- a/bin/dnssec-info Tue Apr 07 14:14:51 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -#!/usr/bin/perl - -use v5.14; -use strict; -use warnings; -use Pod::Usage; -use Getopt::Long; -use DNSSec qw(keyinfo); -use List::Util qw(max); -use if $ENV{DEBUG} => 'Smart::Comments'; - -sub pretty { - my $hash = shift; - my @fields = do { - my @x; - while (@_) { - push @x, [shift, shift]; - } - @x; - }; - my $maxl = max map { length $_->[0] } @fields; - - my @pretty; - foreach my $f (@fields) { - my $sub = $f->[1]; - push @pretty, sprintf '%*s: %s', - $maxl, $f->[0], $hash->$sub, - } - return @pretty; -} - -sub main { - my $domain; - my $server; - GetOptions( - 's|server=s' => \$server, - 'h|help' => sub { pod2usage(-exitval => 0) }, - 'm|man' => sub { - pod2usage( - -exitval => 0, - -verbose => 2, - -noperldoc => system('perldoc -V >/dev/null'), - ), - ; - }, - ) and $domain = shift @ARGV // pod2usage; - say $domain, "\n", '-' x length $domain; - - # get the dnskeys directory from the public available information - my @ki = keyinfo {-server => $server }, $domain; -# use Data::Dumper; -# die Dumper \@ki; - - foreach my $ki (@ki) { - say '** DNS Key'; - say "\t", join "\n\t", pretty $ki->{key}, - Algorithm => 'algorithm', - Flags => 'flags', - Protocol => 'protocol' , - Key => 'key', - Keytag => 'keytag'; - say '** DNS Key Digest'; - say "\t", join "\n\t", pretty $ki->{digest}, - Algorithm => 'algorithm', - Digest => 'digest', - 'Digest Type' => 'digtype', - Keytag => 'keytag', - } - -} - - - -exit main @ARGV if not caller; - -__END__ -=head1 NAME - - dnssec-info - get various informations about a dnssec domain - -=head1 SYNOPSIS - - dnssec-info [-s|--server ] - -=head1 DESCRIPTION - -B retrieves varios information about a dnssec domain. - -=head1 OPTIONS - -=over - -=item B<-h>|B<--help> -=item B<-m>|B<--man> - -Helpful information. - -=item B<-s>|B<--server> I - -Send the query to a specific DNS server. (default: depend on your local settings) - - -=back - -=cut diff -r 52d1ff194af0 -r a08198ba5150 lib/DNSSec.pm --- a/lib/DNSSec.pm Tue Apr 07 14:14:51 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -package DNSSec; -use v5.14; -use strict; -use warnings; -use Net::DNS::SEC::Keyset; -use base 'Exporter'; - -our @EXPORT_OK = qw(keyset ksk keyinfo); - - -sub keyset { - my %arg = %{+shift} if ref $_[0] eq ref {}; - my $domain = shift; - - my $resolver = Net::DNS::Resolver->new( - $arg{-server} ? (nameservers => [$arg{-server}]) : ()); - $resolver->dnssec(1); - - my $keys = $resolver->query($domain => (DNSKEY => 'IN')) - or die $resolver->errorstring; - - my $ks = Net::DNS::SEC::Keyset->new($keys) - or die $Net::DNS::SEC::Keyset::keyset_err; - return $ks; -} - -sub ksk { - return grep { $_->flags & 0x1 } @_; -} - -sub keyinfo { - my $ks = keyset @_; - my @keyinfo; - foreach my $k (ksk $ks->keys) { - my %keyinfo; - $keyinfo{key} = $k; - $keyinfo{digest} = Net::DNS::RR::DS->create($k, digtype => 'SHA-256'); - push @keyinfo, \%keyinfo; - } - return @keyinfo; -} - -1; diff -r 52d1ff194af0 -r a08198ba5150 t/01-dnssec.t --- a/t/01-dnssec.t Tue Apr 07 14:14:51 2015 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -#!/usr/bin/perl -use strict; -use warnings; -use Test::More; -use Test::Exception; -use Data::Dumper; - -my @ZONES = qw(. schlittermann.info schlittermann.de); - -use_ok DNSSec => qw(keyset ksk keyinfo); - -# first the K.O. tests -dies_ok { dnskeys('this.domain.does.not.exist.never.ever') } 'dies on non existent domain'; - -subtest $_ => sub { - # now the real ones - my $keyset = keyset($_); - cmp_ok scalar($keyset->keys), '>=', 2 => 'got some keys'; - my @ksk = ksk($keyset->keys); - cmp_ok scalar(@ksk), '>=', 1 => 'got at least one KSK'; -} foreach (@ZONES); - - -done_testing;