Mercurial > hg > anonet-resdb
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(); |