elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C/C++] WinAPI -> Sockets, me atore.. (resuelto)
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [C/C++] WinAPI -> Sockets, me atore.. (resuelto)  (Leído 6,348 veces)
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
[C/C++] WinAPI -> Sockets, me atore.. (resuelto)
« en: 3 Noviembre 2014, 01:41 am »

Hola, chicos, me siento mal ultimamente vengo solo a pedir ayuda y no a colaborar..
Tengo un script en PHP que me retorna la IP publica, desde una peticion POST.
El tema, es que no se donde estoy pifiandola porque aparentemente no estoy guardando el contenido de lo que me deberia guardar recv() (aclaro que estoy usando un puntero a funcion, por eso en el codigo se va a ver FuncionRecv()

Sin mas preambulos, el codigo:
Código:
char * IPPublica()
{
WSAData wsaData;
SOCKET Socket = INVALID_SOCKET;
int codigo_error = 0;
struct addrinfo *resultado = NULL,
*actual = NULL,
pistas;
char * ip = (char*)HeapAlloc(GetProcessHeap(),sizeof(char),513);
ZeroMemory(&ip,512);
char solicitud[512] =
"POST /Tracking/Tracker.php HTTP/1.1\r\n"
"User-Agent: Mozilla/4.0\r\n"
"Host: 127.0.0.1\r\n"
"Accept: */*\r\n"
"Cache-Control: no-cache\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Content-Lenght: 4\r\n"
"ip=1\r\n";
codigo_error = FuncionWSAStartup(MAKEWORD(1,1),&wsaData);
if (codigo_error != 0) {
FuncionMessageBox(NULL,"Error al inicializar WSA1,1","prueba",MB_OK);
FuncionWSACleanup();
return NULL;
}
ZeroMemory(&pistas,sizeof(pistas));
pistas.ai_family = AF_UNSPEC;
pistas.ai_socktype = SOCK_STREAM;
pistas.ai_protocol = IPPROTO_TCP;

codigo_error = FuncionGetAddrInfo("127.0.0.1","80",&pistas,&resultado);
if (codigo_error != 0 ) {
FuncionMessageBox(NULL,"Error al obtener el nombre del host","prueba",MB_OK);
FuncionWSACleanup();
return NULL;
}
for (actual = resultado; actual != NULL; actual = actual->ai_next)
{
Socket = FuncionSocket(actual->ai_family,actual->ai_socktype,actual->ai_protocol);
if (Socket == INVALID_SOCKET) {
FuncionMessageBox(NULL,"Fallo el socket","prueba",MB_OK);
FuncionWSACleanup();
return NULL;
}
codigo_error = FuncionConnect(Socket,actual->ai_addr,(int)actual->ai_addrlen);
if (codigo_error == SOCKET_ERROR) {
FuncionCloseSocket(Socket);
Socket = INVALID_SOCKET;
continue;
}
break;
}
FuncionFreeAddrInfo(resultado);

codigo_error = FuncionSend(Socket,solicitud,strlen(solicitud),0);
if (codigo_error == SOCKET_ERROR) {
FuncionMessageBox(NULL,"Error al enviar","Prueba",MB_OK);
FuncionCloseSocket(Socket);
FuncionWSACleanup();
return NULL;
}
codigo_error = FuncionShutdown(Socket,SD_SEND);
do {
codigo_error = FuncionRecv(Socket,ip,512,0);
FuncionMessageBox(NULL,ip,"Prueba",MB_OK);
if (codigo_error >0)
FuncionMessageBox(NULL,"Recibiedo..","Prueba",MB_OK);
else if (codigo_error==0)
FuncionMessageBox(NULL,"Conexion cerrada..","Prueba",MB_OK);
else {
char error[10] = "";
_itoa_s(FuncionWSAGetLastError(),error,10);
FuncionMessageBox(NULL,error,"Prueba",MB_OK);
}
} while(codigo_error > 0);
FuncionCloseSocket(Socket);
FuncionWSACleanup();
return ip;
}

Esta hecho muy a las apuradas.. La verdad que tendria que haberlo hecho todo con Qt que estoy acostumbrado.. Pero se me dio por hacerlo todo con la WinAPI (que sufrimiento, pero ya llevo demasiado escrito como para hechar para atras y de paso aprendo..)

Se que me va a devolver el codigo de 200 OK mas los datos, pero tiene todas esas comprobaciones porque en el buffer(ip) no logro obtener ningun contenido :(


« Última modificación: 3 Noviembre 2014, 14:48 pm por someRandomCode » En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #1 en: 3 Noviembre 2014, 01:53 am »


no he visto detalladamente el codigo pero :

que pasa si pones :

Código
  1. pistas.ai_family = AF_INET;
  2.  

en ves de:
Código
  1. pistas.ai_family = AF_UNSPEC;


En línea

buenas
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #2 en: 3 Noviembre 2014, 02:01 am »

no he visto detalladamente el codigo pero :

que pasa si pones :

Código
  1. pistas.ai_family = AF_INET;
  2.  

en ves de:
Código
  1. pistas.ai_family = AF_UNSPEC;

Le di derecho como dice la MSDN en ese apartado, aparte la conexion la realiza con exito, lo que hace mal es el tema de guardar los datos en el buffer (que directamente no lo hace)
No se si tendra algo que ver con como tengo definido el puntero a funcion, lo adjunto por las dudas:
Código:
int (__stdcall *FuncionRecv)(SOCKET,char *,int,int);
FuncionRecv = (int(__stdcall*)(SOCKET,char *,int,int))FuncionGetProcAddr(winsock,"recv");

En línea

daryo


Desconectado Desconectado

Mensajes: 1.070



Ver Perfil WWW
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #3 en: 3 Noviembre 2014, 02:10 am »

si tienes razon error mio :P


En línea

buenas
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #4 en: 3 Noviembre 2014, 03:30 am »

Me pone de mal humor porque por lo general pongo metas a lograr antes de irme a dormir, y esta era una de esas metas :P
No voy a poder dormir tranquilo jaja
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #5 en: 3 Noviembre 2014, 09:34 am »

char * ip = (char*)HeapAlloc(GetProcessHeap(),sizeof(char),513);
ZeroMemory(&ip,512);

Ahi estas escribiendo en ip (la variable local en la pila y todos los bytes siguientes) y no en la memoria a la que ip apunta, por lo que cuando llames a recv sera un puntero nulo, tenes suerte de que no haya una excepcion no controlada ahi mismo. En fin, saca el ampersand que esta de mas ...
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #6 en: 3 Noviembre 2014, 13:42 pm »

Tenes razon, le pifie, igual lo cambie por:
Código:
	char * buffer1 = (char*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,4096*sizeof(char));

Porque ahi tenia un error tambien, el tema tambien encontre por que la respuesta no llegaba, el servidor estaba esperando un terminador valido, mi peticion POST esta incorrecta, alguien me puede dar una mano al respecto de que me falta o que tengo incorrecto en la peticion?
EDIT: Me olvide de poner la peticion como esta actualmente, es esta:
Código:
	char solicitud[512] = 
"POST /Tracking/Tracker.php HTTP/1.1\r\n"
"Host: 127.0.0.1\r\n"
"Connection: keep-alive\r\n"
"Content-Lenght: 4\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"\r\n"
"ip=1\r\n";
"\r\n\r\n";

Me responde con 200  (o sea, OK) peeeero, no me da el resultado me dice no implementado cuando con Chrome y postman me da la respuesta correcta
« Última modificación: 3 Noviembre 2014, 13:48 pm por someRandomCode » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #7 en: 3 Noviembre 2014, 14:40 pm »

Tenes razon, le pifie, igual lo cambie por:

Si, no habia visto, de casualidad le dabas HEAP_NO_SERIALIZE (sizeof char = 1).

Esto esta mal escrito:
"Content-Lenght: 4\r\n"

Es Content-Length no Content-Lenght. Igual si es un tema de protocolo, segui probando hasta que des en el clavo y mandes lo que corresponde.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
someRandomCode

Desconectado Desconectado

Mensajes: 250



Ver Perfil
Re: [C/C++] WinAPI -> Sockets, me atore..
« Respuesta #8 en: 3 Noviembre 2014, 14:48 pm »

Si, no habia visto, de casualidad le dabas HEAP_NO_SERIALIZE (sizeof char = 1).

Esto esta mal escrito:
"Content-Lenght: 4\r\n"

Es Content-Length no Content-Lenght. Igual si es un tema de protocolo, segui probando hasta que des en el clavo y mandes lo que corresponde.


Etaaaa, ahi estaba otro typo :)
Gracias che ahi lo marco como resuelto
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [C/C++] WinAPI -> Sockets, me atore.. (resuelto)
« Respuesta #9 en: 3 Noviembre 2014, 14:54 pm »

De nadas  ::)
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Equivalencia de función WINAPI unsigned int WINAPI myRun en Windows con Ubuntu
Programación C/C++
bertamax 2 3,137 Último mensaje 7 Agosto 2010, 16:27 pm
por bertamax
Añadir sockets en winapi
Programación C/C++
d00ze13 2 2,835 Último mensaje 30 Noviembre 2011, 20:00 pm
por d00ze13
[Resuelto] C++ Sockets
Programación C/C++
NOIS 4 3,000 Último mensaje 9 Noviembre 2014, 14:05 pm
por NOIS
[RESUELTO] Regresando, me atoré (Ollydbg 2.01 + crackit2 de netforce.nl) « 1 2 3 »
Ingeniería Inversa
someRandomCode 20 11,283 Último mensaje 30 Agosto 2015, 12:24 pm
por someRandomCode
[Resuelto] ¿Por qué mis sockets en nodejs no funcionan?
Desarrollo Web
Ali Baba 1 1,685 Último mensaje 29 Marzo 2018, 20:30 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines