Diagrama de flujo:
Aca indicamos brevemente como se evaluo este problema, con este
diagrama de flujo
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 */
}
/* 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.