/* coded by polos */

#include <stdio.h>

FILE *iplist;
char buffer[200];


main(int argc,char *argv[]) {

   if(argc<2) {
       ayuda();
   }

   if(argc<3) {
       printf("Falta selecciona la clase: -a , -b o -c ");
       exit(1);
   }

   if(argc<4) {
       printf("Falta seleccionar un archivo de salida\n");
       exit(1);
   }

   if(strlen(argv[3])>20) {
       printf("Elija un nombre de archivo mas corto\n");
       exit(1);
   }

   if(strlen(argv[2])>4) {
       printf("No es una opcion disponible\n");
       exit(1);
   }

   if(strlen(argv[1])>16) {
       printf("Verifique la ip ingresada\n");
       exit(1);
   }

   iplist=fopen(argv[3],"w");

   if(strstr(argv[2],"-c")) {
       sprintf(buffer,"%s",argv[1]);
       checkea(buffer,2);
       generador(argv[1],1);
   }
   else if (strstr(argv[2],"-b")) {
       sprintf(buffer,"%s",argv[1]);
       checkea(buffer,1);
       generador(argv[1],2);
   }
   else if (strstr(argv[2],"-a")) {
       sprintf(buffer,"%s",argv[1]);
       checkea(buffer,0);
       generador(argv[1],0);
   }
}

generador(char getip[100],int a) {
int i;

   printf("Generando ip..... Espere\n");

   if(a==1) {
       for(i=0;i<255;i++) {
           sprintf(buffer,"%s.%d",getip,i);
           fprintf(iplist,"%s\n",buffer);
       }
   }

   if(a==2) {
       int e=0;

       while(e<255) {
           for(i=0;i<255;i++) {
               sprintf(buffer,"%s.%d.%d",getip,e,i);
               fprintf(iplist,"%s\n",buffer);
           }
           e++;
       }
   }

   if(a==0) {
       int e=0;
       int s=0;

       while(s!=255) {
           for(e=0;e<255;e++) {

               for(i=0;i<255;i++) {
                   sprintf(buffer,"%s.%d.%d.%d",getip,s,e,i);
                   fprintf(iplist,"%s\n",buffer);
               }
           }
           s++;
       }
   }
   fclose(iplist);
}



ayuda() {
   printf("IP Generator ........ C0ded by polos\n");
   printf("Clase A:  ./genera 200 -a output-file\n ");
   printf("Clase B:  ./genera 200.10 -b output-file\n");
   printf("Clase C:  ./genera 200.10.23 -c output-file\n");
   exit(1);
}

checkea(char *buffe,int test) {
int e=0;
int a=0;

   for(a=0;a<(strlen(buffer));a++) {
       if(buffer[a]=='.') {
       e++;
       }
   }

   if(test == e) {
       return 1;
   }
   else {
       printf("La ip dada no corresponde con la clase seleccionada\n");
       exit(1);
   }
}