 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 22 Feb, 2005 6:26 pm Asunto: Dirección IP de Internet |
|
|
bien la pregunta, es la siguiente, la direccion IP de manera Local, dentro de este foro, existe la solucion, pero Quisiera, encontrar la Direccion IP de Internet, que se tiene en estos momentos, buscando en la red, encontre el siguiente codigo..
de la pagina francesa, que marca la direccion IP de Internet, pero lo que realmente, hace es ir a un servidor y el servidor me reenvia la direccion IP ,
la pregunta es, existe alguna manera de hacerlo, sin que tenga que depender de un servidor, para que me retorne la direcion IP de Internet
pongo el codigo, para que uds lo vean
| Código: | /*================= Pour extraire la première adresse IP trouvée dans une chaine ================*/
char * Extraire_IP(char * Chaine)
{
char Copie1[1024], Copie2[1024], Copie3[1024];
sprintf((CHAR *)Copie1, "%s", strstr(Chaine, "<B> "));
sprintf((CHAR *)Copie2, "%s", Right((CHAR *)Copie1, strlen((CHAR *)Copie1) - strlen("<B> ")));
sprintf((CHAR *)Copie3, "%s", strstr((CHAR *)Copie2, " </B>"));
return Left((CHAR *)Copie2, strlen((CHAR *)Copie2) - strlen((CHAR *)Copie3));
}
/*=============================== Pour récupérer votre IP Internet ==============================*/
char * IP_Internet()
{
SOCKET W_IP;
IN_ADDR Adresse;
SOCKADDR_IN SockAddrIn;
HOSTENT * Hote;
WSADATA WSAData;
char Buffer[1024] = "";
static char IP;
WSAStartup(0x0202, &WSAData);
W_IP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//Hote = gethostbyname("www.facultyof1000.com");
Hote = gethostbyname("www.edpsciences.com");
memcpy(&Adresse, Hote -> h_addr, Hote -> h_length);
SockAddrIn.sin_family = AF_INET;
SockAddrIn.sin_port = htons(80);
SockAddrIn.sin_addr = Adresse;
connect(W_IP, (SOCKADDR *)&SockAddrIn, sizeof(SockAddrIn));
//sprintf(Buffer, "%s", "GET http://www.facultyof1000.com/whatsmyip.asp HTTP/1.0\n\n"); // la requete http
sprintf(Buffer, "%s", "GET http://www.edpsciences.com/htbin/ipaddress HTTP/1.0\n\n"); // la requete http
send(W_IP, Buffer, strlen(Buffer), 0);
recv(W_IP, Buffer, sizeof(Buffer), 0);
closesocket(W_IP);
WSACleanup();
// sprintf(&IP, "%s", Extraire_IP(Buffer));
// Modificacion, para extraer la direccion
// mostrar la direccion IP de Internet
ShowMessage(Buffer);
// return &IP;
} |
Digo la opcion es no depender de un servidor de Internet, ya que si este se cae o se elimina, la direccion IP no puede ser retornada..
saludos.. _________________
 |
|
| Volver arriba |
|
 |
Manuel H.C. Lt JG


Registrado: 20 Ago 2002Mensajes: 61Ubicación: Madrid (España)
|
Publicado: Mar 22 Feb, 2005 7:09 pm Asunto: |
|
|
| Hola Cesar,yo te podria decir como la obtengo de un router la direccion IP dinamica un saludo........ |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 22 Feb, 2005 7:14 pm Asunto: |
|
|
Bien se aceptan propuestas, el chiste, es lo siguiente,
conectarse a internet, no importa de donde, puede ser desde las siguietnes conexiones
DialUp - llamada telefonica al servicio
Router - con banda ancha todo el tiempo
Cable/mode, conexion al servidor.. banda ancha todo el tiempo.
vamos lo importane es que se detecte la direccion IP de internet, que esta asignada en ese momento, al ordenador, para posteriores, eventos..
saludos
alguien tiene mas ideas..
En el caso del router, tambien es una pagina web, a la que se conecta, que es al servidor de la compañia, que te brinda el servicio, igual con el modem, si es asi, la solucion es la unica que tengo..
es decir el codigo.. _________________
 |
|
| Volver arriba |
|
 |
mopa Cmdr

Registrado: 29 Jun 2004Mensajes: 145
|
Publicado: Jue 24 Feb, 2005 11:01 am Asunto: |
|
|
El problema es solo cuando existe una red local y la maquina tiene una ip privada.
En los casos de DialUp y ModemCable si utilizas cualuiqe metodo para sacar la ip de la maquina conseguiras la buena de internet, ya que normalmente Dialup y modemCable utilizan DHCP y por lo tanto tu equipo al conectar a internet obtiene una ip valida.
Sin embargo, cuando utilizamos un router y tenemos una red local con ips privadas.. (192.168...) esos metodos siempre van a devolver esas ips que no son validas en internet, por lo que hay que ingeniarselas para sacar las validas.
Una buena idea es la que comentas que tienes implementada, aunque yo haria la siguiente:
1.- sacar la ip de la puerta de enlace.
2.- Preguntar a la puerta de enlace la ip de interne.
¿como preguntar la ip? ahi ya entra tu ingenio y tambien las caracteristicas de router.. eso es lo malo.. todo depende del tipo de router, o del equipo que haga de router etc. Asi de pronto se me ocurre una conexion al telnet del router y ejecutar los comandos que muestren la ip.
Espero haberte dado una idea general.
Me parece que otras formas no hay.
Un saludo.
mopa |
|
| Volver arriba |
|
 |
Pacman Invitado
|
Publicado: Jue 21 Jul, 2005 8:02 pm Asunto: No me funciona |
|
|
hola estuve intentando con estas funciones para que me dieran la ip asi fuera usando estos servidores pero no me da ose sensillamente no me vota nada asumo que no me conecta o no me responde el servidor, nose realmente.
esta funcion es opcional creo puesto que solamente es una modificacion para extraer la ip sola, ademas no me compilo saco un error en los Rigth
por eso no la puse
[code]/*================= Pour extraire la première adresse IP trouvée dans une chaine ================*/
char * Extraire_IP(char * Chaine)
{
char Copie1[1024], Copie2[1024], Copie3[1024];
sprintf((CHAR *)Copie1, "%s", strstr(Chaine, " "));
sprintf((CHAR *)Copie2, "%s", Right((CHAR *)Copie1, strlen((CHAR *)Copie1) - strlen(" ")));
sprintf((CHAR *)Copie3, "%s", strstr((CHAR *)Copie2, " "));
return Left((CHAR *)Copie2, strlen((CHAR *)Copie2) - strlen((CHAR *)Copie3));
}
/*=============================== Pour récupérer votre IP Internet ==============================*/
asi que puse esto en el evento onclick de un boton
{
SOCKET W_IP;
IN_ADDR Adresse;
SOCKADDR_IN SockAddrIn;
HOSTENT * Hote;
WSADATA WSAData;
char Buffer[1024] = "";
static char IP;
try // hice esto para que no sacara error cuando no tuviera internet
{
WSAStartup(0x0202, &WSAData);
W_IP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//Hote = gethostbyname("www.facultyof1000.com");
Hote = gethostbyname("www.edpsciences.com");
memcpy(&Adresse, Hote -> h_addr, Hote -> h_length);
SockAddrIn.sin_family = AF_INET;
SockAddrIn.sin_port = htons(80);
SockAddrIn.sin_addr = Adresse;
connect(W_IP, (SOCKADDR *)&SockAddrIn, sizeof(SockAddrIn));
//sprintf(Buffer, "%s", "GET http://www.facultyof1000.com/whatsmyip.asp HTTP/1.0\n\n"); // la requete http
sprintf(Buffer, "%s", "GET http://www.edpsciences.com/htbin/ipaddress HTTP/1.0\n\n"); // la requete http
send(W_IP, Buffer, strlen(Buffer), 0);
recv(W_IP, Buffer, sizeof(Buffer), 0);
closesocket(W_IP);
WSACleanup();
// sprintf(&IP, "%s", Extraire_IP(Buffer));
// Modificacion, para extraer la direccion
// mostrar la direccion IP de Internet
ShowMessage(Buffer);
} catch(...){}
}
ademas tengo dudas con esto que hace GET, de verdad se necesita, como hago para que me muestre la ip, es que no me funciono que hice mal?.
chao y gracias
sprintf(Buffer, "%s", "GET http://www.edpsciences.com/htbin/ipaddress HTTP/1.0\n\n"); |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 21 Jul, 2005 9:40 pm Asunto: |
|
|
Intenta con estas mismas funciones, pero ahora modificadas
| Código: |
char * Extraire_IP(char * Chaine)
{
char Copie1[1024], Copie2[1024], Copie3[1024];
sprintf((CHAR *)Copie1, "%s", strstr(Chaine, "<B> "));
sprintf((CHAR *)Copie2, "%s", RightStr((CHAR *)Copie1, strlen((CHAR *)Copie1) - strlen("<B> ")));
sprintf((CHAR *)Copie3, "%s", strstr((CHAR *)Copie2, " </B>"));
return LeftStr((CHAR *)Copie2, strlen((CHAR *)Copie2) - strlen((CHAR *)Copie3)).c_str();
}
//-------------------------------------------------------------
char * IP_Internet()
{
SOCKET W_IP;
IN_ADDR Adresse;
SOCKADDR_IN SockAddrIn;
HOSTENT * Hote;
WSADATA WSAData;
char Buffer[1024] = "";
static char IP;
Application->ProcessMessages();
try
{
WSAStartup(0x0202, &WSAData);
W_IP = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
Hote = gethostbyname("www.edpsciences.com");
memcpy(&Adresse, Hote -> h_addr, Hote -> h_length);
SockAddrIn.sin_family = AF_INET;
SockAddrIn.sin_port = htons(80);
SockAddrIn.sin_addr = Adresse;
connect(W_IP, (SOCKADDR *)&SockAddrIn, sizeof(SockAddrIn));
sprintf(Buffer, "%s", "GET http://www.edpsciences.com/htbin/ipaddress HTTP/1.0\n\n"); // la requete http
send(W_IP, Buffer, strlen(Buffer), 0);
recv(W_IP, Buffer, sizeof(Buffer), 0);
closesocket(W_IP);
WSACleanup();
sprintf(&IP, "%s", Extraire_IP(Buffer));
return &IP;
}catch(...)
{
return NULL;
}
}
|
y una manera de tomar la IP seria la siguiente
| Código: | AnsiString Ip_de_Internet = IP_Internet(); |
_________________
 |
|
| Volver arriba |
|
 |
Crandel Lt


Registrado: 31 May 2005Mensajes: 94Ubicación: Argentina
|
Publicado: Sab 23 Jul, 2005 5:46 am Asunto: |
|
|
Hola Cesar, se me acaba de ocurrir que lo podrias hacer con un trace route, con la lista te fijas donde deja de ser ip privada y esa es tu ip pública.
Lo acabo de probar y a mi no me funciono
en realidad depende del equipo que haga de salida si deja su marca o no.
por ahi te sirve. _________________ Crandel
"hay 10 tipos de personas, las que ven en binario y las que no"
Angel Zeitoune - Artículo: Generación de eventos en C++Builder |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Sab 23 Jul, 2005 4:00 pm Asunto: |
|
|
En si lo que hace esta funcion, es recuperar la IP, de una pagina html,
| Código: | http://www.edpsciences.com/htbin/ipaddress |
si escribes, la direccion dentro del navegador, te regresa la direccion IP de tu equipo, lo que hace la funcion, es retomar el contenido html, y de el extraer la IP
Esta es la informacion que aparece de la pagina
| Cita: | IP address?
Your IP address is 201.138.32.169 |
_________________
 |
|
| Volver arriba |
|
 |
Crandel Lt


Registrado: 31 May 2005Mensajes: 94Ubicación: Argentina
|
Publicado: Sab 23 Jul, 2005 8:52 pm Asunto: |
|
|
pero si no entedi mal tu idea era no depender de esta página de internet.
Con la idea que comente, no dependes de ninguna pagina ni servidor, porque si uno no te contesta usas cualquier otro. _________________ Crandel
"hay 10 tipos de personas, las que ven en binario y las que no"
Angel Zeitoune - Artículo: Generación de eventos en C++Builder |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|