Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: тαптяα en 19 Octubre 2010, 21:51 PM

Título: Problema con winsock
Publicado por: тαптяα en 19 Octubre 2010, 21:51 PM
Bueno es raro esto que me pasa, llevo algo winsock y miren que pasa cuando ejecuto este code:


#include <winsock2.h>
#include <stdio.h>

/*Winsock library linked  :)*/
#pragma comment(lib,"ws2_32.lib")

int main()
{
  WSADATA wsa;
  SOCKET sock;
  struct sockaddr_in local;
  struct hostent *direc;
  int len=0;
  char Buffer[1024];

  //Determinamos la versión, en este caso la 2.0
  WSAStartup(MAKEWORD(2,0),&wsa);
 
  //Creamos el socket
  sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  direc=gethostbyname("www.google.es");
  printf("%s",*direc);
}


Imprimo el puntero a la estructura hostent y sale esto:

Citarwww.l.google.com

Ahora probaré a cambiar la estructura direc por esta:

direc=gethostbyname("www.facebook.com");

Y sale todo como debería salir.

¿alguna causa?  ;D
Título: Re: Problema con winsock
Publicado por: 16BITBoy en 19 Octubre 2010, 22:39 PM
Si no me equivoco, prueba a hacerle el gethostbyname a esa dirección que te sale, y saldrá lo que tiene que salir, y sino vuelve a intentar con lo que te de :D

Es algo relacionado con DNS, nombres canónicos creo que se le llamaba.
Título: Re: Problema con winsock
Publicado por: тαптяα en 19 Octubre 2010, 22:52 PM
Bueno es lo que me suponía redirecciones y DNS cosas que van fuera de mi dominio jajajjaa
Título: Re: Problema con winsock
Publicado por: ☺BADMAN en 23 Octubre 2010, 04:08 AM
aqui te dejo algo que te pueda funcionar:

bool RastrearDominio(char*IP, char* Dominio, int Port)
{
char IPD[20]=" ";
in_addr *o;
hostent* hp;
hp = gethostbyname(Dominio);
sprintf(IPD,"%s", inet_ntoa(*( (struct in_addr *)hp->h_addr)));
if( P2P->EsacnearIPX(IPD,Port))
{
 
  strcpy(IP,IPD);
  return true;
}
else
  strcpy(IP,"NULL");

return false;
}

  gethostbyname debuelve un estrcuct tipo hosten no un LPCSTR y P2P->EscanearIPx(IPD,Port) es un code extraño que quien sabe que hace XD (http://www.denunciando.com/images/icons/pixelSHERLOCK_finished.gif)
Título: Re: Problema con winsock
Publicado por: 43H4FH44H45H4CH49H56H45H en 23 Octubre 2010, 07:56 AM
Cita de: ハセヲ, en 19 Octubre 2010, 21:51 PMImprimo el puntero a la estructura hostent y sale esto:

Citarwww.l.google.com

Ahora probaré a cambiar la estructura direc por esta:

direc=gethostbyname("www.facebook.com");

Y sale todo como debería salir.

¿alguna causa?  ;D

Solo modifique un poco respecto a tu codigo para que muestre lo que quieres (segun entendí):

#include <winsock2.h>
#include <stdio.h>

/*Winsock library linked  :)*/
#pragma comment(lib,"ws2_32.lib")

int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct sockaddr_in local;
   struct hostent *direc;
   int len=0;
   char Buffer[1024];

   //Determinamos la versión, en este caso la 2.0
   WSAStartup(MAKEWORD(2,0),&wsa);

   //Creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   direc=gethostbyname("www.google.es");
   memset(&local,0,sizeof(local));
   memcpy(&local.sin_addr,direc->h_addr,direc->h_length);
   local.sin_family = direc->h_addrtype;
   local.sin_port= htons(80);   
   printf("%s",inet_ntoa(local.sin_addr));
   getchar();
}


Pero hay varios errores, comienza viendo algunos ejemplos basicos del tema, luego hay que comprobar los valores retornados para diagnosticar fallas en cada paso que realiza el programa y otras cosas mas...
Título: Re: Problema con winsock
Publicado por: тαптяα en 24 Octubre 2010, 08:12 AM
Cita de: ☺BADMAN en 23 Octubre 2010, 04:08 AM
aqui te dejo algo que te pueda funcionar:

bool RastrearDominio(char*IP, char* Dominio, int Port)
{
char IPD[20]=" ";
in_addr *o;
hostent* hp;
hp = gethostbyname(Dominio);
sprintf(IPD,"%s", inet_ntoa(*( (struct in_addr *)hp->h_addr)));
if( P2P->EsacnearIPX(IPD,Port))
{
 
  strcpy(IP,IPD);
  return true;
}
else
  strcpy(IP,"NULL");

return false;
}

  gethostbyname debuelve un estrcuct tipo hosten no un LPCSTR y P2P->EscanearIPx(IPD,Port) es un code extraño que quien sabe que hace XD (http://www.denunciando.com/images/icons/pixelSHERLOCK_finished.gif)
Debes saberlo tu,¿no?

Cita de: 43H4FH44H45H4CH49H56H45H en 23 Octubre 2010, 07:56 AM
Cita de: ハセヲ, en 19 Octubre 2010, 21:51 PMImprimo el puntero a la estructura hostent y sale esto:

Citarwww.l.google.com

Ahora probaré a cambiar la estructura direc por esta:

direc=gethostbyname("www.facebook.com");

Y sale todo como debería salir.

¿alguna causa?  ;D

Solo modifique un poco respecto a tu codigo para que muestre lo que quieres (segun entendí):

#include <winsock2.h>
#include <stdio.h>

/*Winsock library linked  :)*/
#pragma comment(lib,"ws2_32.lib")

int main()
{
   WSADATA wsa;
   SOCKET sock;
   struct sockaddr_in local;
   struct hostent *direc;
   int len=0;
   char Buffer[1024];

   //Determinamos la versión, en este caso la 2.0
   WSAStartup(MAKEWORD(2,0),&wsa);

   //Creamos el socket
   sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
   direc=gethostbyname("www.google.es");
   memset(&local,0,sizeof(local));
   memcpy(&local.sin_addr,direc->h_addr,direc->h_length);
   local.sin_family = direc->h_addrtype;
   local.sin_port= htons(80);   
   printf("%s",inet_ntoa(local.sin_addr));
   getchar();
}


Pero hay varios errores, comienza viendo algunos ejemplos basicos del tema, luego hay que comprobar los valores retornados para diagnosticar fallas en cada paso que realiza el programa y otras cosas mas...

Gracias
Título: Re: Problema con winsock
Publicado por: Garfield07 en 24 Octubre 2010, 14:26 PM
Al que no lo entiende, www.l.google.com redirecciona a www.google.es porque www.l.google.com es en realidad www.google.es xD!!!