]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/iwhois
/lib/rob: Just write the code.
[plan9front.git] / rc / bin / iwhois
1 #!/bin/rc
2 # iwhois [-n] domain - print registration data for domain
3 rfork e
4 if (~ $#* 1 && ~ $1 -n)
5         noboiler=yes
6 person=`{echo $1|sed s/@.*//}
7 fn boilerplate { sed -n '/^[     ]*[A-Za-z][A-Za-z]*:$/,$p' $* }
8
9 switch($1){
10 case *@*
11         machine=`{echo $1|sed s/.*@//}
12 case *.ca
13         machine=whois.cira.ca
14         fn boilerplate { grep -v ':[     ]*$' $* }
15 case *.us
16         machine=whois.nic.us
17         fn boilerplate { sed '/^>* Whois database was last updated on/,$d' $* }
18 case *.co.uk *.net.uk *.org.uk
19         machine=whois.nic.uk
20         fn boilerplate { sed '/^ +WHOIS database last updated at/,$d' $* }
21 case *.ac.uk
22         machine=whois.ja.net
23 case *.au
24         machine=whois.aunic.net
25         fn boilerplate { grep -v ':[     ]*$' $* }
26 case *.be
27         machine=whois.dns.be
28         person='-T dn '^$person
29         fn boilerplate { cat $* }
30 case *.cn
31         machine=whois.cnnic.net.cn
32         fn boilerplate { cat $* }
33 case *.de
34         machine=whois.denic.de
35         person='-T dn '^$person
36         fn boilerplate { cat $* }
37 case *.dk
38         machine=whois.dk-hostmaster.dk
39         fn boilerplate { grep -v '^#' $* }
40 case *.es
41         echo no known whois server for .es
42         exit
43 case *.fr
44         machine=whois.nic.fr
45         fn boilerplate { grep -v '^%%' $* }
46 case *.in
47         machine=whois.inregistry.net
48         fn boilerplate { cat $* }
49 case *.jp
50         machine=whois.jprs.jp
51         person=$person^'/e'
52         fn boilerplate { cat $* }
53 case *.se
54         machine=whois.nic-se.se
55         fn boilerplate { grep -v '^#' $* | uniq }
56 case [0-9]*.[0-9]*.[0-9]*.[0-9]*
57         machine=whois.arin.net
58         fn boilerplate { cat $* }
59 case *
60         machine=whois.internic.net      # alternate: whois.networksolutions.com
61         fn boilerplate { cat $* }
62 }
63 if (~ $noboiler yes)
64         fn boilerplate { cat $* }
65 file=/tmp/iwhois$pid
66 fn sigexit {
67         rm -f $file
68 }
69 echo $person | telnet -nr tcp!$machine!whois > $file
70 x=`{ sed -n -e 's/.*Whois Server: (.*)/\1/p' \
71         -e 's;.*ReferralServer: whois://(.*)(:43)?;\1;p' $file }
72 switch($#x){
73 case 0
74         ;                       # e.g., for .ca
75 case 1
76         # chase the referral chain
77         echo $person | telnet -nr tcp!$x!whois > $file
78 case *
79 #       echo $0: buggery: `{echo $x | tr ' ' '\12' | sort -u} >[1=2]
80         echo $person | telnet -nr tcp!^$x(1)^!whois > $file
81 }
82 if (test ! -s $file) {
83         echo $0: broken whois server tcp!$x!whois returned no data >[1=2]
84         exit broken
85 }
86 boilerplate $file
87 rm $file