From 85e32860a7dd614f433018d3e0371ecf4a96543f Mon Sep 17 00:00:00 2001 From: epoch Date: Fri, 23 Aug 2013 03:24:54 +0000 Subject: Added a whoisd to make for easier querying of the resdb's info. Read the source. --- contrib/whoisd/README | 8 ++++ contrib/whoisd/whoisd.pl | 99 ++++++++++++++++++++++++++++++++++++++++++++++++ db/usr/epoch/email | 1 + db/usr/epoch/irc | 1 + 4 files changed, 109 insertions(+) create mode 100644 contrib/whoisd/README create mode 100755 contrib/whoisd/whoisd.pl create mode 100644 db/usr/epoch/email create mode 100644 db/usr/epoch/irc diff --git a/contrib/whoisd/README b/contrib/whoisd/README new file mode 100644 index 0000000..228197c --- /dev/null +++ b/contrib/whoisd/README @@ -0,0 +1,8 @@ +RTFS + +todo: + ipv6 + more info in responses? + make it compatible with traceroute -A ? + +add any other features you'd like either in here or the source. You know perl, right? diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl new file mode 100755 index 0000000..8580475 --- /dev/null +++ b/contrib/whoisd/whoisd.pl @@ -0,0 +1,99 @@ +#!/usr/bin/perl +# coded by epoch. +# use inetd or tcpserver or something else. +# waste of time to do manual sockets for something like this. +# this isn't my baby. you can murder it if you want. + +use strict; + +my $RESDB = "/services/resdb/resdb"; + +my $QUERY=; +$QUERY =~ s/\r\n//g; +my $out; +my $title; +my $value; +my @parts; +my $i; + +# ASNs +if($QUERY =~ m/^AS(.+?)$/) { + printf "%% AS section for %s\n", $QUERY; + my $AS=$1; + chdir("$RESDB/db/as"); + if(chdir($AS)) { + foreach(split(/\n/,`grep '' -r .`)) { + $out = $_; + $out =~ s/^\.\///g; + $out =~ m/^(.+?):(.+?)$/; + ($title, $value) = ($1, $2); + printf "%-20s %s\n", $title . ":", $value; + if($title eq "owner") { + $QUERY = $value; + } + } + } else { + printf "AS not found."; + } +} + +# IPv4 addresses +if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) { + printf "%% IP section for %s\n", $QUERY; + chdir("$RESDB/db/ip"); + foreach(split(/\./,$QUERY)) { + chdir(sprintf("%02x",$_)); + } + foreach(split(/\n/,`grep '' -r .`)) { + $out = $_; + $out =~ s/^\.\///g; + ($title, $value) = split(/:/,$out); + printf "%-20s %s\n", $title . ":", $value; + if($title eq "owner") { + $QUERY = $value; + } + } +} + + +# if we get here and there's still a . in the query it is probably a domain. +if($QUERY =~ m/\./) { + printf "%% domain section for %s\n", $QUERY; + @parts=split(/\./,$QUERY); + chdir("$RESDB/db/dom"); + for($i=scalar(@parts)-1;$i>=0;$i--) { + chdir($parts[$i]); + } + foreach(split(/\n/,`grep '' -r .`)) { + $out = $_; + $out =~ s/^\.\///g; + $out =~ m/^(.+?):(.+?)$/; + ($title, $value) = ($1, $2); + printf "%-20s %s\n", $title . ":", $value; + if($title eq "owner") { + $QUERY = $value; + } + } +} + +# default to assuming it is a name. +printf "%% user section for %s\n", $QUERY; + +chdir("$RESDB/db/usr"); +if(chdir($QUERY)) { + foreach(split(/\n/,`grep '' -r .`)) { + $out = $_; + $out =~ s/^\.\///g; + $out =~ m/^(.+?):(.+?)$/; + ($title, $value) = ($1, $2); + printf "%-20s %s\n", $title . ":", $value; + } +} else { + printf "%-20s missing db/usr file.\n", "warning" . ":"; +} +chdir("$RESDB/db/as"); +foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) { + $out = $_; + $out =~ s/\n//g; + printf "%-20s %s\n", "ASN" . ":", $out; +} diff --git a/db/usr/epoch/email b/db/usr/epoch/email new file mode 100644 index 0000000..bbaa967 --- /dev/null +++ b/db/usr/epoch/email @@ -0,0 +1 @@ +epoch@hacking.allowed.ano diff --git a/db/usr/epoch/irc b/db/usr/epoch/irc new file mode 100644 index 0000000..e6402a5 --- /dev/null +++ b/db/usr/epoch/irc @@ -0,0 +1 @@ +epoch in #default on hacking.allowed.ano -- cgit v1.2.3 From 954370bda476ad83458fde843a43f0477c6fcb42 Mon Sep 17 00:00:00 2001 From: epoch Date: Fri, 23 Aug 2013 18:22:48 +0000 Subject: updated whoid --- contrib/whoisd/whoisd.pl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl index 8580475..06c2cdf 100755 --- a/contrib/whoisd/whoisd.pl +++ b/contrib/whoisd/whoisd.pl @@ -97,3 +97,12 @@ foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) { $out =~ s/\n//g; printf "%-20s %s\n", "ASN" . ":", $out; } + +foreach(split(/\n/,`grep -i -e "^$QUERY\$" "$RESDB/db/dom"/*/*/owner`)) { + $out = $_; + $out =~ s/.*\/db\/dom\/(.+?)\/(.+?)\/owner.*/\2\.\1/; + if ($out ne "") { #fix this comparison. + printf "%-20s %s\n", "domain" . ":", $out; + } +} +#printf "%-20s %s\n", "notice:","$QUERY did not claim any domains yet"; -- cgit v1.2.3 From bd6625e258cb8f551fa12ce1cc689f6163788235 Mon Sep 17 00:00:00 2001 From: epoch Date: Fri, 23 Aug 2013 18:43:12 +0000 Subject: fixed another bug in whoisd --- contrib/whoisd/whoisd.pl | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl index 06c2cdf..5b9aa54 100755 --- a/contrib/whoisd/whoisd.pl +++ b/contrib/whoisd/whoisd.pl @@ -41,8 +41,12 @@ if($QUERY =~ m/^AS(.+?)$/) { if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) { printf "%% IP section for %s\n", $QUERY; chdir("$RESDB/db/ip"); - foreach(split(/\./,$QUERY)) { - chdir(sprintf("%02x",$_)); + @parts=split(/\./,$QUERY); + for($i=0;$i Date: Sun, 6 Oct 2013 10:21:44 +0000 Subject: whoisd... don't remember. added ipv6 address for my nameserver does anyone still use bind_tld_zonefile? upgraded bind_tld_zonefile.sh to use ipv6 in one place and rDNS in another --- contrib/whoisd/whoisd.pl | 34 +++++++++++++------ db/dom/ano/allowed/ns/ns6.allowed.ano | 1 + scripts/nameserver_autogen/bind_tld_zonefile | 1 + scripts/nameserver_autogen/bind_tld_zonefile.sh | 44 +++++++++++++++++++------ 4 files changed, 60 insertions(+), 20 deletions(-) create mode 100644 db/dom/ano/allowed/ns/ns6.allowed.ano diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl index 5b9aa54..f0ea59d 100755 --- a/contrib/whoisd/whoisd.pl +++ b/contrib/whoisd/whoisd.pl @@ -8,6 +8,7 @@ use strict; my $RESDB = "/services/resdb/resdb"; +my $HACK=0; my $QUERY=; $QUERY =~ s/\r\n//g; my $out; @@ -16,6 +17,15 @@ my $value; my @parts; my $i; +if($QUERY eq "!!\n") { + $QUERY=; + $QUERY =~ s/^!r(.+?)[\/,].*$/\1/; + printf "A500\n"; #fake this I guess. Does it even use that number for anything? + printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n"; + printf "%% support will come soon for that.\n"; + $HACK=1; +} + # ASNs if($QUERY =~ m/^AS(.+?)$/) { printf "%% AS section for %s\n", $QUERY; @@ -39,12 +49,12 @@ if($QUERY =~ m/^AS(.+?)$/) { # IPv4 addresses if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) { - printf "%% IP section for %s\n", $QUERY; + printf "%% IP section for %s", $QUERY unless $HACK; chdir("$RESDB/db/ip"); @parts=split(/\./,$QUERY); for($i=0;$i=0;$i--) { - chdir($parts[$i]); + for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) { + if(!chdir($parts[$i])) { + printf "%-20s %s", "warning" . ":", "domain not found."; + exit; + } } foreach(split(/\n/,`grep '' -r .`)) { $out = $_; @@ -81,7 +94,7 @@ if($QUERY =~ m/\./) { } # default to assuming it is a name. -printf "%% user section for %s\n", $QUERY; +printf "%% user section for %s\n", $QUERY unless $HACK; chdir("$RESDB/db/usr"); if(chdir($QUERY)) { @@ -90,16 +103,17 @@ if(chdir($QUERY)) { $out =~ s/^\.\///g; $out =~ m/^(.+?):(.+?)$/; ($title, $value) = ($1, $2); - printf "%-20s %s\n", $title . ":", $value; + printf "%-20s %s\n", $title . ":", $value unless $HACK; } } else { - printf "%-20s missing db/usr file.\n", "warning" . ":"; + printf "%-20s missing db/usr file.\n", "warning" . ":" unless $HACK; } chdir("$RESDB/db/as"); foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) { $out = $_; $out =~ s/\n//g; - printf "%-20s %s\n", "ASN" . ":", $out; + printf "%-20s AS%s\n", "origin" . ":", $out if $HACK; + printf "%-20s AS%s\n", "origin" . ":", $out unless $HACK; } foreach(split(/\n/,`grep -i -e "^$QUERY\$" "$RESDB/db/dom"/*/*/owner`)) { diff --git a/db/dom/ano/allowed/ns/ns6.allowed.ano b/db/dom/ano/allowed/ns/ns6.allowed.ano new file mode 100644 index 0000000..542e31a --- /dev/null +++ b/db/dom/ano/allowed/ns/ns6.allowed.ano @@ -0,0 +1 @@ +fd63:1e39:6f73:2929::1 diff --git a/scripts/nameserver_autogen/bind_tld_zonefile b/scripts/nameserver_autogen/bind_tld_zonefile index 344bb4e..fb224e5 100755 --- a/scripts/nameserver_autogen/bind_tld_zonefile +++ b/scripts/nameserver_autogen/bind_tld_zonefile @@ -1,4 +1,5 @@ #!/usr/bin/php +#does anyone use this? $ANO_ZONEFILE -echo '$TTL 3600' >> $ANO_ZONEFILE -echo '@ IN SOA localns root ('`date +" %Y%m%d00"`' 60 300 3600000 3600 )' >> $ANO_ZONEFILE -echo '@ IN NS localns' >> $ANO_ZONEFILE -echo 'localns IN A 127.0.0.1' >> $ANO_ZONEFILE cd ${RESDB_PATH}/db/dom/ano -echo -n generating zonefile... +echo -n "generating ipv4 reverse lookup zonefile for 1/8..." + +echo "; this zonefile genreated on: `date`" > "$RDNS_ZONEFILE" +echo '$TTL 3600' >> "$RDNS_ZONEFILE" +echo '@ IN SOA localhost. root.localhost. ('`date +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$RDNS_ZONEFILE" +echo '@ IN NS localhost.' >> "$RDNS_ZONEFILE" +echo 'localhost. IN A 127.0.0.1' >> "$RDNS_ZONEFILE" + +for i in `ls /services/resdb/resdb/db/ip/01/*/*/ns/*`;do + f=$(basename $i) + a=$(basename $(dirname $i)) + b=$(basename $(dirname $(dirname $i))) + c=$(basename $(dirname $(dirname $(dirname $i)))) + printf "%d.%d IN NS %s\n" $[0x${b}] $[0x${c}] ${f}. +done >> "$RDNS_ZONEFILE" +echo done. + +echo -n generating .ano TLD zonefile... + +echo "; this zonefile genreated on: `date`" > "$ANO_ZONEFILE" +echo '$TTL 3600' >> "$ANO_ZONEFILE" +echo '@ IN SOA localhost. root.localhost. ('`date +" %Y%m%d%H"`' 60 300 3600000 3600 )' >> "$ANO_ZONEFILE" +echo '@ IN NS localhost.' >> "$ANO_ZONEFILE" +echo 'localhost. IN A 127.0.0.1' >> "$ANO_ZONEFILE" + for name in *;do if [ -e "${name}/ns/" ];then for server in "$name"/ns/*;do - if grep '\.ano$' <<< $name > /dev/null;then + if grep '\.ano$' <<< "$name" > /dev/null;then true fi - if grep '\.ano$' <<< $server > /dev/null;then + if grep '\.ano$' <<< "$server" > /dev/null;then true fi fqserver=`cut -d/ -f3- <<< $server` echo -e "${name}\tIN NS\t${fqserver}." for ip in `cat ${server}`;do - echo -e "${fqserver}.\tIN A\t$ip" + if grep ':' <<< "$ip" > /dev/null;then + echo -e "${fqserver}.\tIN AAAA\t$ip" + else + echo -e "${fqserver}.\tIN A\t$ip" + fi done done fi -done >> $ANO_ZONEFILE +done >> "$ANO_ZONEFILE" echo done. echo might want to send a sighup to your named now. -- cgit v1.2.3 From e7bde38e95ebe5dda85bce3adb6d3f5c8db9c6e4 Mon Sep 17 00:00:00 2001 From: epoch Date: Sun, 6 Oct 2013 11:04:27 +0000 Subject: added whois.ano ofc. --- db/dom/ano/whois/ns/ns.whois.ano | 0 db/dom/ano/whois/owner | 1 + 2 files changed, 1 insertion(+) create mode 100644 db/dom/ano/whois/ns/ns.whois.ano create mode 100644 db/dom/ano/whois/owner diff --git a/db/dom/ano/whois/ns/ns.whois.ano b/db/dom/ano/whois/ns/ns.whois.ano new file mode 100644 index 0000000..e69de29 diff --git a/db/dom/ano/whois/owner b/db/dom/ano/whois/owner new file mode 100644 index 0000000..3aea3d0 --- /dev/null +++ b/db/dom/ano/whois/owner @@ -0,0 +1 @@ +epoch -- cgit v1.2.3 From ada38c34846fa0da9739419e428d12fff771d3e5 Mon Sep 17 00:00:00 2001 From: epoch Date: Sun, 6 Oct 2013 11:29:47 +0000 Subject: forgot a newline --- contrib/whoisd/whoisd.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl index f0ea59d..d865c7a 100755 --- a/contrib/whoisd/whoisd.pl +++ b/contrib/whoisd/whoisd.pl @@ -49,7 +49,7 @@ if($QUERY =~ m/^AS(.+?)$/) { # IPv4 addresses if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) { - printf "%% IP section for %s", $QUERY unless $HACK; + printf "%% IP section for %s\n", $QUERY unless $HACK; chdir("$RESDB/db/ip"); @parts=split(/\./,$QUERY); for($i=0;$i Date: Sun, 6 Oct 2013 11:45:06 +0000 Subject: found a bug when sending just '.'... wasn't good. --- contrib/whoisd/whoisd.pl | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/contrib/whoisd/whoisd.pl b/contrib/whoisd/whoisd.pl index d865c7a..158c075 100755 --- a/contrib/whoisd/whoisd.pl +++ b/contrib/whoisd/whoisd.pl @@ -22,7 +22,6 @@ if($QUERY eq "!!\n") { $QUERY =~ s/^!r(.+?)[\/,].*$/\1/; printf "A500\n"; #fake this I guess. Does it even use that number for anything? printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n"; - printf "%% support will come soon for that.\n"; $HACK=1; } @@ -30,8 +29,8 @@ if($QUERY eq "!!\n") { if($QUERY =~ m/^AS(.+?)$/) { printf "%% AS section for %s\n", $QUERY; my $AS=$1; - chdir("$RESDB/db/as"); - if(chdir($AS)) { + chdir("$RESDB/db/as") || die "%% error"; + if(chdir($AS) || die "%% error") { foreach(split(/\n/,`grep '' -r .`)) { $out = $_; $out =~ s/^\.\///g; @@ -50,7 +49,7 @@ if($QUERY =~ m/^AS(.+?)$/) { # IPv4 addresses if($QUERY =~ m/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/) { printf "%% IP section for %s\n", $QUERY unless $HACK; - chdir("$RESDB/db/ip"); + chdir("$RESDB/db/ip") || die "%% error"; @parts=split(/\./,$QUERY); for($i=0;$iscalar(@parts)-3;$i--) { + if(!$parts[$i]) { + printf "%% error"; + exit + } if(!chdir($parts[$i])) { printf "%-20s %s", "warning" . ":", "domain not found."; exit; @@ -96,7 +99,7 @@ if($QUERY =~ m/\./) { # default to assuming it is a name. printf "%% user section for %s\n", $QUERY unless $HACK; -chdir("$RESDB/db/usr"); +chdir("$RESDB/db/usr") || die "%% error"; if(chdir($QUERY)) { foreach(split(/\n/,`grep '' -r .`)) { $out = $_; @@ -108,7 +111,7 @@ if(chdir($QUERY)) { } else { printf "%-20s missing db/usr file.\n", "warning" . ":" unless $HACK; } -chdir("$RESDB/db/as"); +chdir("$RESDB/db/as") || die "%% error"; foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) { $out = $_; $out =~ s/\n//g; -- cgit v1.2.3