comparison contrib/whoisd/whoisd.pl @ 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 1112129d9653
children 7ea11723da51
comparison
equal deleted inserted replaced
1185:97ed67f3a20d 1186:98707534e274
1 #!/usr/bin/perl 1 #!/usr/bin/perl
2 # coded by epoch. 2 # ncat -klp 43 -e ./whoisd.pl
3 # use inetd or tcpserver or something else. 3 # use inetd or tcpserver or ncat
4 # waste of time to do manual sockets for something like this.
5 # this isn't my baby. you can murder it if you want.
6 4
7 use strict; 5 use strict;
8 6
9 #maybe chroot this whoisd? 7 #maybe chroot this whoisd?
10 my $RESDB = "/services/resdb/resdb"; 8 my $RESDB = "/services/resdb/resdb";
21 my $title; 19 my $title;
22 my $value; 20 my $value;
23 my @value; 21 my @value;
24 my @parts; 22 my @parts;
25 my $i; 23 my $i;
24 my $d;
25
26 my $user;
26 27
27 if($QUERY eq "!!\n") { 28 if($QUERY eq "!!\n") {
28 $QUERY=<stdin>; 29 $QUERY=<stdin>;
29 $QUERY =~ s/^!r(.+?)[\/,].*$/\1/; 30 $QUERY =~ s/^!r(.+?)[\/,].*$/\1/;
30 printf "A500\n"; #fake this I guess. Does it even use that number for anything? 31 printf "A500\n"; #fake this I guess. Does it even use that number for anything?
31 printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n"; 32 printf "%% Looks like you're trying -A on a BSDian traceroute with this server.\n";
32 $HACK=1; 33 $HACK=1;
34 }
35
36 sub get_user_from_ASN {
37 my $AS=$_[0];
38 my $user;
39 chdir("$RESDB/db/as") || die "%% error";
40 if(chdir($AS) || die "%% error") {
41 open(FILE,"owner") || die "%% ASN not found.";
42 $user=<FILE>;
43 close(FILE);
44 } else {
45 printf "%% AS not found.";
46 }
47 return $user;
48 }
49
50 sub get_user_from_IPv4 {
51 my @parts;
52 my $user;
53 chdir("$RESDB/db/ip") || die "%% error";
54 @parts=split(/\./,$_[0]);
55 for($i=0;$i<scalar(@parts)-1;$i++) {
56 if(!chdir(sprintf("%02X",$parts[$i]))) {
57 printf "%-20s %s\n", "error" . ":", "IP not found." unless $HACK;
58 exit;
59 }
60 }
61 open(FILE,"owner") || die "%% IP not found.";
62 $user=<FILE>;
63 close(FILE);
64 return $user;
65 }
66
67 sub get_user_from_domain {
68 my @parts;
69 my $user;
70 my $i;
71 @parts=split(/\./,$_[0]);
72 chdir("$RESDB/db/dom") || die "%% error";
73 for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) {
74 if(!$parts[$i]) {
75 printf "%% error";
76 exit
77 }
78 if(!chdir($parts[$i])) {
79 printf "%-20s %s", "warning" . ":", "domain not found.";
80 exit;
81 }
82 }
83 open(FILE,"owner") || die "%% IP's owner not found.";
84 $user=<FILE>;
85 close(FILE);
86 return $user;
87 }
88
89 sub get_user_from_IPv6 {
90 chdir("$RESDB/db/ip6") || die "%% error. no resdb/db/ip6\n";
91 $d=$_[0];
92 print "$d";
93 $d =~ s/[^0-9a-f]//gi;
94 $d =~ tr/a-z/A-Z/;
95 foreach(split(//,$d)) {
96 $d=$_;
97 chdir($d);
98 }
99 open(FILE,"owner") || die "%% IP6's owner not found.";
100 $user=<FILE>;
101 close(FILE);
102 return $user;
33 } 103 }
34 104
35 sub ASN_lookup { 105 sub ASN_lookup {
36 if($QUERY =~ m/^AS(.+?)$/) { 106 if($QUERY =~ m/^AS(.+?)$/) {
37 printf "%% AS section for %s\n", $QUERY; 107 printf "%% AS section for %s\n", $QUERY;
52 printf "AS not found."; 122 printf "AS not found.";
53 } 123 }
54 } 124 }
55 } 125 }
56 126
57 ASN_lookup();
58 127
59 # IPv4 addresses 128 # IPv4 addresses
60 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]?)$/) { 129 sub IPv4_lookup {
61 printf "%% IP section for %s\n", $QUERY unless $HACK; 130 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]?)$/) {
62 chdir("$RESDB/db/ip") || die "%% error"; 131 printf "%% IP section for %s\n", $QUERY unless $HACK;
63 @parts=split(/\./,$QUERY); 132 chdir("$RESDB/db/ip") || die "%% error";
64 for($i=0;$i<scalar(@parts)-1;$i++) { 133 @parts=split(/\./,$QUERY);
65 if(!chdir(sprintf("%02X",$parts[$i]))) { 134 for($i=0;$i<scalar(@parts)-1;$i++) {
66 printf "%-20s %s\n", "error" . ":", "IP not found." unless $HACK; 135 if(!chdir(sprintf("%02X",$parts[$i]))) {
67 exit; 136 printf "%-20s %s\n", "error" . ":", "IP not found." unless $HACK;
68 } 137 exit;
69 } 138 }
70 foreach(split(/\n/,`grep '' -r .`)) { 139 }
71 $out = $_; 140 foreach(split(/\n/,`grep '' -r .`)) {
72 $out =~ s/^\.\///g; 141 $out = $_;
73 ($title, @value) = split(/:/,$out); 142 $out =~ s/^\.\///g;
74 $value=join(":",@value); 143 ($title, @value) = split(/:/,$out);
75 printf "%-20s %s\n", $title . ":", $value unless $HACK; 144 $value=join(":",@value);
76 if($title eq "owner") { 145 printf "%-20s %s\n", $title . ":", $value unless $HACK;
77 $QUERY = $value; 146 if($title eq "owner") {
78 } 147 $QUERY = $value ;
79 } 148 }
80 } 149 }
150 }
151 }
152
81 153
82 # if we get here and there's still a . in the query it is probably a domain. 154 # if we get here and there's still a . in the query it is probably a domain.
83 if($QUERY =~ m/\./) { 155 sub domain_lookup {
84 printf "%% domain section for %s\n", $QUERY; 156 if($QUERY =~ m/\./) {
85 @parts=split(/\./,$QUERY); 157 printf "%% domain section for %s\n", $QUERY;
86 chdir("$RESDB/db/dom") || die "%% error"; 158 @parts=split(/\./,$QUERY);
87 for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) { 159 chdir("$RESDB/db/dom") || die "%% error";
88 if(!$parts[$i]) { 160 for($i=scalar(@parts)-1;$i>scalar(@parts)-3;$i--) {
89 printf "%% error"; 161 if(!$parts[$i]) {
90 exit 162 printf "%% error";
91 } 163 exit
92 if(!chdir($parts[$i])) { 164 }
93 printf "%-20s %s", "warning" . ":", "domain not found."; 165 if(!chdir($parts[$i])) {
94 exit; 166 printf "%-20s %s", "warning" . ":", "domain not found.";
95 } 167 exit;
96 } 168 }
97 foreach(split(/\n/,`grep '' -r .`)) { 169 }
98 $out = $_; 170 foreach(split(/\n/,`grep '' -r .`)) {
99 $out =~ s/^\.\///g; 171 $out = $_;
100 $out =~ m/^(.+?):(.+?)$/; 172 $out =~ s/^\.\///g;
101 ($title, $value) = ($1, $2); 173 $out =~ m/^(.+?):(.+?)$/;
102 printf "%-20s %s\n", $title . ":", $value; 174 ($title, $value) = ($1, $2);
103 if($title eq "owner") { 175 printf "%-20s %s\n", $title . ":", $value;
104 $QUERY = $value; 176 if($title eq "owner") {
105 } 177 $QUERY = $value;
106 } 178 }
107 } 179 }
108 180 }
109 #ipv6 addresses 181 }
110 #if($QUERY =~ m/:/) {#close enough? 182
111 # $QUERY =~ s/://g; 183
112 # $QUERY =~ s/[^a-fA-F0-9]//g; 184 #IPv6 addresses
113 # $QUERY = uc($QUERY); 185 sub IPv6_lookup {
114 # chdir("$RESDB/db/ip6"); 186 if($QUERY =~ m/:/) {#close enough?
115 # foreach(split(//,$QUERY)) { 187 $QUERY =~ s/://g;
116 # chdir($_);; 188 $QUERY =~ s/[^a-fA-F0-9]//g;
117 # } 189 $QUERY = uc($QUERY);
118 # foreach(split(/\n/,`grep '' -r .`)) { 190 chdir("$RESDB/db/ip6");
119 # $out = $_; 191 foreach(split(//,$QUERY)) {
120 # $out =~ s/^\.\///g; 192 chdir($_);;
121 # $out =~ m/^(.+?):(.+?)$/; 193 }
122 # ($title, $value) = ($1, $2); 194 foreach(split(/\n/,`grep '' -r .`)) {
123 # printf "%-20s %s\n", $title . ":", $value; 195 $out = $_;
124 # if($title eq "owner") { 196 $out =~ s/^\.\///g;
125 # $QUERY = $value; 197 $out =~ m/^(.+?):(.+?)$/;
126 # } 198 ($title, $value) = ($1, $2);
127 # } 199 printf "%-20s %s\n", $title . ":", $value;
128 #} 200 if($title eq "owner") {
129 201 $QUERY = $value;
202 }
203 }
204 }
205 }
130 206
131 # default to assuming it is a name. 207 # default to assuming it is a name.
208 sub user_lookup {
132 printf "%% user section for '%s'\n", $QUERY unless $HACK; 209 printf "%% user section for '%s'\n", $QUERY unless $HACK;
133 210
134 chdir("$RESDB/db/usr") || die "%% error"; 211 chdir("$RESDB/db/usr") || die "%% error";
135 if(chdir($QUERY)) { 212 if(chdir($QUERY)) {
136 foreach(split(/\n/,`grep '' -r .`)) { 213 foreach(split(/\n/,`grep '' -r .`)) {
171 foreach(@asn) { 248 foreach(@asn) {
172 $QUERY="AS$_"; #meh. fix to pass it instead of global. 249 $QUERY="AS$_"; #meh. fix to pass it instead of global.
173 ASN_lookup(); 250 ASN_lookup();
174 } 251 }
175 #printf "%-20s %s\n", "notice:","$QUERY did not claim any domains yet"; 252 #printf "%-20s %s\n", "notice:","$QUERY did not claim any domains yet";
253 }
254
255 if($QUERY =~ m/^AS(.+?)$/) {
256 $user=get_user_from_ASN($1);
257 }
258 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]?)$/) {
259 $user=get_user_from_IPv4($QUERY);
260 }
261 elsif($QUERY =~ m/\./) {
262 $user=get_user_from_domain($QUERY);
263 }
264 elsif($QUERY =~ m/:/) {
265 $user=get_user_from_IPv6($QUERY);
266 }
267 else {
268 $user=$QUERY;
269 }
270 $user =~ s/[\r\n]//g;
271 printf "%%%% found user: %s for the query.\n", $user;
272
273 #k. we got user... now to find stuff belonging to that user.
274
275 #ASN_lookup($user);
276 #IPv4_lookup($user);
277 #domain_lookup($user);
278 #IPv6_lookup($user);
279 user_lookup();