|
|
1.1 ! root 1: ! 2: #ifndef lint ! 3: static char sccsid[] = "@(#)gettable.c 4.3 (Berkeley) 10/5/83"; ! 4: #endif ! 5: ! 6: #include <sys/types.h> ! 7: #include <sys/socket.h> ! 8: ! 9: #include <netinet/in.h> ! 10: ! 11: #include <stdio.h> ! 12: #include <netdb.h> ! 13: ! 14: #define OUTFILE "hosts.txt" /* default output file */ ! 15: #define QUERY "ALL\r\n" /* query to hostname server */ ! 16: ! 17: #define equaln(s1, s2, n) (!strncmp(s1, s2, n)) ! 18: ! 19: struct sockaddr_in sin; ! 20: char buf[BUFSIZ]; ! 21: char *outfile = OUTFILE; ! 22: ! 23: main(argc, argv) ! 24: int argc; ! 25: char *argv[]; ! 26: { ! 27: int s; ! 28: register len; ! 29: register FILE *sfi, *sfo, *hf; ! 30: register char *p; ! 31: char *host; ! 32: register struct hostent *hp; ! 33: struct servent *sp; ! 34: ! 35: argv++, argc--; ! 36: if (argc < 1 || argc > 2) { ! 37: fprintf(stderr, "usage: gettable host [ file ]\n"); ! 38: exit(1); ! 39: } ! 40: sp = getservbyname("hostnames", "tcp"); ! 41: if (sp == NULL) { ! 42: fprintf(stderr, "gettable: hostnames/tcp: unknown service\n"); ! 43: exit(3); ! 44: } ! 45: host = *argv; ! 46: argv++, argc--; ! 47: hp = gethostbyname(host); ! 48: if (hp == NULL) { ! 49: fprintf(stderr, "gettable: %s: host unknown\n", host); ! 50: exit(2); ! 51: } ! 52: host = hp->h_name; ! 53: if (argc > 0) ! 54: outfile = *argv; ! 55: sin.sin_family = hp->h_addrtype; ! 56: s = socket(hp->h_addrtype, SOCK_STREAM, 0, 0); ! 57: if (s < 0) { ! 58: perror("gettable: socket"); ! 59: exit(4); ! 60: } ! 61: if (bind(s, &sin, sizeof (sin), 0) < 0) { ! 62: perror("gettable: bind"); ! 63: exit(5); ! 64: } ! 65: bcopy(hp->h_addr, &sin.sin_addr, hp->h_length); ! 66: sin.sin_port = sp->s_port; ! 67: if (connect(s, &sin, sizeof (sin), 0) < 0) { ! 68: perror("gettable: connect"); ! 69: exit(6); ! 70: } ! 71: fprintf(stderr, "Connection to %s opened.\n", host); ! 72: sfi = fdopen(s, "r"); ! 73: sfo = fdopen(s, "w"); ! 74: if (sfi == NULL || sfo == NULL) { ! 75: perror("gettable: fdopen"); ! 76: close(s); ! 77: exit(1); ! 78: } ! 79: hf = fopen(outfile, "w"); ! 80: if (hf == NULL) { ! 81: fprintf(stderr, "gettable: "); perror(outfile); ! 82: close(s); ! 83: exit(1); ! 84: } ! 85: fprintf(sfo, QUERY); ! 86: fflush(sfo); ! 87: while (fgets(buf, sizeof(buf), sfi) != NULL) { ! 88: len = strlen(buf); ! 89: buf[len-2] = '\0'; ! 90: if (equaln(buf, "BEGIN", 5) || equaln(buf, "END", 3)) { ! 91: continue; ! 92: } ! 93: if (equaln(buf, "ERR", 3)) { ! 94: fprintf(stderr, "gettable: hostnames error: %s", buf); ! 95: continue; ! 96: } ! 97: fprintf(hf, "%s\n", buf); ! 98: } ! 99: fclose(hf); ! 100: fprintf(stderr, "Host table received.\n"); ! 101: close(s); ! 102: fprintf(stderr, "Connection to %s closed\n", host); ! 103: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.