mirror of
https://github.com/rfc1036/whois.git
synced 2026-05-03 06:51:09 +00:00
Imported Debian version 4.4.1
This commit is contained in:
parent
bc68e8c4a6
commit
6d3af40a95
24
Makefile
24
Makefile
@ -1,24 +1,38 @@
|
|||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
OPTS=-O2
|
OPTS=-O2
|
||||||
|
|
||||||
|
# Solaris
|
||||||
|
#LDFLAGS=-lnsl -lsocket
|
||||||
|
|
||||||
all: whois #pos
|
all: whois #pos
|
||||||
|
|
||||||
whois: whois.c whois.h config.h data.h ip_del.h tld_serv.h
|
whois: whois.c whois.h config.h data.h as_del.h ip_del.h tld_serv.h
|
||||||
$(CC) $(OPTS) whois.c -o whois
|
$(CC) $(OPTS) whois.c -o whois $(LDFLAGS)
|
||||||
|
|
||||||
mkpasswd:
|
mkpasswd:
|
||||||
$(CC) $(OPTS) mkpasswd.c -o mkpasswd -lcrypt
|
$(CC) $(OPTS) mkpasswd.c -o mkpasswd -lcrypt
|
||||||
|
|
||||||
|
as_del.h: as_del_list make_as_del.pl
|
||||||
|
perl make_as_del.pl < as_del_list > as_del.h
|
||||||
|
|
||||||
ip_del.h: ip_del_list make_ip_del.pl
|
ip_del.h: ip_del_list make_ip_del.pl
|
||||||
./make_ip_del.pl < ip_del_list > ip_del.h
|
perl make_ip_del.pl < ip_del_list > ip_del.h
|
||||||
|
|
||||||
tld_serv.h: tld_serv_list make_tld_serv.pl
|
tld_serv.h: tld_serv_list make_tld_serv.pl
|
||||||
./make_tld_serv.pl < tld_serv_list > tld_serv.h
|
perl make_tld_serv.pl < tld_serv_list > tld_serv.h
|
||||||
|
|
||||||
|
install: whois
|
||||||
|
install --strip -m 0755 whois $(BASEDIR)$(prefix)/bin/
|
||||||
|
install --strip -m 0644 whois.1 $(BASEDIR)$(prefix)/man/man1/
|
||||||
|
cd po && $(MAKE) $@
|
||||||
|
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f po/whois.pot
|
rm -f po/whois.pot
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f tld_serv.h ip_del.h whois mkpasswd
|
rm -f as_del.h ip_del.h tld_serv.h whois mkpasswd
|
||||||
rm -f po/*.mo
|
rm -f po/*.mo
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
|||||||
4
README
4
README
@ -24,8 +24,10 @@ Other information sources:
|
|||||||
- RIPE-187 and RIPE-189 (from ftp://ftp.ripe.net/ripe/docs/ or
|
- RIPE-187 and RIPE-189 (from ftp://ftp.ripe.net/ripe/docs/ or
|
||||||
http://www.ripe.net/docs/)
|
http://www.ripe.net/docs/)
|
||||||
- Greg Woods' awhois script (from ftp.weird.com)
|
- Greg Woods' awhois script (from ftp.weird.com)
|
||||||
|
- the www.geektools.org CGI proxy
|
||||||
- home of the 6bone client: http://www.ip.qwest.net/~david/software/
|
- home of the 6bone client: http://www.ip.qwest.net/~david/software/
|
||||||
|
- http://www.apnic.net/db/RIRs.html and
|
||||||
|
http://www.apnic.net/maps/tld-list.html
|
||||||
|
|
||||||
Marco d'Itri
|
Marco d'Itri
|
||||||
<md@linux.it>
|
<md@linux.it>
|
||||||
|
|||||||
2
TODO
2
TODO
@ -3,3 +3,5 @@ Still to sort:
|
|||||||
|
|
||||||
Is MNT-* a standard of some registry?
|
Is MNT-* a standard of some registry?
|
||||||
|
|
||||||
|
What about rwhois?
|
||||||
|
|
||||||
|
|||||||
15
as_del_list
Normal file
15
as_del_list
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
1877 1901 ripe
|
||||||
|
2043 2043 ripe
|
||||||
|
2047 2047 ripe
|
||||||
|
2107 2136 ripe
|
||||||
|
2585 2614 ripe
|
||||||
|
2773 2822 ripe
|
||||||
|
2830 2879 ripe
|
||||||
|
3154 3353 ripe
|
||||||
|
4608 4863 apnic
|
||||||
|
5377 5631 ripe
|
||||||
|
6656 6911 ripe
|
||||||
|
7467 7722 apnic
|
||||||
|
8192 9215 ripe
|
||||||
|
9261 10239 apnic
|
||||||
|
12288 13311 ripe
|
||||||
7
config.h
7
config.h
@ -6,6 +6,9 @@
|
|||||||
/* Suppress lame Internic disclaimer */
|
/* Suppress lame Internic disclaimer */
|
||||||
#define HIDE_DISCL
|
#define HIDE_DISCL
|
||||||
|
|
||||||
/* program version */
|
/* Program version */
|
||||||
#define VERSION "4.3"
|
#define VERSION "4.4.1"
|
||||||
|
|
||||||
|
/* String sent to RIPE servers - ONLY FIVE CHARACTERS! */
|
||||||
|
#define IDSTRING "Md4.4"
|
||||||
|
|
||||||
|
|||||||
50
data.h
50
data.h
@ -1,18 +1,37 @@
|
|||||||
const char *ripeflags="acFLmMrRS";
|
/*
|
||||||
const char *ripeflagsp="gisTtv";
|
* RIPE-like servers.
|
||||||
|
* All of them do not understand -V2.0Md with the exception of RA and RIPN.
|
||||||
|
* 6bone-like servers will accept the flag with a warning (the flag must
|
||||||
|
* match /^V [a-zA-Z]{1,4}\d+[\d\.]{0,5}$/).
|
||||||
|
*/
|
||||||
const char *ripe_servers[] = {
|
const char *ripe_servers[] = {
|
||||||
|
/* will accept the new syntax (-V wp3.0) */
|
||||||
"whois.ripe.net",
|
"whois.ripe.net",
|
||||||
"whois.ra.net",
|
|
||||||
"whois.apnic.net",
|
"whois.apnic.net",
|
||||||
"whois.mci.net",
|
"whois.6bone.net", /* 3.0.0b1 */
|
||||||
"whois.isi.edu",
|
"whois.aunic.net",
|
||||||
|
"whois.connect.com.au", /* 3.0.0b1 */
|
||||||
|
"whois.nic.fr",
|
||||||
|
"whois.nic.net.sg",
|
||||||
|
"whois.metu.edu.tr",
|
||||||
|
/* end of servers accepting new syntax */
|
||||||
"whois.nic.it",
|
"whois.nic.it",
|
||||||
"whois.6bone.net",
|
|
||||||
"whois.ans.net",
|
"whois.ans.net",
|
||||||
|
"whois.ra.net",
|
||||||
|
"whois.ripn.net",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
const char *rwhois_servers[] = {
|
||||||
|
"whois.isi.edu", /* V-1.0B9.2 */
|
||||||
|
"rwhois.rcp.net.pe", /* V-1.5.3 */
|
||||||
|
"ns.twnic.net", /* V-1.0B9 */
|
||||||
|
"dragon.seed.net.tw", /* V-1.0B9.2 */
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
const char *gtlds[] = {
|
const char *gtlds[] = {
|
||||||
".com",
|
".com",
|
||||||
".net",
|
".net",
|
||||||
@ -29,9 +48,9 @@ const char *arin_nets[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ip_del {
|
struct ip_del {
|
||||||
unsigned long int net;
|
unsigned long net;
|
||||||
unsigned long int mask;
|
unsigned long mask;
|
||||||
const char *serv;
|
const char *serv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ip_del ip_assign[] = {
|
struct ip_del ip_assign[] = {
|
||||||
@ -39,6 +58,17 @@ struct ip_del ip_assign[] = {
|
|||||||
{ 0, 0, NULL }
|
{ 0, 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct as_del {
|
||||||
|
unsigned short first;
|
||||||
|
unsigned short last;
|
||||||
|
const char *serv;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct as_del as_assign[] = {
|
||||||
|
#include "as_del.h"
|
||||||
|
{ 0, 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
const char *tld_serv[] = {
|
const char *tld_serv[] = {
|
||||||
#include "tld_serv.h"
|
#include "tld_serv.h"
|
||||||
NULL, NULL
|
NULL, NULL
|
||||||
|
|||||||
29
debian/changelog
vendored
29
debian/changelog
vendored
@ -1,3 +1,32 @@
|
|||||||
|
whois (4.4.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* A space is added after "AS" when querying ARIN.
|
||||||
|
* Converted some strcmp to strcasecmp.
|
||||||
|
|
||||||
|
-- Marco d'Itri <md@linux.it> Mon, 15 Nov 1999 00:59:07 +0100
|
||||||
|
|
||||||
|
whois (4.4.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* Now the program automatically select the right server for AS queries.
|
||||||
|
* Added RIPE delegations of netblocks in the B class space.
|
||||||
|
* Extensive survey of all known whois servers and update of tld_serv_list.
|
||||||
|
* Now the flag -VMd4.4 is sent to RIPE-like servers.
|
||||||
|
* Written a test program for checking if all servers work.
|
||||||
|
|
||||||
|
-- Marco d'Itri <md@linux.it> Tue, 9 Nov 1999 22:53:35 +0100
|
||||||
|
|
||||||
|
whois (4.3.3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fixed man page (closes: #49195).
|
||||||
|
|
||||||
|
-- Marco d'Itri <md@linux.it> Sun, 7 Nov 1999 14:07:59 +0100
|
||||||
|
|
||||||
|
whois (4.3.2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fixed version reporting code. Now the string is "-VMd2.0".
|
||||||
|
|
||||||
|
-- Marco d'Itri <md@linux.it> Tue, 2 Nov 1999 19:50:33 +0100
|
||||||
|
|
||||||
whois (4.3.1) unstable; urgency=low
|
whois (4.3.1) unstable; urgency=low
|
||||||
|
|
||||||
* CRSNIC code parsed the wrong field (closes: #48590).
|
* CRSNIC code parsed the wrong field (closes: #48590).
|
||||||
|
|||||||
57
ip_del_list
57
ip_del_list
@ -3,38 +3,65 @@
|
|||||||
61.0.0.0/8 apnic
|
61.0.0.0/8 apnic
|
||||||
62.0.0.0/8 ripe
|
62.0.0.0/8 ripe
|
||||||
0.0.0.0/2 arin # all other A classes are managed by ARIN
|
0.0.0.0/2 arin # all other A classes are managed by ARIN
|
||||||
## The B class space is a mess :-(
|
## The B class space is a mess :-( - something could be still missing
|
||||||
#? 139. 20-29
|
139.20.0.0/14 ripe
|
||||||
145.224.0.0/12 ripe
|
139.24.0.0/14 ripe
|
||||||
|
139.28.0.0/15 ripe
|
||||||
141.0.0.0/10 ripe
|
141.0.0.0/10 ripe
|
||||||
141.64.0.0/11 ripe # unsure
|
141.64.0.0/12 ripe
|
||||||
149.192.0.0/10 ripe # unsure
|
141.80.0.0/14 ripe
|
||||||
#? 149. 202-251
|
141.84.0.0/15 ripe
|
||||||
|
145.224.0.0/12 ripe
|
||||||
|
145.240.0.0/13 ripe
|
||||||
|
145.248.0.0/14 ripe
|
||||||
|
145.252.0.0/15 ripe
|
||||||
|
145.254.0.0/16 ripe
|
||||||
|
149.202.0.0/15 ripe
|
||||||
|
149.204.0.0/16 ripe
|
||||||
|
149.206.0.0/15 ripe
|
||||||
|
149.208.0.0/12 ripe
|
||||||
|
149.224.0.0/12 ripe
|
||||||
|
149.240.0.0/13 ripe
|
||||||
|
149.248.0.0/14 ripe
|
||||||
150.254.0.0/16 ripe
|
150.254.0.0/16 ripe
|
||||||
151.0.0.0/8 ripe
|
151.13.0.0/16 ripe
|
||||||
|
151.14.0.0/15 ripe
|
||||||
|
151.16.0.0/12 ripe
|
||||||
|
151.32.0.0/11 ripe
|
||||||
|
151.64.0.0/12 ripe
|
||||||
|
151.80.0.0/15 ripe
|
||||||
|
151.3.0.0/16 ripe
|
||||||
|
151.4.0.0/15 ripe
|
||||||
|
151.82.0.0/16 ripe
|
||||||
|
151.91.0.0/16 ripe
|
||||||
|
151.92.0.0/15 ripe
|
||||||
|
151.95.0.0/16 ripe
|
||||||
160.216.0.0/14 ripe
|
160.216.0.0/14 ripe
|
||||||
160.220.0.0/8 ripe
|
160.220.0.0/16 ripe
|
||||||
163.128.0.0/12 ripe
|
160.44.0.0/14 ripe
|
||||||
|
160.48.0.0/12 ripe
|
||||||
|
163.156.0.0/14 ripe
|
||||||
|
163.160.0.0/12 ripe
|
||||||
|
164.0.0.0/11 ripe
|
||||||
|
164.32.0.0/13 ripe
|
||||||
164.40.0.0/16 ripe
|
164.40.0.0/16 ripe
|
||||||
164.0.0.0/6 ripe
|
164.128.0.0/12 ripe
|
||||||
169.208.0.0/12 apnic
|
169.208.0.0/12 apnic
|
||||||
171.16.0.0/12 ripe
|
171.16.0.0/12 ripe
|
||||||
|
171.32.0.0/15 ripe
|
||||||
## The C class space is cleanly delegated and the data here should be complete
|
## The C class space is cleanly delegated and the data here should be complete
|
||||||
192.71.0.0/16 ripe
|
192.71.0.0/16 ripe
|
||||||
192.72.1.1/24 arin
|
|
||||||
192.72.1.2/24 arin
|
|
||||||
192.72.1.253/24 arin
|
|
||||||
192.72.1.254/24 arin
|
|
||||||
192.72.0.0/16 whois.seed.net.tw # NETBLK-SEED-NETS
|
192.72.0.0/16 whois.seed.net.tw # NETBLK-SEED-NETS
|
||||||
192.106.144.0/20 ripe
|
192.106.144.0/20 ripe
|
||||||
|
192.106.196.0/23 ripe
|
||||||
192.162.0.0/16 ripe
|
192.162.0.0/16 ripe
|
||||||
192.164.0.0/14 ripe
|
192.164.0.0/14 ripe
|
||||||
192.0.0.0/8 arin # the swamp
|
192.0.0.0/8 arin # the swamp
|
||||||
193.0.0.0/8 ripe
|
193.0.0.0/8 ripe
|
||||||
194.0.0.0/7 ripe
|
194.0.0.0/7 ripe
|
||||||
|
198.17.117.0/24 ripe
|
||||||
196.0.0.0/6 arin
|
196.0.0.0/6 arin
|
||||||
200.0.0.0/7 arin
|
200.0.0.0/7 arin
|
||||||
203.0.0.0/10 aunic
|
|
||||||
202.0.0.0/7 apnic
|
202.0.0.0/7 apnic
|
||||||
204.0.0.0/6 arin
|
204.0.0.0/6 arin
|
||||||
208.0.0.0/7 arin
|
208.0.0.0/7 arin
|
||||||
|
|||||||
20
make_as_del.pl
Executable file
20
make_as_del.pl
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
while (<>) {
|
||||||
|
chomp;
|
||||||
|
s/^\s*(.*)\s*$/$1/;
|
||||||
|
s/\s*#.*$//;
|
||||||
|
next if /^$/;
|
||||||
|
die "format error: $_" unless (/^([\d\.]+)\s+([\d\.]+)\s+([\w\.]+)$/);
|
||||||
|
my $f=$1; my $l=$2; my $s=$3;
|
||||||
|
print "{ ${f}, ${l}, \"";
|
||||||
|
if ($s =~ /\./) {
|
||||||
|
print "$s";
|
||||||
|
} else {
|
||||||
|
print "whois.$s.net";
|
||||||
|
}
|
||||||
|
print "\" },\n";
|
||||||
|
}
|
||||||
|
|
||||||
@ -7,7 +7,7 @@ while (<>) {
|
|||||||
s/^\s*(.*)\s*$/$1/;
|
s/^\s*(.*)\s*$/$1/;
|
||||||
s/\s*#.*$//;
|
s/\s*#.*$//;
|
||||||
next if /^$/;
|
next if /^$/;
|
||||||
die "format error: $_" unless (/^([\w\d\.-]+)\s+([\w\d\.-]+)$/);
|
die "format error: $_" unless (/^([\w\d\.-]+)\s+([\w\d\.:-]+)$/);
|
||||||
print " \"$1\",\t\"$2\",\n";
|
print " \"$1\",\t\"$2\",\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
42
po/it.po
42
po/it.po
@ -4,8 +4,8 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: whois 3.0\n"
|
"Project-Id-Version: whois 4.4.0\n"
|
||||||
"POT-Creation-Date: 1999-10-26 12:19+0200\n"
|
"POT-Creation-Date: 1999-11-09 22:15+0100\n"
|
||||||
"PO-Revision-Date: 1999-10-26 12:19+02:00\n"
|
"PO-Revision-Date: 1999-10-26 12:19+02:00\n"
|
||||||
"Last-Translator: Marco d'Itri <md@linux.it>\n"
|
"Last-Translator: Marco d'Itri <md@linux.it>\n"
|
||||||
"Language-Team: Italian <it@li.org>\n"
|
"Language-Team: Italian <it@li.org>\n"
|
||||||
@ -13,11 +13,11 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=iso-8859-1\n"
|
"Content-Type: text/plain; charset=iso-8859-1\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: ../whois.c:95
|
#: ../whois.c:93
|
||||||
msgid "Connecting to whois.crsnic.net.\n"
|
msgid "Connecting to whois.crsnic.net.\n"
|
||||||
msgstr "Mi sto connettendo a whois.crsnic.net.\n"
|
msgstr "Mi sto connettendo a whois.crsnic.net.\n"
|
||||||
|
|
||||||
#: ../whois.c:103
|
#: ../whois.c:97
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
@ -25,20 +25,20 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"\n"
|
"\n"
|
||||||
"Trovato un riferimento CRSNIC a %s.\n"
|
"Trovato un riferimento di CRSNIC a %s.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: ../whois.c:113
|
#: ../whois.c:105
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Using default server %s.\n"
|
msgid "Using default server %s.\n"
|
||||||
msgstr "Uso il server predefinito %s.\n"
|
msgstr "Uso il server predefinito %s.\n"
|
||||||
|
|
||||||
#: ../whois.c:115
|
#: ../whois.c:107
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Using server %s.\n"
|
msgid "Using server %s.\n"
|
||||||
msgstr "Uso il server %s.\n"
|
msgstr "Uso il server %s.\n"
|
||||||
|
|
||||||
#: ../whois.c:120
|
#: ../whois.c:112
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Query string: \"%s\"\n"
|
"Query string: \"%s\"\n"
|
||||||
@ -47,7 +47,7 @@ msgstr ""
|
|||||||
"Richiesta: \"%s\"\n"
|
"Richiesta: \"%s\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
||||||
#: ../whois.c:156
|
#: ../whois.c:153
|
||||||
msgid ""
|
msgid ""
|
||||||
"I don't know where this IP has been delegated.\n"
|
"I don't know where this IP has been delegated.\n"
|
||||||
"I'll try ARIN and hope for the best...\n"
|
"I'll try ARIN and hope for the best...\n"
|
||||||
@ -55,20 +55,28 @@ msgstr ""
|
|||||||
"Non so a chi è stato delegato questo IP.\n"
|
"Non so a chi è stato delegato questo IP.\n"
|
||||||
"Proverò con ARIN sperando per il meglio...\n"
|
"Proverò con ARIN sperando per il meglio...\n"
|
||||||
|
|
||||||
#: ../whois.c:173
|
#: ../whois.c:170
|
||||||
msgid "I guess it's a netblock name but I don't know where to look it up.\n"
|
msgid "I guess it's a netblock name but I don't know where to look it up.\n"
|
||||||
msgstr "Credo che sia il nome di un netblock ma non so dove cercarlo.\n"
|
msgstr "Credo che sia il nome di un netblock ma non so dove cercarlo.\n"
|
||||||
|
|
||||||
#: ../whois.c:180
|
#: ../whois.c:177
|
||||||
msgid "I guess it's a domain but I don't know where to look it up.\n"
|
msgid "I guess it's a domain but I don't know where to look it up.\n"
|
||||||
msgstr "Credo che sia un dominio ma non so dove cercarlo.\n"
|
msgstr "Credo che sia un dominio ma non so dove cercarlo.\n"
|
||||||
|
|
||||||
#: ../whois.c:239
|
#: ../whois.c:188
|
||||||
|
msgid "Unknown AS number. Please upgrade this program."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../whois.c:211
|
||||||
|
msgid "Warning: RIPE flags ignored for a traditional server."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../whois.c:254
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Detected referral to %s on %s.\n"
|
msgid "Detected referral to %s on %s.\n"
|
||||||
msgstr "Trovato un riferimento a %s su %s.\n"
|
msgstr "Trovato un riferimento a %s su %s.\n"
|
||||||
|
|
||||||
#: ../whois.c:252
|
#: ../whois.c:267
|
||||||
msgid ""
|
msgid ""
|
||||||
"Catastrophic error: INTERNIC changed the disclaimer text.\n"
|
"Catastrophic error: INTERNIC changed the disclaimer text.\n"
|
||||||
"Please upgrade this program.\n"
|
"Please upgrade this program.\n"
|
||||||
@ -76,22 +84,22 @@ msgstr ""
|
|||||||
"Errore catastrofico: INTERNIC ha cambiato il testo di avvertenze.\n"
|
"Errore catastrofico: INTERNIC ha cambiato il testo di avvertenze.\n"
|
||||||
"Aggiorna questo programma.\n"
|
"Aggiorna questo programma.\n"
|
||||||
|
|
||||||
#: ../whois.c:313
|
#: ../whois.c:335
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Host %s not found."
|
msgid "Host %s not found."
|
||||||
msgstr "Host %s non trovato."
|
msgstr "Host %s non trovato."
|
||||||
|
|
||||||
#: ../whois.c:322
|
#: ../whois.c:344
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s/tcp: unknown service"
|
msgid "%s/tcp: unknown service"
|
||||||
msgstr "%s/tcp: servizio sconosciuto"
|
msgstr "%s/tcp: servizio sconosciuto"
|
||||||
|
|
||||||
#: ../whois.c:339
|
#: ../whois.c:361
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Interrupted by signal %d..."
|
msgid "Interrupted by signal %d..."
|
||||||
msgstr "Interrotto dal segnale %d..."
|
msgstr "Interrotto dal segnale %d..."
|
||||||
|
|
||||||
#: ../whois.c:379
|
#: ../whois.c:403
|
||||||
msgid ""
|
msgid ""
|
||||||
"Usage: whois [OPTION]... OBJECT...\n"
|
"Usage: whois [OPTION]... OBJECT...\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|||||||
108
test-whois.pl
Executable file
108
test-whois.pl
Executable file
@ -0,0 +1,108 @@
|
|||||||
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
use IO::Socket;
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
my %check=(
|
||||||
|
'whois.io' => 'whois.io',
|
||||||
|
'whois.nic.cx' => 'nic.cx',
|
||||||
|
'whois.nic.gi' => 'nic.gi',
|
||||||
|
'whois.nic.ly' => 'nic.ly',
|
||||||
|
'whois.nic.pw' => 'nic.pw',
|
||||||
|
'whois.nic.so' => 'nic.so',
|
||||||
|
'whois.nic.st' => 'nic.st',
|
||||||
|
'whois.uprr.pr' => 'uprr.pr',
|
||||||
|
'whois.nplus.gf' => 'nplus.gf',
|
||||||
|
'rwhois.reacciun.ve' => 'reacciun.ve',
|
||||||
|
'whois.adamsnames.tc' => 'adamsnames.vg',
|
||||||
|
'whois.idnic.net.id' => 'idnic.net.id',
|
||||||
|
'whois.ncst.ernet.in' => 'ncst.ernet.in',
|
||||||
|
);
|
||||||
|
|
||||||
|
my @ripetest=('-V wC2.0', '-V2.0Md', '-VMd4.4');
|
||||||
|
my %ripeserv=qw(
|
||||||
|
whois.ripe.net dfn.de
|
||||||
|
whois.aunic.net connect.com.au
|
||||||
|
whois.connect.com.au connect.com.au
|
||||||
|
whois.ra.net AS1
|
||||||
|
whois.apnic.net 24.192.0.0
|
||||||
|
whois.nic.it nic.it
|
||||||
|
whois.ans.net AS1
|
||||||
|
whois.ripn.net demos.su
|
||||||
|
whois.nic.fr nic.fr
|
||||||
|
whois.nic.net.sg nic.net.sg
|
||||||
|
whois.metu.edu.tr metu.edu.tr
|
||||||
|
);
|
||||||
|
|
||||||
|
open(LIST, 'tld_serv_list');
|
||||||
|
while (<LIST>) {
|
||||||
|
chomp;
|
||||||
|
next if /^#/;
|
||||||
|
my ($tld, $serv, $junk)=split;
|
||||||
|
next unless ($tld =~/\.[a-z]{2}$/); # skip non-cctld
|
||||||
|
# I'm sure these won't move without notifying...
|
||||||
|
next if ($serv =~ /(?:isi\.edu|internic.net)/);
|
||||||
|
|
||||||
|
if ($serv eq 'whois.ripe.net') {
|
||||||
|
$tld =~ s/^\.//;
|
||||||
|
print ">>>>>>>>>Querying $serv ($tld) for $tld<<<<<<<<<<\n";
|
||||||
|
print whois("-i domain $tld", $serv); # untested
|
||||||
|
print "\n";
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
my $q;
|
||||||
|
if ($serv =~ /$tld$/) {
|
||||||
|
$q = $serv; $q =~ s/.*\.([-a-z0-9]+?\...)$/$1/; # we know a real domain
|
||||||
|
} else {
|
||||||
|
$q = "nic$tld"; # make a random domain and try anyway
|
||||||
|
}
|
||||||
|
$tld =~ s/^\.//;
|
||||||
|
print ">>>>>>>>>Querying $serv ($tld) for $q<<<<<<<<<<\n";
|
||||||
|
print whois($q, $serv);
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
close LIST;
|
||||||
|
|
||||||
|
print "#" x 78 . "\n";
|
||||||
|
foreach (keys %check) {
|
||||||
|
print ">>>>>>>>>Querying $_ for $check{$_}<<<<<<<<<<\n";
|
||||||
|
print whois($check{$_}, $_);
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
print "#" x 78 . "\n";
|
||||||
|
foreach my $s (keys %ripeserv) {
|
||||||
|
foreach (@ripetest) {
|
||||||
|
my $q = "$_ $ripeserv{$s}";
|
||||||
|
print ">>>>>>>>>Querying $s for $q<<<<<<<<<<\n";
|
||||||
|
print whois($q, $s);
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit 0;
|
||||||
|
|
||||||
|
sub whois {
|
||||||
|
my ($query, $serv, $port) = @_;
|
||||||
|
my (@result, $remote);
|
||||||
|
|
||||||
|
eval {
|
||||||
|
local $^W=0;
|
||||||
|
$remote = IO::Socket::INET->new(
|
||||||
|
Timeout => 15, PeerAddr => $serv, PeerPort => $port || 43
|
||||||
|
);
|
||||||
|
};
|
||||||
|
if (defined $remote and ($@ eq '')) {
|
||||||
|
print $remote "$query\r\n";
|
||||||
|
@result = <$remote>;
|
||||||
|
close $remote;
|
||||||
|
} elsif ($@ ne '') {
|
||||||
|
@result = ("FATAL: $@");
|
||||||
|
} else {
|
||||||
|
# FIXME should disconnect from rwhois servers or the connection will hang
|
||||||
|
# until the timeout of the server
|
||||||
|
@result = ("$!\n");
|
||||||
|
}
|
||||||
|
return @result;
|
||||||
|
}
|
||||||
|
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
# Servers in lines with a trailing hash mark have been tested and found
|
||||||
|
# not working at the time of my survey (19991109).
|
||||||
|
# Servers with the comment "wrong" have been tested as well but are wrong.
|
||||||
.gb.com whois.nomination.net
|
.gb.com whois.nomination.net
|
||||||
.gb.net whois.nomination.net
|
.gb.net whois.nomination.net
|
||||||
.uk.net whois.nomination.net
|
.uk.net whois.nomination.net
|
||||||
@ -11,18 +14,21 @@
|
|||||||
.mil whois.nic.mil
|
.mil whois.nic.mil
|
||||||
.ac whois.nic.ac
|
.ac whois.nic.ac
|
||||||
.ad whois.ripe.net
|
.ad whois.ripe.net
|
||||||
.al whois.ripe.net
|
.af whois.nic.tm
|
||||||
|
#.al whois.ripe.net #wrong
|
||||||
.am whois.amnic.net
|
.am whois.amnic.net
|
||||||
.as whois.nic.as
|
.as whois.nic.as
|
||||||
.at whois.univie.ac.at # CNAME whois.ripe.net
|
.at whois.univie.ac.at # CNAME whois.ripe.net
|
||||||
.net.au whois.connect.com.au
|
#.net.au whois.connect.com.au # obsolete?
|
||||||
.au whois.aunic.net
|
.au whois.aunic.net
|
||||||
.az whois.ripe.net
|
#.az whois.ripe.net #wrong
|
||||||
.ba whois.ripe.net
|
.ba whois.ripe.net
|
||||||
.be whois.ripe.net
|
.be whois.ripe.net
|
||||||
.bg whois.ripe.net
|
.bg whois.ripe.net
|
||||||
|
#.bm rwhois.ibl.bm:4321
|
||||||
.br whois.nic.br
|
.br whois.nic.br
|
||||||
.by whois.ripe.net
|
.bt whois.nic.tm
|
||||||
|
#.by whois.ripe.net #wrong
|
||||||
.ca whois.cdnnet.ca
|
.ca whois.cdnnet.ca
|
||||||
.cc whois.nic.cc
|
.cc whois.nic.cc
|
||||||
.ch whois.nic.ch
|
.ch whois.nic.ch
|
||||||
@ -30,33 +36,37 @@
|
|||||||
.ac.cn whois.cnc.ac.cn
|
.ac.cn whois.cnc.ac.cn
|
||||||
.cn whois.cnnic.net.cn
|
.cn whois.cnnic.net.cn
|
||||||
.uk.co whois.uk.co
|
.uk.co whois.uk.co
|
||||||
.co whois.ripe.net
|
#.co whois.ripe.net #wrong
|
||||||
|
#.cx whois.nic.cx #
|
||||||
.cy whois.ripe.net
|
.cy whois.ripe.net
|
||||||
.cz whois.ripe.net
|
.cz whois.ripe.net
|
||||||
.de whois.ripe.net
|
.de whois.ripe.net
|
||||||
.dk whois.ripe.net
|
.dk whois.ripe.net
|
||||||
.dz whois.ripe.net
|
#.dz whois.ripe.net #wrong
|
||||||
.ee whois.ripe.net
|
#.ee whois.ripe.net #wrong
|
||||||
.eg whois.ripe.net
|
#.eg whois.ripe.net #wrong
|
||||||
.es whois.ripe.net
|
.es whois.ripe.net
|
||||||
.fi whois.ripe.net
|
#.fi whois.ripe.net #wrong
|
||||||
.fo whois.ripe.net
|
.fo whois.ripe.net
|
||||||
.fr whois.nic.fr
|
.fr whois.nic.fr
|
||||||
.ga whois.ripe.net
|
#.ga whois.ripe.net #wrong
|
||||||
.gb whois.ripe.net
|
#.gb whois.ripe.net #wrong
|
||||||
.ge whois.ripe.net
|
#.ge whois.ripe.net #wrong
|
||||||
|
#.gf whois.nplus.gf #
|
||||||
|
#.gi whois.nic.gi #
|
||||||
.gl whois.ripe.net
|
.gl whois.ripe.net
|
||||||
.gm whois.ripe.net
|
.gm whois.ripe.net
|
||||||
.gr whois.ripe.net
|
.gr whois.ripe.net
|
||||||
.gs whois.adamsnames.tc
|
.gs whois.adamsnames.tc
|
||||||
.hk whois.apnic.net
|
.hk whois.hknic.net.hk
|
||||||
.hm whois.nic.hm
|
.hm whois.nic.hm
|
||||||
.hr whois.ripe.net
|
.hr whois.ripe.net
|
||||||
.hu whois.ripe.net
|
.hu whois.ripe.net
|
||||||
.id whois.idnic.net.id
|
.id whois.idnic.net.id # broken
|
||||||
.ie whois.ripe.net
|
.ie whois.ripe.net
|
||||||
.il whois.ripe.net
|
.il whois.ripe.net
|
||||||
.in whois.ncst.ernet.in
|
.in whois.ncst.ernet.in # empty?
|
||||||
|
#.io whois.io #
|
||||||
.is whois.ripe.net
|
.is whois.ripe.net
|
||||||
.it whois.nic.it
|
.it whois.nic.it
|
||||||
.jo whois.ripe.net
|
.jo whois.ripe.net
|
||||||
@ -68,13 +78,14 @@
|
|||||||
.lt whois.ripe.net
|
.lt whois.ripe.net
|
||||||
.lu whois.ripe.net
|
.lu whois.ripe.net
|
||||||
.lv whois.ripe.net
|
.lv whois.ripe.net
|
||||||
.ma whois.ripe.net
|
#.ly whois.nic.ly #
|
||||||
|
#.ma whois.ripe.net #wrong
|
||||||
.mc whois.ripe.net
|
.mc whois.ripe.net
|
||||||
.md whois.ripe.net
|
.md whois.ripe.net
|
||||||
.mk whois.ripe.net
|
#.mk whois.ripe.net #wrong
|
||||||
.mm whois.nic.mm
|
#.mm whois.nic.mm #
|
||||||
.ms whois.adamsnames.tc
|
.ms whois.adamsnames.tc
|
||||||
.mt whois.ripe.net
|
#.mt whois.ripe.net #wrong
|
||||||
.mx whois.nic.mx
|
.mx whois.nic.mx
|
||||||
.ng pgebrehiwot.iat.cnr.it
|
.ng pgebrehiwot.iat.cnr.it
|
||||||
.nl www.domain-registry.nl
|
.nl www.domain-registry.nl
|
||||||
@ -83,17 +94,21 @@
|
|||||||
.nz tardis.patho.gen.nz
|
.nz tardis.patho.gen.nz
|
||||||
.pe whois.rcp.net.pe
|
.pe whois.rcp.net.pe
|
||||||
.pl whois.ripe.net
|
.pl whois.ripe.net
|
||||||
|
#.pr whois.uprr.pr #
|
||||||
.pk whois.pknic.net.pk
|
.pk whois.pknic.net.pk
|
||||||
.pt whois.dns.pt
|
#.pt whois.dns.pt # disabled - use http://www.dns.pt/info/
|
||||||
.ro whois.nic.ro
|
.pw whois.nic.pw
|
||||||
|
.ro whois.ripe.net
|
||||||
.ru whois.ripn.net
|
.ru whois.ripn.net
|
||||||
.se whois.nic-se.se
|
.se whois.nic-se.se
|
||||||
.sg whois.nic.net.sg
|
.sg whois.nic.net.sg
|
||||||
.sh whois.nic.sh
|
.sh whois.nic.sh
|
||||||
.si whois.ripe.net
|
#.si whois.ripe.net #wrong
|
||||||
.sk whois.ripe.net
|
.sk whois.ripe.net
|
||||||
.sm whois.ripe.net
|
.sm whois.ripe.net
|
||||||
.su whois.ripe.net
|
#.so whois.nic.so #
|
||||||
|
.st whois.nic.st
|
||||||
|
.su whois.ripn.net
|
||||||
.tc whois.adamsnames.tc
|
.tc whois.adamsnames.tc
|
||||||
.tf whois.adamsnames.tc
|
.tf whois.adamsnames.tc
|
||||||
.th whois.thnic.net
|
.th whois.thnic.net
|
||||||
@ -108,12 +123,18 @@
|
|||||||
.uk whois.nic.uk
|
.uk whois.nic.uk
|
||||||
.us whois.isi.edu
|
.us whois.isi.edu
|
||||||
.va whois.ripe.net
|
.va whois.ripe.net
|
||||||
|
#.ve rwhois.reacciun.ve:4321
|
||||||
|
.vg whois.adamsnames.tc
|
||||||
.yu whois.ripe.net
|
.yu whois.ripe.net
|
||||||
.za whois.frd.ac.za
|
.za whois.frd.ac.za
|
||||||
-arin whois.arin.net
|
|
||||||
-ripe whois.ripe.net
|
|
||||||
-ap whois.apnic.net
|
|
||||||
-dom whois.internic.net
|
-dom whois.internic.net
|
||||||
-org whois.internic.net
|
-org whois.internic.net
|
||||||
-hst whois.internic.net
|
-hst whois.internic.net
|
||||||
|
-arin whois.arin.net
|
||||||
|
-ripe whois.ripe.net
|
||||||
|
-ap whois.apnic.net
|
||||||
|
-au whois.aunic.net
|
||||||
-6bone whois.6bone.net
|
-6bone whois.6bone.net
|
||||||
|
-ripn whois.ripn.net
|
||||||
|
-sgnic whois.nic.net.sg
|
||||||
|
-metu whois.metu.edu.tr
|
||||||
|
|||||||
18
whois.1
18
whois.1
@ -1,4 +1,4 @@
|
|||||||
.TH WHOIS 1 "8 October 1999" "Marco d'Itri" "Debian GNU/Linux"
|
.TH WHOIS 1 "15 November 1999" "Marco d'Itri" "Debian GNU/Linux"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
whois \- client for the whois directory service
|
whois \- client for the whois directory service
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
@ -65,6 +65,19 @@ to find the registrar for a GTLD subdomain. This option overrides
|
|||||||
Be verbose.
|
Be verbose.
|
||||||
.TP 8
|
.TP 8
|
||||||
Other options are flags understood by RIPE-like servers.
|
Other options are flags understood by RIPE-like servers.
|
||||||
|
.SH FEATURES
|
||||||
|
When querying
|
||||||
|
.I whois.arin.net
|
||||||
|
for AS numbers, the program will automatically convert the request in
|
||||||
|
the appropriate format, inserting a space after the string "AS".
|
||||||
|
.P
|
||||||
|
When querying
|
||||||
|
.I whois.nic.ad.jp
|
||||||
|
english text is requested unless the
|
||||||
|
.I LANG
|
||||||
|
environment variable specifies a Japanese locale.
|
||||||
|
.P
|
||||||
|
RIPE-specific options are ignored when querying non-RIPE servers.
|
||||||
.SH "SEE ALSO"
|
.SH "SEE ALSO"
|
||||||
.I RFC 812:
|
.I RFC 812:
|
||||||
NICNAME/WHOIS
|
NICNAME/WHOIS
|
||||||
@ -74,7 +87,7 @@ RIPE NCC Database Documentation
|
|||||||
.PP
|
.PP
|
||||||
Detailed help on available flags can be found in
|
Detailed help on available flags can be found in
|
||||||
.I RIPE-157
|
.I RIPE-157
|
||||||
or in the help file, which can be downloaded with the command:
|
or in the help file, which can be obtained with the command:
|
||||||
.IP
|
.IP
|
||||||
.B whois -h whois.ripe.net HELP
|
.B whois -h whois.ripe.net HELP
|
||||||
.SH HISTORY
|
.SH HISTORY
|
||||||
@ -87,4 +100,3 @@ Kessens of QWest for the 6bone server.
|
|||||||
.B Whois
|
.B Whois
|
||||||
and this man page were written by Marco d'Itri <md@linux.it>
|
and this man page were written by Marco d'Itri <md@linux.it>
|
||||||
and are licensed under the GPL.
|
and are licensed under the GPL.
|
||||||
|
|
||||||
|
|||||||
102
whois.c
102
whois.c
@ -19,18 +19,19 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
/* Application-specific */
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "whois.h"
|
|
||||||
#include "data.h"
|
#include "data.h"
|
||||||
|
#include "whois.h"
|
||||||
|
|
||||||
|
/* Global variables */
|
||||||
int sockfd, verb = 0;
|
int sockfd, verb = 0;
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int ch, nopar = 0, optC = 0;
|
int ch, nopar = 0, optC = 0;
|
||||||
const char *server = NULL;
|
const char *server = NULL;
|
||||||
char *p, qstring[256] = "\0", fstring[64] = "\0", *port = NULL,
|
char *p, *q, qstring[256] = "\0", fstring[64] = "\0", *port = NULL,
|
||||||
defaultserv[] = "whois.internic.net";
|
defaultserv[] = "whois.internic.net";
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
@ -39,7 +40,7 @@ int main(int argc, char *argv[])
|
|||||||
textdomain(NLS_CAT_NAME);
|
textdomain(NLS_CAT_NAME);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while ((ch = GETOPT(argc, argv, "acCFg:h:i:LmMp:rRs:St:T:v:V")) > 0) {
|
while ((ch = getopt(argc, argv, "acCFg:h:i:LmMp:rRs:St:T:v:V")) > 0) {
|
||||||
/* RIPE flags */
|
/* RIPE flags */
|
||||||
if (strchr(ripeflags, ch)) {
|
if (strchr(ripeflags, ch)) {
|
||||||
for (p = fstring; *p != '\0'; p++);
|
for (p = fstring; *p != '\0'; p++);
|
||||||
@ -56,7 +57,8 @@ int main(int argc, char *argv[])
|
|||||||
/* program flags */
|
/* program flags */
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'h':
|
case 'h':
|
||||||
server = optarg;
|
server = q = malloc(strlen(optarg) + 1);
|
||||||
|
for (p = optarg; *p != '\0'; *q++ = tolower(*p++));
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
port = optarg;
|
port = optarg;
|
||||||
@ -89,7 +91,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (optC && domfind(qstring, gtlds)) {
|
if (optC && domfind(qstring, gtlds)) {
|
||||||
if (verb)
|
if (verb)
|
||||||
printf(_("Connecting to whois.crsnic.net.\n"));
|
fputs(_("Connecting to whois.crsnic.net.\n"), stdout);
|
||||||
sockfd = openconn("whois.crsnic.net", "43");
|
sockfd = openconn("whois.crsnic.net", "43");
|
||||||
server = query_crsnic(sockfd, qstring);
|
server = query_crsnic(sockfd, qstring);
|
||||||
if (verb && server)
|
if (verb && server)
|
||||||
@ -107,8 +109,9 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
p = queryformat(server, fstring, qstring);
|
p = queryformat(server, fstring, qstring);
|
||||||
if (verb)
|
if (verb) {
|
||||||
printf(_("Query string: \"%s\"\n\n"), p);
|
printf(_("Query string: \"%s\"\n\n"), p);
|
||||||
|
}
|
||||||
strcat(p, "\r\n");
|
strcat(p, "\r\n");
|
||||||
|
|
||||||
signal(SIGTERM, sighandler);
|
signal(SIGTERM, sighandler);
|
||||||
@ -130,22 +133,26 @@ const char *whichwhois(const char *s)
|
|||||||
if (*s == '\0')
|
if (*s == '\0')
|
||||||
return "whois.ripe.net";
|
return "whois.ripe.net";
|
||||||
|
|
||||||
|
/* no dot and no hyphen means it's a internic NIC handle or an AS (?) */
|
||||||
|
if (!strpbrk(s, ".-")) {
|
||||||
|
if (strncasecmp(s, "AS", 2) == 0) { /* it's an AS */
|
||||||
|
return whereas(atoi(s + 2), as_assign);
|
||||||
|
} else /* it's an internic NIC handle (?) */
|
||||||
|
return "whois.internic.net";
|
||||||
|
}
|
||||||
|
|
||||||
/* IPv6 address */
|
/* IPv6 address */
|
||||||
if (strchr(s, ':'))
|
if (strchr(s, ':'))
|
||||||
return "whois.6bone.net";
|
return "whois.6bone.net";
|
||||||
|
|
||||||
/* no dot and no hyphen means it's a internic NIC handle or an AS (?) */
|
|
||||||
if (!strpbrk(s, ".-"))
|
|
||||||
return "whois.internic.net";
|
|
||||||
|
|
||||||
/* smells like an IP? */
|
/* smells like an IP? */
|
||||||
if ((ip = myinet_aton(s))) {
|
if ((ip = myinet_aton(s))) {
|
||||||
for (i = 0; ip_assign[i].serv; i++)
|
for (i = 0; ip_assign[i].serv; i++)
|
||||||
if ((ip & ip_assign[i].mask) == ip_assign[i].net)
|
if ((ip & ip_assign[i].mask) == ip_assign[i].net)
|
||||||
return ip_assign[i].serv;
|
return ip_assign[i].serv;
|
||||||
if (verb)
|
if (verb)
|
||||||
printf(_("I don't know where this IP has been delegated.\n"
|
fputs(_("I don't know where this IP has been delegated.\n"
|
||||||
"I'll try ARIN and hope for the best...\n"));
|
"I'll try ARIN and hope for the best...\n"), stdout);
|
||||||
return "whois.arin.net";
|
return "whois.arin.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,35 +164,62 @@ const char *whichwhois(const char *s)
|
|||||||
/* no dot but hyphen, check for ARIN netblock names */
|
/* no dot but hyphen, check for ARIN netblock names */
|
||||||
if (!strchr(s, '.')) {
|
if (!strchr(s, '.')) {
|
||||||
for (i = 0; arin_nets[i]; i++)
|
for (i = 0; arin_nets[i]; i++)
|
||||||
if (!strncmp(s, arin_nets[i], strlen(arin_nets[i])))
|
if (!strncasecmp(s, arin_nets[i], strlen(arin_nets[i])))
|
||||||
return "whois.arin.net";
|
return "whois.arin.net";
|
||||||
/* could be one of *NETBLK-RIPE* *NET-RIPE* *APNIC* *AUNIC-AU* */
|
/* could be one of *NETBLK-RIPE* *NET-RIPE* *APNIC* *AUNIC-AU* */
|
||||||
if (verb)
|
if (verb)
|
||||||
printf(_("I guess it's a netblock name but I don't know where to"
|
fputs(_("I guess it's a netblock name but I don't know where to"
|
||||||
" look it up.\n"));
|
" look it up.\n"), stdout);
|
||||||
return "whois.arin.net";
|
return "whois.arin.net";
|
||||||
}
|
}
|
||||||
|
|
||||||
/* has dot and hypen and it's not in tld_serv[], WTF is it? */
|
/* has dot and hypen and it's not in tld_serv[], WTF is it? */
|
||||||
if (verb)
|
if (verb)
|
||||||
printf(_("I guess it's a domain but I don't know where to look it"
|
fputs(_("I guess it's a domain but I don't know where to look it"
|
||||||
" up.\n"));
|
" up.\n"), stdout);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *whereas(unsigned short asn, struct as_del aslist[])
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (asn > 14335)
|
||||||
|
puts(_("Unknown AS number. Please upgrade this program."));
|
||||||
|
for (i = 0; aslist[i].serv; i++)
|
||||||
|
if (asn >= aslist[i].first && asn <= aslist[i].last)
|
||||||
|
return aslist[i].serv;
|
||||||
|
return "whois.arin.net";
|
||||||
|
}
|
||||||
|
|
||||||
char *queryformat(const char *server, const char *flags, const char *query)
|
char *queryformat(const char *server, const char *flags, const char *query)
|
||||||
{
|
{
|
||||||
char *buf;
|
char *buf;
|
||||||
int i;
|
int i, isripe = 0;
|
||||||
|
|
||||||
buf = malloc(QUERYBUFSIZE);
|
buf = malloc(QUERYBUFSIZE + 1); /* +1 is for ARIN AS queries */
|
||||||
strcpy(buf, flags);
|
//*buf = '\0';
|
||||||
for (i = 0; ripe_servers[i]; i++)
|
for (i = 0; ripe_servers[i]; i++)
|
||||||
if (strcmp(server, ripe_servers[i]) == 0)
|
if (strcmp(server, ripe_servers[i]) == 0) {
|
||||||
strcat(buf, VERSION " ");
|
strcat(buf, "-V" IDSTRING " ");
|
||||||
strcat(buf, query);
|
isripe = 1;
|
||||||
if (strcmp(server, "whois.nic.ad.jp") == 0) {
|
break;
|
||||||
|
}
|
||||||
|
if (*flags != '\0') {
|
||||||
|
if (isripe && *flags != '\0')
|
||||||
|
puts(_("Warning: RIPE flags ignored for a traditional server."));
|
||||||
|
else
|
||||||
|
strcat(buf, flags);
|
||||||
|
}
|
||||||
|
if (!isripe && strcmp(server, "whois.arin.net") == 0 &&
|
||||||
|
strncasecmp(query, "AS", 2) == 0 &&
|
||||||
|
query[2] >= '0' && query[2] <= '9') {
|
||||||
|
sprintf(buf, "AS ");
|
||||||
|
strcat(buf, query + 2);
|
||||||
|
} else
|
||||||
|
strcat(buf, query);
|
||||||
|
if (!isripe && strcmp(server, "whois.nic.ad.jp") == 0) {
|
||||||
char *lang = getenv("LANG"); /* not a perfect check, but... */
|
char *lang = getenv("LANG"); /* not a perfect check, but... */
|
||||||
if (lang && (strncmp(getenv("LANG"), "ja", 2) != 0))
|
if (lang && (strncmp(getenv("LANG"), "ja", 2) != 0))
|
||||||
strcat(buf, "/e"); /* ask for english text */
|
strcat(buf, "/e"); /* ask for english text */
|
||||||
@ -206,9 +240,9 @@ void do_query(const int sock, const char *query)
|
|||||||
err_sys("write");
|
err_sys("write");
|
||||||
while (fgets(buf, 100, fi)) { /* XXX errors? */
|
while (fgets(buf, 100, fi)) { /* XXX errors? */
|
||||||
#ifdef HIDE_DISCL
|
#ifdef HIDE_DISCL
|
||||||
if (hide == 1 &&
|
if (hide == 1) {
|
||||||
strncmp(buf, DISCL_END, sizeof(DISCL_END) - 1) == 0) {
|
if (strncmp(buf, DISCL_END, sizeof(DISCL_END) - 1) == 0)
|
||||||
hide = 2; /* stop hiding */
|
hide = 2; /* stop hiding */
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (hide == 0 &&
|
if (hide == 0 &&
|
||||||
@ -235,7 +269,7 @@ void do_query(const int sock, const char *query)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
printf("%s", buf);
|
fputs(buf, stdout);
|
||||||
}
|
}
|
||||||
#ifdef HIDE_DISCL
|
#ifdef HIDE_DISCL
|
||||||
if (hide == 1)
|
if (hide == 1)
|
||||||
@ -267,7 +301,7 @@ const char *query_crsnic(const int sock, const char *query)
|
|||||||
for (; *p != '\n' && *p != '\r'; *q++ = *p++); /* copy data */
|
for (; *p != '\n' && *p != '\r'; *q++ = *p++); /* copy data */
|
||||||
*q = '\0';
|
*q = '\0';
|
||||||
}
|
}
|
||||||
printf("%s", buf);
|
fputs(buf, stdout);
|
||||||
}
|
}
|
||||||
|
|
||||||
free(temp);
|
free(temp);
|
||||||
@ -336,11 +370,12 @@ void sighandler(int signum)
|
|||||||
err_quit(_("Interrupted by signal %d..."), signum);
|
err_quit(_("Interrupted by signal %d..."), signum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if dom ends with tld */
|
||||||
int domcmp(const char *dom, const char *tld)
|
int domcmp(const char *dom, const char *tld)
|
||||||
{
|
{
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
|
|
||||||
if (!(p = rindex(dom, *tld)))
|
if (!(p = strrchr(dom, *tld)))
|
||||||
return 0;
|
return 0;
|
||||||
q = tld;
|
q = tld;
|
||||||
while (tolower(*p) == *q)
|
while (tolower(*p) == *q)
|
||||||
@ -349,6 +384,7 @@ int domcmp(const char *dom, const char *tld)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if dom ends with an element of tldlist[] */
|
||||||
int domfind(const char *dom, const char *tldlist[])
|
int domfind(const char *dom, const char *tldlist[])
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -372,7 +408,7 @@ unsigned long myinet_aton(const char *s)
|
|||||||
|
|
||||||
void usage(void)
|
void usage(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, _(
|
fputs(_(
|
||||||
"Usage: whois [OPTION]... OBJECT...\n\n"
|
"Usage: whois [OPTION]... OBJECT...\n\n"
|
||||||
"-a search all databases\n"
|
"-a search all databases\n"
|
||||||
"-C first query CRSNIC to find GTLD registrar\n"
|
"-C first query CRSNIC to find GTLD registrar\n"
|
||||||
@ -394,7 +430,7 @@ void usage(void)
|
|||||||
"-v TYPE requests verbose template for object of TYPE\n"
|
"-v TYPE requests verbose template for object of TYPE\n"
|
||||||
"-V explain what is being done\n\n"
|
"-V explain what is being done\n\n"
|
||||||
"Version " VERSION ". Please report bugs to <md@linux.it>.\n"
|
"Version " VERSION ". Please report bugs to <md@linux.it>.\n"
|
||||||
));
|
), stderr);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
19
whois.h
19
whois.h
@ -1,7 +1,3 @@
|
|||||||
/* Identification string */
|
|
||||||
/* #define IDSTRING "-VMd" VERSION */
|
|
||||||
#define IDSTRING "-VwC2.0"
|
|
||||||
|
|
||||||
/* Size of the buffer where the query is built */
|
/* Size of the buffer where the query is built */
|
||||||
#define QUERYBUFSIZE 1024
|
#define QUERYBUFSIZE 1024
|
||||||
|
|
||||||
@ -16,7 +12,6 @@
|
|||||||
|
|
||||||
/* system features */
|
/* system features */
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
# define HAVE_GNU_GETOPT
|
|
||||||
# define ENABLE_NLS
|
# define ENABLE_NLS
|
||||||
# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
|
# if __GLIBC__ >= 2 && __GLIBC_MINOR__ >= 1
|
||||||
# define HAVE_GETADDRINFO
|
# define HAVE_GETADDRINFO
|
||||||
@ -47,16 +42,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* If needed, disable GNU getopt "features" */
|
|
||||||
#ifdef HAVE_GNU_GETOPT
|
|
||||||
# define GETOPT(argc, argv, str) getopt((argc), (argv), "+" str)
|
|
||||||
#else
|
|
||||||
# define GETOPT(argc, argv, str) getopt((argc), (argv), (str))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
const char *whichwhois(const char *);
|
const char *whichwhois(const char *);
|
||||||
|
const char *whereas(unsigned short, struct as_del []);
|
||||||
char *queryformat(const char *, const char *, const char *);
|
char *queryformat(const char *, const char *, const char *);
|
||||||
void do_query(const int, const char *);
|
void do_query(const int, const char *);
|
||||||
const char *query_crsnic(const int, const char *);
|
const char *query_crsnic(const int, const char *);
|
||||||
@ -71,3 +59,8 @@ int domfind(const char *, const char *[]);
|
|||||||
void err_quit(const char *,...);
|
void err_quit(const char *,...);
|
||||||
void err_sys(const char *,...);
|
void err_sys(const char *,...);
|
||||||
|
|
||||||
|
|
||||||
|
/* flags for RIPE-like servers */
|
||||||
|
const char *ripeflags="acFLmMrRS";
|
||||||
|
const char *ripeflagsp="gisTtv";
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user