| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
wildcrue
Registrado: 06 Abr 2006 Mensajes: 45 Ubicación: Guanajuato
| Publicado: 16/04/2006 7:30 am | | | Título: obtener ip |
| Hola, mi idea es hacer un programa en C bajo windows el cual al abrirlo te muestre tu dirección ip, ¿alguien me puede dar una idea? _________________ Atte. Wildcrue |
| | Volver arriba | |  | Hawk
Registrado: 23 Abr 2006 Mensajes: 5
| Publicado: 24/04/2006 9:13 am | | | Título: |
| | Por favor q alguien conteste q a mi tb m interesa!! |
| | Volver arriba | |  | wildcrue
Registrado: 06 Abr 2006 Mensajes: 45 Ubicación: Guanajuato
| Publicado: 24/04/2006 3:07 pm | | | Título: posible solucion |
| Hace poco terminé un programa tipo chat que funciona bien para computadoras que están en red, en este programa pongo un ejemplo de como obtener una ip ejecutando dentro del programa un .bat, el cual manda lo generado por sus comandos a un .txt el cual a su vez es abierto en el programa y renombrado posteriormente, les pongo el programa para que lo chequen, esta hecho en Microsoft Visual C++:
Codigo del .cpp:
| Código: | #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <iostream.h> #include <windows.h> #include <time.h> #include "chat4.h" #include "chat4a.h"
int conts=0; char dat1[20]={' '};
//Contraseña de administrador=admin
void main (void) { //Inicio del clock clock_t fin; presentacion(); tusuario(); chat(); //Clicks del reloj convertidos a segundos fin=clock(); MessageBox(NULL,"Gracias por haber utilizado este software\nhttp://wildcrue.superihost.com", "Saliendo del programa", NULL); printf( "\n\nUsted estuvo en el programa durante: %d segundos\n\n", fin/CLK_TCK); system("pause"); } |
Codigo de chat4.h:
| Código: | extern int conts; extern char dat1[20]; // Prototipos void presentacion (void); //MENU void tusuario (void); //ABRIR Y CERRAR ARCHIVOS FILE *aopen(void); FILE *ropen(void);
//TIPOS DE USUARIOS void nuser (FILE *); int luser (FILE *); void closea (FILE *); void leerusuarios (FILE *);
//AUTENTIFICAR ADMINISTRADOR void admin (void);
//DEL CHAT void chat (void);
//Perfiles void listado (FILE *); void profiles (void);
struct datos { char usuario[50], arc[50]; char pass[50], nombre[100], pt[100], car[100], dom[100], email[50]; int edad, calificacion, semestre; };
//Función de presentacion, incluye impresion de hora y fecha void presentacion (void) { printf( "\n\n\t\t\t----------------\n"); printf( "\t\t\t| |\n"); printf( "\t\t\t| |\n"); printf( "\t\t\t| -----------\n"); printf( "\t\t\t| | \n"); printf( "\t\t\t| | \n"); printf( "\t\t\t| | \n"); printf( "\t\t\t| | \n"); printf( "\t\t\t| | \n"); printf( "\t\t\t| -----------\n"); printf( "\t\t\t| |\n"); printf( "\t\t\t| | H A T v1.0\n"); printf( "\t\t\t----------------\n"); MessageBox(NULL,"Bienvenido a la version 1.0 del Chat\nDudas y comentarios a: ","Pantalla de bienvenida",NULL); //Para la hora time_t t; t = time(NULL); printf("\t\t\t%s", asctime(localtime(&t))); printf( "\n\t\t\tPresione cualquier tecla para continuar"); getch(); system("cls"); }
// MENU void tusuario (void) { char select=' '; int conta=0; while( conta==0 ) { printf( "\nSeleccione su tipo de usuario:\n\n"); printf( "a) Usuario nuevo\n"); printf( "b) Usuario ya registrado (loggearse)\n"); printf( "c) Administrador: Checar base de datos\n"); printf( "d) Usuario que desea navegar por los perfiles:\n"); printf( "e) Salir del sistema\n"); printf( "f) Limpiar pantalla\n"); printf( "Escriba el inciso que le corresponda: "); select=getche(); if( select=='a' || select=='A' ) { //Usuario nuevo printf("\nHa elegido - Usuario nuevo\n"); FILE *apf=NULL; FILE *apf2=NULL; system("cls"); apf=aopen(); nuser(apf); closea(apf); } if( select=='b' || select=='B' ) { //Usuario ya registrado printf( "\nHa elegido loggearse!\n"); FILE *apf=NULL; char resp=' '; int dam=0; system("cls"); apf=ropen(); dam= luser(apf); closea(apf); conts++; if( dam==1 ) { //Guardar ip char des=' '; printf( "Por la seguridad de nuestro servidor es necesario que obtengamos informacion\n"); printf( "de su ordenador para evitar problemas tales como fraudes o mal uso del soft\n"); printf( "Desea continuar? s= para continuar || n= para salir del programa\n"); des=getche(); if(des=='s'|| des=='S') { clock_t fini, ini; ini=clock(); printf( "\nA decidido continuar con el proceso, espere unos instantes...\n"); system("ip.bat"); printf( "\nInformacion recabada con exito!\n"); fini=clock(); printf( "El programa tardo %d seg. en recabar la informacion\n", (fini-ini)/CLK_TCK); FILE *apf=fopen("ip.txt","r"); char cad[800]={' '}; char letra=' '; int i=0, cont=0; while(!feof(apf)) { letra=getc(apf); cad[i]=letra; printf("%c",letra); i++; } FILE *apf2=fopen("private.txt","a"); for(cont=0;cont<=20;cont++) { putc(dat1[cont],apf2); } for(cont=0;cont<=i;cont++) { putc(cad[cont],apf2); } fclose(apf); fclose(apf2); system("pause"); system("cls"); } if(des=='n' || des=='N') { printf( "\nEl programa se cerrara..."); MessageBox(NULL,"Gracias por utilizar este software!", "Saliendo...",NULL); exit(0); } //Fin de guardar ip printf( "\nDesea ir al chat? >> s=ir a chat | n=ir al menu\nRespuesta= "); resp=getche(); if( resp=='s' || resp=='S') { printf( "\n"); conta++; } if(resp=='n' || resp=='N') { printf( "\n"); } } } //Salir del programa if( select=='e' || select=='E' ) { printf( "\nSaliendo del sistema\n"); system( "pause"); exit(0); } //Ver usuarios y contraseñas if( select=='c' || select=='C') { FILE *apf=NULL; admin(); apf=ropen(); leerusuarios(apf); closea(apf); } //Navegar por los perfiles if( select=='d' || select=='D') { printf("\nHa decidido navegar por los perfiles ...\nCargando base de datos...\n"); FILE *apf=NULL; apf=ropen(); listado(apf); closea(apf); profiles(); } if( select=='f' || select=='F') { printf( "\nHa elegido limpiar pantalla...\n"); system("pause"); system("cls"); } } }
//Abrir dat de usuarios para escritura FILE *aopen (void) { FILE *apf=fopen("user.dat", "r+b"); if(apf==NULL) { printf( "\nNo se pudo abrir el .dat\n"); system("pause"); exit(0); } return apf; }
//Abrir dat de usuarios para lectura FILE *ropen (void) { FILE *apf=fopen("user.dat", "rb"); if(apf==NULL) { printf( "\nNo se pudo abrir el .dat\n"); printf( "\nEl programa se cerrara!\n"); system("pause"); exit(0); } return apf; }
//Funcion para generar nuevos usuarios void nuser (FILE *apf) { datos user, usem; char resp=' '; int cont=0; strcpy(user.pass," "); strcpy(user.usuario, " "); strcpy(user.email, " "); strcpy(user.car, " "); strcpy(user.dom, " "); strcpy(user.nombre, " "); strcpy(user.pt, " "); user.calificacion=0; user.edad=0; user.semestre=0; printf( "Ingrese su nombre de usuario: "); gets(user.usuario); while(!feof(apf)) { fread(&usem, sizeof(datos), 1, apf); if (strcmp(user.usuario, usem.usuario)==0) { printf( "Nombre de usuario en existencia, el programa se cerrara\n"); system("pause"); exit(0); fseek(apf, -sizeof(datos), SEEK_CUR); break; } } fflush(stdin); printf( "Password: "); gets(user.pass); fwrite(&user, sizeof(datos), 1, apf); fclose(apf); //Crear perfil printf( "\nA continuacion vuelva a escribir su nombre de usuario pero escribale\nal final .dat, como por ejemplo paco.dat: "); gets(user.arc); FILE *apf3=fopen(user.arc,"wb"); printf( "\nA continuacion responda las siguientes preguntas para crear su perfil:\n"); printf( "Escriba su nombre: "); fflush(stdin); gets(user.nombre); printf( "Pasatiempos: "); fflush(stdin); gets(user.pt); printf( "Que carrera estudia?: "); fflush(stdin); gets(user.car); printf( "Escriba su direccion de email: "); fflush(stdin); gets(user.email); printf( "En que calle vive?: "); fflush(stdin); gets(user.dom); printf( "Que edad tiene?: "); fflush(stdin); scanf( "%d", &user.edad); printf( "En que semestre va?: "); fflush(stdin); scanf( "%d", &user.semestre); printf( "Qué calificacion le da al Chat v1.0? (del 1 al 10): "); fflush(stdin); scanf( "%d", &user.calificacion); if(user.calificacion<=6) { printf( "\nCuanto lamento que me califiques asi!! Trataremos de mejorar\n"); } if(user.calificacion>6&&user.calificacion<=10) { printf( "\nQue bueno que te gusto el chat!, seguiremos mejorandolo!\n"); } if(user.calificacion>10) { printf( "\nTe saliste del rango, pero gracias!\n"); } printf( "\nPerfil creado con exito! Puedes proceder a loggearte!\n"); fwrite(&user,sizeof(datos),1,apf3); fclose(apf3); }
//Funcion para cerrar archivos void closea (FILE *apf) { fclose(apf); }
//Funcion que loggea al usuario int luser (FILE *apf) { datos lusers; char dat2[20]; int cont=0; printf( "Ingrese su nombre de usuario: "); gets(dat1); while(!feof(apf)) { fread(&lusers, sizeof(datos), 1, apf); if( strcmp(dat1, lusers.usuario) == 0) { printf( "\nNombre de usuario correcto\n"); printf( "Ingrese su contraseña: "); gets(dat2); if( strcmp(dat2, lusers.pass) ==0) { printf( "Contraseña correcta!, ahora puede accesar al chat...\n"); cont++; return 1; fseek(apf, -sizeof(datos), SEEK_CUR); break; } else { printf( "Contraseña incorrecta\n"); system("pause"); exit(0); } fseek(apf, -sizeof(datos), SEEK_CUR); break; } } printf( "Nombre de usuario invalido!\n"); return 0; }
//Para leer usuarios y contraseñas void leerusuarios(FILE *apf) { datos rusers; while(!feof(apf)) { fread(&rusers, sizeof(datos), 1, apf); if(feof(apf))break; printf( "Usuario\t\tPassword\n"); printf( "%s\t\t", rusers.usuario); printf( "%s\n", rusers.pass); printf( "\n"); } }
//Autentificacion del administrador void admin (void) { char rec[11]={' '}; char correcta[11]="admin"; printf( "\nIngrese contraseña de administrador:"); fflush(stdin); gets(rec); if( strcmp(rec,correcta)==0) { printf( "\nContraseña correcta!\n"); } if(strcmp(rec,correcta)!=0) { printf( "Contraseña no valida!\nEl programa se cerrara!!\n"); system("pause"); exit(0); } } //Perfiles void listado (FILE *apf) { datos pusers; int i=1; printf( "La lista esta ordenada del primero al ultimo registrado\n"); while(!feof(apf)) { fread(&pusers,sizeof(datos),1,apf); if(feof(apf))break; printf( "Usuario no. %d: ", i++); printf( "%s\n", pusers.usuario); } }
void profiles (void) { datos musers; printf( "\nIntroduzca el nombre del usuario del que desea ver perfil\n(recuerde al final poner .dat, ejemplo paco.dat): "); gets(musers.arc); FILE *apf4=fopen(musers.arc,"rb"); while(!feof(apf4)) { fread(&musers,sizeof(datos),1,apf4); if(feof(apf4))break; printf( "Usuario: %s\n", musers.usuario); printf( "Nombre: %s\n", musers.nombre); printf( "Edad: %d\n", musers.edad); printf( "Email: %s\n", musers.email); printf( "Carrera: %s\n", musers.car); printf( "Semestre: %d\n", musers.semestre); printf( "Domicilio: %s\n", musers.dom); printf( "Calificacion que le dio al chat: %d", musers.calificacion); printf( "\nFin de la lectura de perfil...\a\n"); system("pause"); } } |
Codigo de chat4a.h:
| Código: | extern x=0; //Prototipos // Separar mensajes del chat void separacion(void);
//Leer informacion del chat FILE *leerdata(void); void mostrardata(FILE *, char nick[10]); void cerrardata(FILE *);
//Escribir en el chat FILE *abrirchat(void); void escribirenchat (FILE *, char *nick);
//Cerrar el chat void cerrarchat (FILE *);
//Limpiar chat void administrador (void); int contrasena (void); FILE *abrirdat (void); void limpiardat (FILE *); void cerrardat (FILE *);
int decision (void);
struct chater { char mensaje[100]; };
//Ingrese de nick y funcion que controla al chat void chat (void) { FILE *chat=NULL; FILE *leer=NULL; int asd=0, x=0; char nick[10]={' '}; printf( "Ingrese su nick: "); gets(nick); while(asd==0) { chat=abrirchat(); escribirenchat(chat, nick); cerrarchat(chat); separacion(); leer= leerdata(); mostrardata(leer, nick); separacion(); cerrardata(leer);
asd=decision(); } }
//Funcion que abre al chat FILE *abrirchat (void) { FILE *chat=fopen("chat.dat", "ab"); if(chat==NULL) { printf( "Error: No se pudo abrir el .dat\n"); system("pause"); exit(0); } return chat; }
//Funcion que escribe en el chat void escribirenchat(FILE *chat, char *nick) { chater captura; strcpy(captura.mensaje, " "); fflush(stdin); puts(nick); gets(captura.mensaje); printf( "\n" ); fwrite(&captura, sizeof(chater), 1, chat); }
//Funcion que cierra al chat void cerrarchat (FILE *chat) { fclose(chat); }
//Decision de menu durante el chat int decision (void) { char letra=' '; char letra2=' '; printf( "Menu>> c=Limpiar pantalla - s=Seguir con chat - e=salir del chat - a=admin\n"); printf( "Ingrese la letra que corresponda a su decision: "); letra=getche(); if(letra=='s' || letra=='s') { printf("\n"); return 0; } if(letra=='c' || letra=='C') { system("cls"); return 0; } if(letra=='e' || letra=='E') { return 1; } if(letra=='a' || letra=='A') { FILE *limpiar=NULL; FILE *leer=NULL; int correcto=0; administrador(); correcto= contrasena(); if(correcto==1) { limpiar= abrirdat(); limpiardat(limpiar); cerrardat(limpiar); printf( "\nDesea continuar en el chat?"); printf( "\nEscriba su opcion (s/n): "); letra2=getche(); if( letra2=='s' ) { printf("\n"); return 0; } if( letra2=='n' ) { printf("\n"); return 1; }
} if(correcto==2) { printf( "\nSeguro que desea continuar en el chat?"); printf( "\nEscriba su opcion (s/n): "); letra2=getche(); if( letra2=='s' || letra2=='S') { printf("\n"); return 0; } if( letra2=='n' || letra2=='N') { printf("\n"); return 1; } } else { printf( "Contraseña incorrecta!...\n"); printf( "\nDesea continuar en el chat?"); printf( "\nEscriba su opcion (s/n): "); letra2=getche(); if( letra2=='s' || letra2=='S') { printf("\n"); return 0; } if( letra2=='n' || letra2=='N') { printf("\n"); return 1; } } } }
struct paleer { char msg[100]; };
//Separacion de los mensajes void separacion(void) { printf( "\n------------------------------------------------\n\n"); }
FILE *leerdata(void) { FILE *leer=fopen("chat.dat", "rb"); if(leer==NULL) { printf( "Error: No se pudo tener acceso al .dat\n"); exit(0); } return leer; }
void mostrardata(FILE *leer, char nick[10]) { paleer tu; int i=0; while(!feof(leer)) { fread(&tu, sizeof(paleer), 1, leer); if(feof(leer))break; printf( "+ %s\n", tu.msg); } }
void cerrardata(FILE *leer) { fclose(leer); }
//Funciones para limpiar chat
void administrador(void) { printf( "\n\n\t\tPrograma de mantenimiento: Solo administradores!\n\n"); }
int contrasena (void) { char introducida[6]={' '}; char correcta[6]="admin"; char decision=' '; int x=0; printf( "Ingrese password: "); gets(introducida); printf( "Usted introdujo: %s\n", introducida); if(strcmp(introducida, correcta)==0 && x==0) { printf( "Qué desea realizar? >>> a=Limpiar chat b=Seguir en el chat"); printf( "\nIngrese el caracter de lo que desea hacer: "); decision=getche(); if( decision=='a' || decision=='A') { return 1; x++; } if( decision=='b' || decision=='B') { return 2; x++; } } else { return 0; } }
FILE *abrirdat (void) { FILE *limpiar=fopen("chat.dat", "wb"); if(limpiar==NULL) { printf( "No se pudo accesar al .dat\n"); exit(0); } return limpiar; }
void limpiardat (FILE *limpiar) { printf( "Borrando .dat ..."); system("cls"); printf( "\n.dat borrado!\n"); }
void cerrardat (FILE *limpiar) { fclose(limpiar); } |
Eso es todo... segun yo el programa si corre bien aunque aqui les pongo una version en donde tengo uno que otro error (creo que de hecho algunos relacionados a variables globales, pero al parecer estos errores no afectan al programa al correr), para que el programa se ejecute bien tambien necesita que el ejecutable comparta carpeta con dos archivos .dat, uno de nombre user y otro de nombre chat, para crearlos basta con en el block de notas abri un nuevo documento y guardarlo como user.dat y como chat.dat y listo...
Tambien requiere que en esa carpeta haya un .bat, para esto hacemos lo mismo que con los .dat (en el block de notas) y al .bat le agregamos el siguiente codigo (en los .dat no se debio haber escrito nada):
| Código: | @echo off ipconfig>ip.txt
|
Este archivo bat se llamara ip.bat ... y listo!, con esto ya no deberian haber problemas... _________________ Atte. Wildcrue |
| | Volver arriba | |  | | gonzalo_s
Registrado: 07 Jun 2005 Mensajes: 40 Ubicación: Santiago
| Publicado: 24/04/2006 8:38 pm | | | Título: |
| Hey, Alguien tiene o puede hacer por motivos pedagogicos una version mas simple del programa, no importa que tenga errores menores pero es para poder aprender a haces ese tipo de cosas. No es que el programa este mal escrito es que dentro de tanto codigo todavia me pierdo. Porfa se agradeceria mucho |
| | Volver arriba | |  | wildcrue
Registrado: 06 Abr 2006 Mensajes: 45 Ubicación: Guanajuato
| Publicado: 25/04/2006 2:48 pm | | | Título: ok |
| A lo mejor te sirve este nuevo codigo el cual sigue tomando la idea de ejecutar un batch durante el proceso del programa y los resultados almacenarlos a un texto, checa al codigo y cualquier duda me avisas:
| Código: | #include <stdio.h> #include <stdlib.h>
void main (void) { printf( "\nPrograma que guarda la ip\n"); system("ip.bat"); printf( "\nInformacion recabada con exito!\n"); system( "pause"); FILE *apf=fopen("ip.txt","r"); char cad[800]={' '}; char dat1[800]={' '}; char letra=' '; int i=0, cont=0; while(!feof(apf)) { letra=getc(apf); cad[i]=letra; printf("%c",letra); i++; } FILE *apf2=fopen("private.txt","a"); for(cont=0;cont<=20;cont++) { putc(dat1[cont],apf2); } for(cont=0;cont<=i;cont++) { putc(cad[cont],apf2); } fclose(apf); fclose(apf2); system("pause"); }
|
Si alguien conoce una manera mas interesante de guardar una ip deberia compartirla! Nos vemos! _________________ Atte. Wildcrue |
| | Volver arriba | |  | gonzalo_s
Registrado: 07 Jun 2005 Mensajes: 40 Ubicación: Santiago
| Publicado: 25/04/2006 8:26 pm | | | Título: |
| Disculpa Wildcrue pero creo que me explique mal, cuando dije una version mas pedagogica del programa me referia al Chat, de todas maneras tu programa esta muy bien  es bien simple, y jamas se me habria ocurrido te felicito gracias de todas maneras |
| | Volver arriba | |  | | wildcrue
Registrado: 06 Abr 2006 Mensajes: 45 Ubicación: Guanajuato
| Publicado: 26/04/2006 2:57 pm | | | Título: okas |
| Gracias gonzalo_s y en cuanto a una version mas pedagogica del chat en un rato que tenga libre le pongo mas notas al programa o igual y hago una version como tu dices, mas simple, te parece bien?, en general la idea de mi chat es ir sobreescribiendo una y otra vez en un archivo .dat, osea es mero manejo de archivos, nos vemos! _________________ Atte. Wildcrue |
| | Volver arriba | |  | mokel
Registrado: 16 May 2006 Mensajes: 6 Ubicación: euskal herria
| Publicado: 17/05/2006 10:02 am | | | Título: |
| en el codigo de wildcrue las ips se guardan en el archivo ip.txt???
eske segun tengo entendido las ejecuciones de system son solo llamadas del cmd no???
edit: probado!!! enorme eso!!! grande!!! _________________ NO FATE, ONLY THE POWER OF WILL |
| | Volver arriba | |  | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 07/06/2006 7:43 am | | | Título: |
| | Código: | #include <stdio.h> #include <stdlib.h> #include <winsock2.h> //Si usas Dev-C++ tienes que linkar libws2_32.a
int saca_ip_local(char *);
int main(int argc, char **argv) {
char ip[20];
saca_ip_local(ip);
if(ip!=NULL) printf("\n\nTU IP es: %s", ip);
return 0;
}
int saca_ip_local(char *ip) { WSADATA wsaData; char *auxiliar=NULL; struct hostent *host=NULL; struct in_addr direccion; int ok=0; auxiliar=malloc(1024);
if (!WSAStartup(MAKEWORD(2, 2), &wsaData)) {
if (gethostname(auxiliar, 1024) != SOCKET_ERROR) {
host = gethostbyname(auxiliar);
if (host != NULL) { memcpy(&direccion, host->h_addr_list[0], sizeof(struct in_addr)); strcpy(ip, inet_ntoa(direccion)); ok=1; } } WSACleanup(); } free(auxiliar);
return ok; }
|
Salu2 
Ultima edición por tonilope el 26/08/2006 2:47 am; editado 2 veces |
| | Volver arriba | |  | | Tori
Registrado: 30 May 2006 Mensajes: 133 Ubicación: Barcelona
| Publicado: 25/06/2006 10:00 pm | | | Título: hipervinculo |
| Si lo que verdadreamente te importaba solo la ip de tu intranet podias haber hecho exclusivamenete un programa con un hipervinculo en la web whatismyip.
Saludos _________________
|
| | Volver arriba | |  | cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 26/06/2006 7:52 am | | | Título: |
| La forma mas practica y quizas mas ortodoxa de conocer la ip local desde C usando librerias es como el codigo posteado por tonilope con muy pocas modificaciones ese programa compilaria tambien en entornos *nix.
S2. |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |