/* Code by |WARL0RD|
 *  http://warlord.nologin.org
 */
   
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <netdb.h>
#include <errno.h>

#define VERSION "0.01"

/***************************************************/

void sighandler(int pid) {
int i,status;
i=waitpid(-1,&status,0);
return;
}

/**************************************************/

void usage() {
printf("Use: massresolv ip filename\n");
exit(1);
}

/***************************************************/

int main(int argc, char **argv) {
struct sockaddr_in nptr;
struct hostent *hp;
char host[16],filename[16];
int i=0;
unsigned int ip1, ip2, ip3, ip4;
FILE *fp;

if(argc<3) usage();

printf("\nLame stupid class C IP massresolver.\n");
printf("Code by |WARL0RD|\n");
printf("Version: %s\n",VERSION);
printf("warlord@nologin.org\n");
printf("12/21/01\n\n");

signal(SIGCHLD,sighandler);

snprintf(filename,16,argv[2]);
filename[15]='\0';
if((fp = fopen(filename,"a"))==NULL)
  {
    perror("Couldn't open file.\n");
    exit(1);
  }

sscanf(argv[1],"%d.%d.%d.%d",&ip1,&ip2,&ip3,&ip4);
if( (ip1<0 || ip1>255) || (ip2<0 || ip2>255) || (ip3<0 || ip3>255) )
  {
    printf("Enter a valid IP.\n");    
    exit(-1);
  }
for(i=0;i<255;i++)
  {
    sprintf(host,"%d.%d.%d.%d",ip1,ip2,ip3,i);
    nptr.sin_addr.s_addr = inet_addr(host);
    if((hp = gethostbyaddr((char*)&nptr.sin_addr,sizeof(nptr.sin_addr),AF_INET))==NULL)
      {        
         continue;
      }
  printf("\nHostname for %s: %s\n\twith aliases: ",host,hp->h_name);
  fprintf(fp,"\nHostname for %s: %s\n\twith aliases: ",host,hp->h_name);
  while(*hp->h_aliases) 
    {
      printf("\n\t%s",*hp->h_aliases); 
      fprintf(fp,"\n\t%s",*hp->h_aliases++); 
    }
  fflush(stdout);
  }
fclose(fp);
exit(0);
}
