|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: char copyright[] =
9: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
10: All rights reserved.\n";
11: #endif not lint
12:
13: #ifndef lint
14: static char sccsid[] = "@(#)whois.c 5.3 (Berkeley) 2/8/88";
15: #endif not lint
16:
17: #include <sys/types.h>
18: #include <sys/socket.h>
19:
20: #include <netinet/in.h>
21:
22: #include <stdio.h>
23: #include <netdb.h>
24:
25: #define NICHOST "sri-nic.arpa"
26:
27: main(argc, argv)
28: int argc;
29: char *argv[];
30: {
31: int s;
32: register FILE *sfi, *sfo;
33: register char c;
34: char *host = NICHOST;
35: struct sockaddr_in sin;
36: struct hostent *hp;
37: struct servent *sp;
38:
39: argc--, argv++;
40: if (argc > 2 && strcmp(*argv, "-h") == 0) {
41: argv++, argc--;
42: host = *argv++;
43: argc--;
44: }
45: if (argc != 1) {
46: fprintf(stderr, "usage: whois [ -h host ] name\n");
47: exit(1);
48: }
49: hp = gethostbyname(host);
50: if (hp == NULL) {
51: fprintf(stderr, "whois: %s: host unknown\n", host);
52: exit(1);
53: }
54: host = hp->h_name;
55: s = socket(hp->h_addrtype, SOCK_STREAM, 0, 0);
56: if (s < 0) {
57: perror("whois: socket");
58: exit(2);
59: }
60: bzero((caddr_t)&sin, sizeof (sin));
61: sin.sin_family = hp->h_addrtype;
62: if (bind(s, &sin, sizeof (sin), 0) < 0) {
63: perror("whois: bind");
64: exit(3);
65: }
66: bcopy(hp->h_addr, &sin.sin_addr, hp->h_length);
67: sp = getservbyname("whois", "tcp");
68: if (sp == NULL) {
69: fprintf(stderr, "whois: whois/tcp: unknown service\n");
70: exit(4);
71: }
72: sin.sin_port = sp->s_port;
73: if (connect(s, &sin, sizeof (sin), 0) < 0) {
74: perror("whois: connect");
75: exit(5);
76: }
77: sfi = fdopen(s, "r");
78: sfo = fdopen(s, "w");
79: if (sfi == NULL || sfo == NULL) {
80: perror("fdopen");
81: close(s);
82: exit(1);
83: }
84: fprintf(sfo, "%s\r\n", *argv);
85: fflush(sfo);
86: while ((c = getc(sfi)) != EOF)
87: putchar(c);
88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.