Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: patilanz en 5 Septiembre 2014, 17:53 PM

Título: Obtener la ip de un host
Publicado por: patilanz en 5 Septiembre 2014, 17:53 PM
Hola conseguir hacer lo con este codigo:

Código (cpp) [Seleccionar]
memset(&configs,0,sizeof(configs));
configs.ai_protocol = IPPROTO_TCP;
configs.ai_socktype = SOCK_STREAM;
configs.ai_family = AF_INET;
configs.ai_flags = AI_PASSIVE;

iResult = getaddrinfo("www.pruebasdephp.hol.es","80",&configs,&result);
if(iResult != 0){
string msg = "Can't resolve google";
msg += itoa(iResult);
MessageBox(NULL,msg.c_str(),"Error",MB_ICONERROR);

}else
MessageBox(NULL,inet_ntoa((in_addr &)(result->ai_addr)),"Address",MB_ICONEXCLAMATION);


Usando getaddrinfo() pero aqui se necesita dar el protocolo, flags ...

Código (cpp) [Seleccionar]

params param;
hostent * host;
strcpy_s(param.web,80,"http://www.pruebasdephp.hol.es");
param.port = 80;
//now get the ip
cout << param.web;
host = gethostbyname(param.web);

in_addr addr;
memcpy_s(&addr,sizeof(in_addr),host->h_addr_list[0],host->h_length); // Infraccion de acceso


Aqui al utilizar gethostbyname() me tira un error de infraccion de acceso al copiar la memoria. Poruqe pasa esto?

Saludos
Título: Re: Obtener la ip de un host
Publicado por: Eternal Idol en 5 Septiembre 2014, 17:59 PM
No intente ponerlos en un programa y compilar ... pero a getaddrinfo no le pasas http y a gethostbyname si, ademas deberias SIEMPRE comprobar el valor de retorno, gethostbyname puede devolver NULL en caso de error.
Título: Re: Obtener la ip de un host
Publicado por: patilanz en 5 Septiembre 2014, 19:13 PM
Pues si efectivamente era esto. El http pero porque?
Retornaba NULL pero como lo hice rapido para probar una cosa deje sin escribir un if pensando que funciona bien y que el error esta en memcpy. 1 hora por no poner un if.


Vale gracias resuelto pero porque es tan importante el http?
Título: Re: Obtener la ip de un host
Publicado por: Eternal Idol en 5 Septiembre 2014, 19:15 PM
No es importante, sobra, no es parte del host; es un protocolo, podrias poner ftp:// tambien, no tiene sentido cuando se esta resolviendo un host.
Título: Re: Obtener la ip de un host
Publicado por: patilanz en 5 Septiembre 2014, 19:17 PM
Gracias aqui pongo el codigo que funciona:

Código (cpp) [Seleccionar]
int _tmain(int argc, _TCHAR* argv[])
{ struct params{
char web[80];
int port;
in_addr ip;
};

WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);

params param;
hostent * host;
strcpy_s(param.web,80,"www.pruebasdephp.hol.es");
param.port = 80;
//now get the ip
cout << param.web;
host = gethostbyname(param.web);
if(host == NULL)
cout << "error: " << host;

param.ip = *(struct in_addr *)host->h_addr;
cout << inet_ntoa(param.ip);
getchar();
return 0;
}
Título: Re: Obtener la ip de un host
Publicado por: Eternal Idol en 5 Septiembre 2014, 19:18 PM
Ese codigo sigue siendo incorrecto, mostras en pantalla que fallo gethostbyname pero la ejecucion del programa continua, no podes desreferenciar host si es NULL (cosa que haces en la linea 21).
Título: Re: Obtener la ip de un host
Publicado por: patilanz en 5 Septiembre 2014, 22:58 PM
Bueno ya solo era una prueba  ;D imprimo el error un getchar y return. Asi mejor ? O se puede anadir algo mas? Un log de errores ?