diff options
| author | ntma <nobody@nowhere> | 2013-10-26 12:22:53 +0000 | 
|---|---|---|
| committer | ntma <nobody@nowhere> | 2013-10-26 12:22:53 +0000 | 
| commit | 964d66b1df7ff08766e24529913fb073549dcb9f (patch) | |
| tree | fb8ddc06d15b1f0b2f2cef31a2d8148dbdcfcd1d /contrib | |
| parent | 5b113c57749eae8f771cac53863678fd609b5965 (diff) | |
| parent | a0cd5bfc306b8ee96e7a95a1d48fd6c5999df933 (diff) | |
| download | resdb-964d66b1df7ff08766e24529913fb073549dcb9f.tar.gz resdb-964d66b1df7ff08766e24529913fb073549dcb9f.zip | |
Merge git://1.41.41.1/
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/whoisd/README | 8 | ||||
| -rwxr-xr-x | contrib/whoisd/whoisd.pl | 129 | 
2 files changed, 137 insertions, 0 deletions
| 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..158c075 --- /dev/null +++ b/contrib/whoisd/whoisd.pl @@ -0,0 +1,129 @@ +#!/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 $HACK=0; +my $QUERY=<stdin>; +$QUERY =~ s/\r\n//g; +my $out; +my $title; +my $value; +my @parts; +my $i; + +if($QUERY eq "!!\n") { + $QUERY=<stdin>; + $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"; + $HACK=1; +} + +# ASNs +if($QUERY =~ m/^AS(.+?)$/) { + printf "%% AS section for %s\n", $QUERY; + my $AS=$1; + chdir("$RESDB/db/as") || die "%% error"; + if(chdir($AS) || die "%% error") { +  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 unless $HACK; + chdir("$RESDB/db/ip") || die "%% error"; + @parts=split(/\./,$QUERY); + for($i=0;$i<scalar(@parts)-1;$i++) { +  if(!chdir(sprintf("%02X",$parts[$i]))) { +   printf "%-20s %s\n", "error" . ":", "IP not found." unless $HACK; +   exit; +  } + } + foreach(split(/\n/,`grep '' -r .`)) { +  $out = $_; +  $out =~ s/^\.\///g; +  ($title, $value) = split(/:/,$out); +  printf "%-20s %s\n", $title . ":", $value unless $HACK; +  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") || die "%% error"; + for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) { +  if(!$parts[$i]) { +   printf "%% error"; +   exit +  } +  if(!chdir($parts[$i])) { +   printf "%-20s %s", "warning" . ":", "domain not found."; +   exit; +  } + } + 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 unless $HACK; + +chdir("$RESDB/db/usr") || die "%% error"; +if(chdir($QUERY)) { + foreach(split(/\n/,`grep '' -r .`)) { +  $out = $_; +  $out =~ s/^\.\///g; +  $out =~ m/^(.+?):(.+?)$/; +  ($title, $value) = ($1, $2); +  printf "%-20s %s\n", $title . ":", $value unless $HACK; + } +} else { + printf "%-20s missing db/usr file.\n", "warning" . ":" unless $HACK; +} +chdir("$RESDB/db/as") || die "%% error"; +foreach(split(/\n/,`grep '^$QUERY\$' */owner | cut -d/ -f1`)) { + $out = $_; + $out =~ s/\n//g; + 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`)) { + $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"; | 
