|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)nstest.c 4.1 (Berkeley) 5/12/86"; ! 3: #endif ! 4: ! 5: /* ! 6: * Copyright (c) 1986 Regents of the University of California ! 7: * All Rights Reserved ! 8: */ ! 9: ! 10: #include <sys/types.h> ! 11: #include <sys/socket.h> ! 12: #include <netinet/in.h> ! 13: #include <stdio.h> ! 14: #include <arpa/nameser.h> ! 15: #include <resolv.h> ! 16: ! 17: extern char *inet_ntoa(); ! 18: char *progname; ! 19: FILE *log; ! 20: ! 21: main(argc, argv) ! 22: char **argv; ! 23: { ! 24: register char *cp; ! 25: struct hostent *hp; ! 26: short port = htons(NAMESERVER_PORT); ! 27: char buf[BUFSIZ]; ! 28: char packet[PACKETSZ]; ! 29: char answer[PACKETSZ]; ! 30: int n; ! 31: ! 32: progname = argv[0]; ! 33: _res.options |= RES_INIT|RES_DEBUG|RES_RECURSE; ! 34: while (argc > 1 && argv[1][0] == '-') { ! 35: argc--; ! 36: cp = *++argv; ! 37: while (*++cp) ! 38: switch (*cp) { ! 39: case 'p': ! 40: if (--argc <= 0) ! 41: usage(); ! 42: port = htons(atoi(*++argv)); ! 43: break; ! 44: ! 45: case 'i': ! 46: _res.options |= RES_IGNTC; ! 47: break; ! 48: ! 49: case 'v': ! 50: _res.options |= RES_USEVC|RES_STAYOPEN; ! 51: break; ! 52: ! 53: case 'r': ! 54: _res.options &= ~RES_RECURSE; ! 55: break; ! 56: ! 57: default: ! 58: usage(); ! 59: } ! 60: } ! 61: _res.nsaddr.sin_family = AF_INET; ! 62: _res.nsaddr.sin_addr.s_addr = INADDR_ANY; ! 63: _res.nsaddr.sin_port = port; ! 64: if (argc > 1) ! 65: _res.nsaddr.sin_addr.s_addr = inet_addr(argv[1]); ! 66: if (argc > 2) { ! 67: log = fopen(argv[2],"w"); ! 68: if (log == NULL) perror(argv[2]); ! 69: } ! 70: for (;;) { ! 71: printf("> "); ! 72: fflush(stdout); ! 73: if ((cp = (char *)gets(buf)) == NULL) ! 74: break; ! 75: switch (*cp++) { ! 76: case 'a': ! 77: n = res_mkquery(QUERY, cp, C_ANY, T_A, (char *)0, 0, NULL, ! 78: packet, sizeof(packet)); ! 79: break; ! 80: ! 81: case 'A': ! 82: n = ntohl(inet_addr(cp)); ! 83: putlong(n, cp); ! 84: n = res_mkquery(IQUERY, "", C_IN, T_A, cp, sizeof(long), NULL, ! 85: packet, sizeof(packet)); ! 86: break; ! 87: ! 88: case 'f': ! 89: n = res_mkquery(QUERY, cp, C_ANY, T_UINFO, (char *)0, 0, NULL, ! 90: packet, sizeof(packet)); ! 91: break; ! 92: ! 93: case 'g': ! 94: n = res_mkquery(QUERY, cp, C_ANY, T_GID, (char *)0, 0, NULL, ! 95: packet, sizeof(packet)); ! 96: break; ! 97: ! 98: case 'G': ! 99: *(int *)cp = htonl(atoi(cp)); ! 100: n = res_mkquery(IQUERY, "", C_ANY, T_GID, cp, sizeof(int), NULL, ! 101: packet, sizeof(packet)); ! 102: break; ! 103: ! 104: case 'h': ! 105: n = res_mkquery(QUERY, cp, C_IN, T_HINFO, (char *)0, 0, NULL, ! 106: packet, sizeof(packet)); ! 107: break; ! 108: ! 109: case 'm': ! 110: n = res_mkquery(QUERY, cp, C_IN, T_MX, (char *)0, 0, NULL, ! 111: packet, sizeof(packet)); ! 112: break; ! 113: ! 114: case 'M': ! 115: n = res_mkquery(QUERY, cp, C_IN, T_MAILB, (char *)0, 0, NULL, ! 116: packet, sizeof(packet)); ! 117: break; ! 118: ! 119: case 'n': ! 120: n = res_mkquery(QUERY, cp, C_IN, T_NS, (char *)0, 0, NULL, ! 121: packet, sizeof(packet)); ! 122: break; ! 123: ! 124: case 'p': ! 125: n = res_mkquery(QUERY, cp, C_IN, T_PTR, (char *)0, 0, NULL, ! 126: packet, sizeof(packet)); ! 127: break; ! 128: ! 129: case 's': ! 130: n = res_mkquery(QUERY, cp, C_IN, T_SOA, (char *)0, 0, NULL, ! 131: packet, sizeof(packet)); ! 132: break; ! 133: ! 134: case 'u': ! 135: n = res_mkquery(QUERY, cp, C_ANY, T_UID, (char *)0, 0, NULL, ! 136: packet, sizeof(packet)); ! 137: break; ! 138: ! 139: case 'U': ! 140: *(int *)cp = htonl(atoi(cp)); ! 141: n = res_mkquery(IQUERY, "", C_ANY, T_UID, cp, sizeof(int), NULL, ! 142: packet, sizeof(packet)); ! 143: break; ! 144: ! 145: case 'x': ! 146: n = res_mkquery(QUERY, cp, C_IN, T_AXFR, (char *)0, 0, NULL, ! 147: packet, sizeof(packet)); ! 148: break; ! 149: ! 150: case 'w': ! 151: n = res_mkquery(QUERY, cp, C_IN, T_WKS, (char *)0, 0, NULL, ! 152: packet, sizeof(packet)); ! 153: break; ! 154: ! 155: case '*': ! 156: n = res_mkquery(QUERY, cp, C_IN, T_ANY, (char *)0, 0, NULL, ! 157: packet, sizeof(packet)); ! 158: break; ! 159: ! 160: default: ! 161: printf("a{host} - query T_A\n"); ! 162: printf("A{addr} - iquery T_A\n"); ! 163: printf("f{host} - query T_UINFO\n"); ! 164: printf("g{host} - query T_GID\n"); ! 165: printf("G{gid} - iquery T_GID\n"); ! 166: printf("h{host} - query T_HINFO\n"); ! 167: printf("p{host} - query T_PTR\n"); ! 168: printf("m{host} - query T_MX\n"); ! 169: printf("M{host} - query T_MAILB\n"); ! 170: printf("n{host} - query T_NS\n"); ! 171: printf("s{host} - query T_SOA\n"); ! 172: printf("u{host} - query T_UID\n"); ! 173: printf("U{uid} - iquery T_UID\n"); ! 174: printf("x{host} - query T_AXFR\n"); ! 175: printf("w{host} - query T_WKS\n"); ! 176: printf("*{host} - query T_ANY\n"); ! 177: continue; ! 178: } ! 179: if (n < 0) { ! 180: printf("res_mkquery: buffer too small\n"); ! 181: continue; ! 182: } ! 183: if (log) { ! 184: fprintf(log,"SEND QUERY\n"); ! 185: fp_query(packet, log); ! 186: } ! 187: n = res_send(packet, n, answer, sizeof(answer)); ! 188: if (n < 0) { ! 189: printf("res_send: send error\n"); ! 190: if (log) fprintf(log, "res_send: send error\n"); ! 191: } ! 192: else { ! 193: int f; ! 194: ! 195: f = creat("r", 0644); ! 196: write(f, answer, n); ! 197: (void) close(f); ! 198: if (log) { ! 199: fprintf(log, "GOT ANSWER\n"); ! 200: fp_query(answer, log); ! 201: } ! 202: } ! 203: } ! 204: } ! 205: ! 206: usage() ! 207: { ! 208: fprintf(stderr, "Usage: %s [-v] [-i] [-r] [-p port] hostaddr\n", ! 209: progname); ! 210: exit(1); ! 211: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.