changeset 1186:98707534e274 draft

added a chan domain. changed some marc stuff. anocheck script for watching for ASN downages.
author epoch <epoch@hacking.allowed.ano>
date Wed, 01 Jun 2016 22:24:29 +0000
parents 97ed67f3a20d
children 7ea11723da51
files contrib/anocheck/hand-check.sh contrib/anocheck/test.sh contrib/marc/README contrib/marc/marc.c contrib/marc/marc.db contrib/marc/marcdb contrib/marc/pull.sh contrib/whoisd/whoisd.pl db/as/3232/owner db/dom/ano/ch/ns/ns1.ch.ano db/dom/ano/ch/ns/ns2.ch.ano db/dom/ano/ch/owner db/dom/ano/epoch/ns/ns.epoch.ano db/dom/ano/whois/ns/ns.whois.ano db/ip/01/20/20/cidr db/ip/01/20/20/ns/ns1.rjeli.ano db/ip/01/20/20/owner db/usr/epoch/pgp
diffstat 18 files changed, 195 insertions(+), 80 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/anocheck/hand-check.sh	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,4 @@
+#!/bin/sh
+/usr/local/libexec/bgp-paths.sh 4141 AN_out | tr ' ' '\n' | sort | uniq > /var/cache/anocheck/ASN.$(date +%s)
+ls -rt /var/cache/anocheck/ASN.* | tail -r | tail -n+3 | xargs rm
+ls -rt /var/cache/anocheck/ASN.* | tail -n2 | xargs diff -s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/anocheck/test.sh	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,7 @@
+#!/bin/sh
+mkdir -p /var/cache/anocheck
+/usr/local/libexec/bgp-paths.sh 4141 AN_out | tr ' ' '\n' | sort | uniq > /var/cache/anocheck/ASN.$(date +%s)
+ls -rt /var/cache/anocheck/ASN.* | tail -r | tail -n+3 | xargs rm
+ls -rt /var/cache/anocheck/ASN.* | tail -n2 | xargs diff
+#this is nifty for hand-checks
+#ls -rt /var/cache/anocheck/ASN.* | tail -n2 | xargs diff -s
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/marc/README	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+make marc
--- a/contrib/marc/marc.c	Tue Feb 09 03:03:12 2016 +0000
+++ b/contrib/marc/marc.c	Wed Jun 01 22:24:29 2016 +0000
@@ -60,8 +60,14 @@
    printf("list:\n");
    indent++;
    while(from_index < length) {
+
+// old code. testing 16 bit lengths.
     cur_len=data[from_index+3]+(data[from_index+2]<<1)+(data[from_index+1]<<2)+(data[from_index+0]<<3);
     from_index+=4;
+
+//    cur_len=data[from_index+1]+(data[from_index+0]<<1);
+//    from_index+=2;
+ 
     marc_decode(data,from_index,cur_len);
     from_index+=cur_len;
    }
@@ -153,6 +159,8 @@
   for(i=0;i<num_extensions;i++) {
    ext_type=data[from_index];
    from_index++;
+//  is this right?
+//   ext_data_len=(data[from_index+1]) + (data[from_index+0]<<8);
    ext_data_len=(data[from_index]<<8) + (data[from_index+1]);
    from_index+=2;
    from_index+=ext_data_len;//skip this for now... fuck it.
Binary file contrib/marc/marc.db has changed
Binary file contrib/marc/marcdb has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/marc/pull.sh	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+wget 'http://marc.ucis.ano/?get=0&version=3' -O marc.db
--- a/contrib/whoisd/whoisd.pl	Tue Feb 09 03:03:12 2016 +0000
+++ b/contrib/whoisd/whoisd.pl	Wed Jun 01 22:24:29 2016 +0000
@@ -1,8 +1,6 @@
 #!/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.
+# ncat -klp 43 -e ./whoisd.pl
+# use inetd or tcpserver or ncat
 
 use strict;
 
@@ -23,6 +21,9 @@
 my @value;
 my @parts;
 my $i;
+my $d;
+
+my $user;
 
 if($QUERY eq "!!\n") {
  $QUERY=<stdin>;
@@ -32,6 +33,75 @@
  $HACK=1;
 }
 
+sub get_user_from_ASN {
+ my $AS=$_[0];
+ my $user;
+ chdir("$RESDB/db/as") || die "%% error";
+ if(chdir($AS) || die "%% error") {
+  open(FILE,"owner") || die "%% ASN not found.";
+  $user=<FILE>;
+  close(FILE);
+ } else {
+  printf "%% AS not found.";
+ }
+ return $user;
+}
+
+sub get_user_from_IPv4 {
+ my @parts;
+ my $user;
+ chdir("$RESDB/db/ip") || die "%% error";
+ @parts=split(/\./,$_[0]);
+ 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;
+  }
+ }
+ open(FILE,"owner") || die "%% IP not found."; 
+ $user=<FILE>;
+ close(FILE);
+ return $user;
+}
+
+sub get_user_from_domain {
+ my @parts;
+ my $user;
+ my $i;
+ @parts=split(/\./,$_[0]);
+ 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;
+  }
+ }
+ open(FILE,"owner") || die "%% IP's owner not found."; 
+ $user=<FILE>;
+ close(FILE);
+ return $user;
+}
+
+sub get_user_from_IPv6 {
+ chdir("$RESDB/db/ip6") || die "%% error. no resdb/db/ip6\n";
+ $d=$_[0];
+ print "$d";
+ $d =~ s/[^0-9a-f]//gi;
+ $d =~ tr/a-z/A-Z/;
+ foreach(split(//,$d)) {
+  $d=$_;
+  chdir($d);
+ }
+ open(FILE,"owner") || die "%% IP6's owner not found."; 
+ $user=<FILE>;
+ close(FILE);
+ return $user;
+}
+
 sub ASN_lookup {
  if($QUERY =~ m/^AS(.+?)$/) {
   printf "%% AS section for %s\n", $QUERY;
@@ -54,81 +124,88 @@
  }
 }
 
-ASN_lookup();
 
 # 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;
+sub IPv4_lookup {
+ 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);
-  $value=join(":",@value);
-  printf "%-20s %s\n", $title . ":", $value unless $HACK;
-  if($title eq "owner") {
-   $QUERY = $value;
+  foreach(split(/\n/,`grep '' -r .`)) {
+   $out = $_;
+   $out =~ s/^\.\///g;
+   ($title, @value) = split(/:/,$out);
+   $value=join(":",@value);
+   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
+sub domain_lookup {
+ 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;
+   }
   }
-  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;
+  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;
+   }
   }
  }
 }
 
-#ipv6 addresses
-#if($QUERY =~ m/:/) {#close enough?
-# $QUERY =~ s/://g;
-# $QUERY =~ s/[^a-fA-F0-9]//g;
-# $QUERY = uc($QUERY);
-# chdir("$RESDB/db/ip6");
-# foreach(split(//,$QUERY)) {
-#  chdir($_);;
-# }
-# 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;
-#  }
-# } 
-#}
 
+#IPv6 addresses
+sub IPv6_lookup {
+ if($QUERY =~ m/:/) {#close enough?
+  $QUERY =~ s/://g;
+  $QUERY =~ s/[^a-fA-F0-9]//g;
+  $QUERY = uc($QUERY);
+  chdir("$RESDB/db/ip6");
+  foreach(split(//,$QUERY)) {
+   chdir($_);;
+  }
+  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.
+sub user_lookup {
  printf "%% user section for '%s'\n", $QUERY unless $HACK;
 
  chdir("$RESDB/db/usr") || die "%% error";
@@ -173,3 +250,30 @@
   ASN_lookup();
  }
  #printf "%-20s %s\n", "notice:","$QUERY did not claim any domains yet";
+}
+
+if($QUERY =~ m/^AS(.+?)$/) {
+ $user=get_user_from_ASN($1);
+}
+elsif($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]?)$/) {
+ $user=get_user_from_IPv4($QUERY);
+}
+elsif($QUERY =~ m/\./) {
+ $user=get_user_from_domain($QUERY);
+}
+elsif($QUERY =~ m/:/) {
+ $user=get_user_from_IPv6($QUERY);
+}
+else {
+ $user=$QUERY;
+}
+$user =~ s/[\r\n]//g;
+printf "%%%% found user: %s for the query.\n", $user;
+
+#k. we got user... now to find stuff belonging to that user.
+
+#ASN_lookup($user);
+#IPv4_lookup($user);
+#domain_lookup($user);
+#IPv6_lookup($user);
+user_lookup();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/as/3232/owner	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+rjeli
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dom/ano/ch/ns/ns1.ch.ano	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+1.41.41.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dom/ano/ch/ns/ns2.ch.ano	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+fd63:1e39:6f73:2929::1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dom/ano/ch/owner	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+epoch
--- a/db/dom/ano/epoch/ns/ns.epoch.ano	Tue Feb 09 03:03:12 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-1.41.41.1
--- a/db/dom/ano/whois/ns/ns.whois.ano	Tue Feb 09 03:03:12 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-1.41.41.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/ip/01/20/20/cidr	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+1.32.32.0/24
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/ip/01/20/20/ns/ns1.rjeli.ano	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+1.32.32.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/ip/01/20/20/owner	Wed Jun 01 22:24:29 2016 +0000
@@ -0,0 +1,1 @@
+rjeli
--- a/db/usr/epoch/pgp	Tue Feb 09 03:03:12 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-Type Bits/KeyID    Date       User ID
-pub  1024/55C8CE2D 2014/10/14 epoch <epoch@hacking.allowed.org>
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: 2.6.3ia
-
-mQCNA1Q8ipIAAAEEALbXggiUagqYBmFVgJwBdEvTcGwe7xevHc4SAYHnTg/5SwlT
-WlHqXY+RB64aPBnun4Q2AUgX8jTJX7TSrN4yNRyiwLCf4ViiHIJmmiPuom7qOw2E
-ix0pkj4wqglg2QIV5mAYsM9Z7g+zBQKjiF3ynS+R09WQ3IyM6k/37rtVyM4tAAUR
-tCFlcG9jaCA8ZXBvY2hAaGFja2luZy5hbGxvd2VkLm9yZz6JAJUDBRBUPIqST/fu
-u1XIzi0BARdGBACeESKUtfeLeDY+vKeKuJhqP5vUGydYeXTDQ6aRoE0U8IOtjemo
-+7ZTV/WlxD3rM7AzSBoSuV2HvVb3L3pzeUrBcDCnmQ2svzGjRaMLX9QLqeojaNXb
-fGQp4hFblNzycPIqM8F14es+DCIYBtPzrz1SrodXuxmox6cBWuHfDC494g==
-=9EHH
------END PGP PUBLIC KEY BLOCK-----