DOCUMENTACION:
---------------------------------------------------------------
 

Diagrama de flujo:

Aca indicamos brevemente como se evaluo este problema, con este
diagrama de flujo



   Diagrama de flujo del programa.


main()
{
    int k;
    buscar_localhost();       /* busca la identidad de la maquina */
    leer_archivo_ip_txt()/* lee el archivo ip.txt, donde esta la*/
                       /*informacion de las direcciones ip a buscar  */
                         /* y las direcciones ip las deja en un buffer */
    contactar_maquinas(); /*Ubica el nombre de la maquina y sus alias */
}
 

void buscar_localhost()
{

/* Esta funcion solo entrega informacion de la maquina  tanto su nombre como su IP */

  gethostname(ThisHost, MAXHOSTNAME);
  printf("Bienvenido!\n Estas corriendo usmhost v1.0\n\n");

  printf("Estas conectado en la maquina: %s\n", ThisHost);  /* entrega en pantalla el nombre dela maquina que uno esta usando */

  if  ( (hp = gethostbyname(ThisHost)) == NULL ) {
    fprintf(stderr, "No puedo encontrar la maquina local: %s\n", ThisHost);
    exit(-1);
  }
  bcopy ( hp->h_addr, &(server.sin_addr), hp->h_length);
  printf("    (TCP/Cliente direccion IP es: %s )\n", inet_ntoa(server.sin_addr));  /* transforma el numero a un string */

}

void genera_maquina(char *_ip)
{

/* Esta funcion lo que hace es tomar una direccion IP en la cual se ha colocado en el ultimo byte un asterisco (*) este asterisco se puede reemplazar por cualquier numero que se encuentre entre 1 y 255...y bueno eso es lo que hace esta funcion genera 254 direcciones por cada direccion ingresada y las almacena en un archivo, con nombre maquinas.ip, que solo tiene usos internos. */

  int i=0,num,temp,decenas=0,unidades=0,largo;
  char *ip_temp,*ip_buscar,tmp[20];

   ip_buscar=strtok(_ip,"*");
   for(num=1;num<256;num++){
        fputs(_ip,archivo);
        temp=num;
        if((temp<200) && (temp>99)){
                   fputc('1',archivo);
                   temp-=100;
        }

        if((temp<256) && (temp>199)) {
                   fputc('2',archivo);
                   temp-=200;
        }
        unidades=temp;

        while(unidades>=10){
             decenas++;
             unidades-=10;
        }
        fputc(48+decenas,archivo);
        fputc(48+unidades,archivo);
        decenas=0;
        fputs("\n",archivo);
   }
}
 

void leer_archivo_ip_txt()
{
 /* Lo que hace esta funcion va leyendo el archivo ip.txt en la cual se ingresan las ip a buscar y discrimina si una linea es un omentario o una direccion IP  */

        int c,i;
        FILE *arch_ent,*fopen();
        char linea[140];
      archivo=fopen("maquinas.ip","w");
        if ((arch_ent=fopen("ip.txt","r"))==NULL)
        {
                printf(" Imposible abrir ip.txt \n");
                exit(1);
        }
        numero=0; /*inicializa los mensaje en 0*/

        while (fgets (linea, sizeof (linea), arch_ent) != NULL) {
                      if (linea[0]!='#'){
                                                          /* aca comienza a leer archivo y descarta las lineas de comentario */
                         ip[numero]=strtok(linea,"\n");
                         genera_maquina(ip[numero]);
                         numero++;                                          /* determina cuantas lineas valida hay! */
                      }
        }
        fclose(arch_ent);
      fclose(archivo);
}
 

void contactar_maquinas()
{
 /* Esta es la funcion que comienza a consultar sobe la identidad de cada maquina y sus respectivos alias */
 
     char linea[20],_maquina[20];
     int maquinas=0;
     char **q;

     leer=fopen("maquinas.ip","r");
     grabar=fopen("name.txt","w");
     system("clear");
     printf("%s",t1);
     fputs(t1,grabar);
//     sleep(2);
     printf(" BUSCANDO...\n");
//     sleep(3);
     printf("%s",t2);
     fputs(t2,grabar);
     printf("%s",t3);
     fputs(t3,grabar);
 //    sleep(3);

     while ((fgets (linea, sizeof (linea), leer)) != NULL) {

                 maquinas++;

                 direccion=strtok(linea,"\n");

                 addr.sin_addr.s_addr = inet_addr(direccion);

                 if ((hp = gethostbyaddr((void *)&addr.sin_addr.s_addr,sizeof(addr.sin_addr.s_addr),AF_INET)) == NULL) {
                                           maquinas--;
                 }
                 else {
                        strcpy(_maquina,"  ");
                        strcat(_maquina,direccion);
                        strcat(_maquina," ----> ");
                        strcat(_maquina,hp->h_name);
                        strcat(_maquina,"\n");
                        fputs(_maquina,grabar);
           printf("%4d.- %s",maquinas,_maquina);

      /* Imprime los alias que pilla  */
   for ( q = hp->h_aliases; *q!=NULL; q++ ){
                               printf("ALIAS= %s\n ",*q);
                                      fputs("  ALIAS= ",grabar);
                                      fputs(*q,grabar);
                                      fputs("\n",grabar);
                 }
                 }
     }

     fclose(grabar);
     fclose(leer);
}

**********************************************  atte. Sergio correa
 

NOTA: En la implementación del programa en la obtencion del alias de cada maquina hubo un problema...que en la estructura no se almacenaban los alias requeridos para el correcto funcionamiento de este programa, ya que solo entrega el alias de la maquina en la cual uno esta conectado.