Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Dirección IP de Internet

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Dirección IP de Internet Responder citando

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..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Hola Cesar,yo te podria decir como la obtengo de un router la direccion IP dinamica un saludo........
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

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..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: No me funciona Responder citando

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
Mensaje    Asunto: Responder citando

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();

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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 Confused

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

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

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

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
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
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


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.