rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
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);
}