diff options
author | epoch <epoch@hacking.allowed.org> | 2013-08-23 03:24:54 +0000 |
---|---|---|
committer | epoch <epoch@hacking.allowed.org> | 2013-08-23 03:24:54 +0000 |
commit | 85e32860a7dd614f433018d3e0371ecf4a96543f (patch) | |
tree | a5ee373a61dd2c2c53a58eb28beb6dcfe5d52724 /contrib/whoisd/whoisd.pl | |
parent | d6ba6c25fc3a74188ffd674cc6215779bd02baaf (diff) | |
download | resdb-85e32860a7dd614f433018d3e0371ecf4a96543f.tar.gz resdb-85e32860a7dd614f433018d3e0371ecf4a96543f.zip |
Added a whoisd to make for easier querying of the resdb's info. Read the source.
Diffstat (limited to 'contrib/whoisd/whoisd.pl')
-rwxr-xr-x | contrib/whoisd/whoisd.pl | 99 |
1 files changed, 99 insertions, 0 deletions
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=<stdin>; +$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; +} |