#include #include #include #include #include char *nameserver; in_addr_t in_addr, in_addr_end; in_addr_t maxclc(in_addr_t x) { unsigned char octet[4]; in_addr_t ret; memcpy(octet, &x, 4); octet[3] = 0xff; memcpy(&ret, octet, 4); return ret; } main(int c, char **v) { int opt, delay = 0; char sysbuf[128]; char *addr, *addr_end; if (c < 2) goto usage; while ((opt = getopt(c, v, "d:ns:")) != -1) switch (opt) { case 'd': delay = atoi(optarg); case 'n': /* desired syntax, e.g. -ns */ break; case 's': nameserver = optarg; break; } if (c <= optind) { usage: fprintf(stderr, "usage: %s [-d microsecond delay] -ns nameserver class_c\n" "ex: %s -ns 10.0.0.1 10.1.1.0 (scan 10.1.1.0-255 using 10.0.0.1 DNS)\n", v[0], v[0]); exit(1); } in_addr = inet_addr(v[optind]); in_addr_end = maxclc(in_addr); addr = strdup(inet_ntoa(in_addr)); addr_end = strdup(inet_ntoa(in_addr_end)); fprintf(stderr, "Starting address: %s\n", addr); fprintf(stderr, "Ending address: %s\n", addr_end); int i=1; // while (i < 3) { while (strcmp(addr, addr_end) != 0) { unsigned char octet[4]; sprintf(sysbuf, "/usr/bin/host -t a %.20s %.20s | /usr/bin/fgrep -v NXDOMAIN", addr, nameserver != NULL ? nameserver : ""); system(sysbuf); free(addr); memcpy(octet, &in_addr, 4); octet[3]++; memcpy(&in_addr, octet, 4); addr = strdup(inet_ntoa(in_addr)); if (delay) usleep(delay); } /*octet[2]++; i++; } */ #if resolve_bcast sprintf(sysbuf, "/usr/bin/host -t %.20s %.20s | /usr/bin/fgrep -v NXDOMAIN", addr, nameserver != NULL ? nameserver : ""); system(sysbuf); #endif free(addr); free(addr_end); exit(0); }