Problema con winsock

Iniciado por тαптяα, 19 Octubre 2010, 21:51 PM

0 Miembros y 1 Visitante están viendo este tema.

тαптяα

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

16BITBoy

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.
Blog personal: http://www.16bitboy.com/blog

- Que horrible pesadilla, unos y ceros por todas partes... hasta me parecio ver un ¡dos!
- Bender, solo fue una pesadilla, no existe eso que llamas "dos".

тαптяα

Bueno es lo que me suponía redirecciones y DNS cosas que van fuera de mi dominio jajajjaa

☺BADMAN

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
Experto en Biefrost.
Subseven User.
Especialista en crypters.
Tifa FAN
Batch Programer XD ;D

43H4FH44H45H4CH49H56H45H

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...

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W

тαптяα

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
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

Garfield07

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!!!


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo