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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda envío archivo a web con C vía http
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 3 [4] 5 6 7 8 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda envío archivo a web con C vía http  (Leído 23,533 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #30 en: 24 Julio 2014, 01:00 am »

Ojala supiera emular un servidor, jaja entonces no estaba aquí supongo xD, ok gracias eferion es cierto ahí sería content, yo creo que es un fallo de cabecera, donde pongo host, pongo el host con el que accedo a la pagina desde navegador, no con el que accedo por ftp con filezilla, no se cual de los 2 poner.

Ivancea96 no se a que te refieres exactamente, pero realmente la conexion siempre la realiza solo necesita una IP y puerto, lo demás ya es el send, la conexión va sin problemas, cuando llega la orden del send a través del socket, es cuando envio eso de GET /HTTP... o POST... el send siempre va, lo envíe o no la funcion no me da error, yo creo que es un fallo de cabecera pues no se como debe de ser, o igual es la versión http del server no sé.

Por cierto probé con google.es y si conectaba, pero lo del GET /HTTP/1.1 no se para qué era necesario.

edito:

Puede que la IP este mal, no se que ip poner si la de cochesymotos.blabla.com, o la de server83.hostinger.com que uso para acceder a mi cuenta con filezilla, supongo que la de cochesymotos.blabla.com que devuelve con el ping.

Sigo investigando xD


« Última modificación: 24 Julio 2014, 01:06 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #31 en: 24 Julio 2014, 01:05 am »

Cuando decía si lograbas conectar, me refería a si podías enviar y recibir.
Hice una prueba con mi cliente, y tal como te lo puse debería responderte Google un 303.

Recuerda pasar el dominio y subdominio en host.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #32 en: 24 Julio 2014, 01:08 am »

no se como hacer para recibir la respuesta del server, yo solo puse en el send lo que me dijiste conecto y mando el send, pero claro no puedo ver la respuesta, no tengo funcion en el programa para capturarla.

edito:
A que te refieres con pasar el dominio y subdominio en el  HOST, ahí solo tengo:
Código:
strcat(buffer,"Host: mipagina.free33.com\r\n");

Y la IP que uso es la que devuelve el ping a esa direccion.

edito con todo actualizado:

Código:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
#define ip "81.226.363.191"

int main()
{
    WSADATA wsa;
    struct sockaddr_in direccion;
    int sock, puerto=80,len;
    char buffer[200],cad[20];
    ssize_t n;

    WSAStartup(MAKEWORD(2,0),&wsa);

    if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 )
    {
        printf("Problema al crear el socket");
        getch();
        exit(0);
    }
    else
    {
        direccion.sin_family=AF_INET;
        direccion.sin_port=htons(puerto);
        direccion.sin_addr.s_addr=inet_addr(ip);

        /*printf("%d\n",direccion.sin_family);
        printf("%d\n",direccion.sin_port);
        printf("%d\n",direccion.sin_addr.s_addr);*/

        len=strlen("nombre=nombre123correcto&contenido=123456");
        itoa(len,cad,10);
        strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
        strcat(buffer,"Host: mipaginaweb.free33.com\r\n");
        strcat(buffer,"Content-type: application/x-www-form-urlencoded\r\n");
        strcat(buffer,"Content-length: ");
        strcat(buffer,cad);
        strcat(buffer,"\r\n");
        strcat(buffer,"nombre=nombre123correcto&contenido=123456");
        printf("%s\n",buffer);

        if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1)
        {
            printf("Error al conectar.\n");
            getch();
            exit(0);
        }
        printf("Conectado correctamente.\n");

        if((send(sock,buffer,strlen(buffer),0))==-1)
        {
            printf("Error Send.\n");
            getch();
            exit(0);
        }
        printf("Send realizado.\n");
    }
    return 0;
}


Ok he actualizado para no andar contando en el content-length he quitado un \r\n que creo que sobraba pues iba detrás de otro.

Y bueno en el lado del server lo de siempre:

Código:
<html>
<head>
...
</head>
<body>
...
<?php
$nombre=htmlspecialchars($_POST["nombre"]);
$contenido=htmlspecialchars($_POST["contenido"]);
$fp=fopen("./archivos/" . $nombre . ".txt","at");
fwrite($fp,$contenido);
fclose($fp);
?>  
...
</body>

Eso es todo, lo dejo por hoy, haber si lo conseguimos, gracias.
« Última modificación: 24 Julio 2014, 01:45 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Ayuda envío archivo a web con C vía http
« Respuesta #33 en: 24 Julio 2014, 08:59 am »

Es una chorrada, pero es bueno ir adquiriendo buenas prácticas... sobretodo porque como te de en el futuro por cambiar algo te va a volver a dar problemas. Esto:

Código
  1.        len=strlen("nombre=nombre123correcto&contenido=123456");
  2.        itoa(len,cad,10);
  3.        strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
  4.        strcat(buffer,"Host: mipaginaweb.free33.com\r\n");
  5.        strcat(buffer,"Content-type: application/x-www-form-urlencoded\r\n");
  6.        strcat(buffer,"Content-length: ");
  7.        strcat(buffer,cad);
  8.        strcat(buffer,"\r\n");
  9.        strcat(buffer,"nombre=nombre123correcto&contenido=123456");
  10.        printf("%s\n",buffer);

Se debería parecer más a esto:

Código
  1.        char* contenido = "nombre=nombre123correcto&contenido=123456";
  2.        len = strlen( contenido );
  3.        itoa(len,cad,10);
  4.        strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
  5.        strcat(buffer,"Host: mipaginaweb.free33.com\r\n");
  6.        strcat(buffer,"Content-type: application/x-www-form-urlencoded\r\n");
  7.        strcat(buffer,"Content-length: ");
  8.        strcat(buffer,cad);
  9.        strcat(buffer,"\r\n");
  10.        strcat(buffer, contenido);
  11.        printf("%s\n",buffer);

El motivo es obvio... tener un mensaje duplicado implica tener que actualizarlo en dos o más sitios so pena que el paquete pase a estar mal construido y te falle la comunicación.

Ojala supiera emular un servidor, jaja entonces no estaba aquí supongo xD, ok gracias eferion es cierto ahí sería content, yo creo que es un fallo de cabecera, donde pongo host, pongo el host con el que accedo a la pagina desde navegador, no con el que accedo por ftp con filezilla, no se cual de los 2 poner.

Espero no haber metido la pata con el código, lo he hecho "a mano alzada" y no está probado.

Código
  1. #define MAX_BUFFER 512
  2.  
  3. // OJO que los puertos inferiores a 1024 estan reservados, lo mismo tienes que cambiar el puerto
  4. #define PUERTO_SERVIDOR "80"
  5.  
  6. int main( void )
  7. {
  8.    WSADATA wsaData;
  9.  
  10.    // Inicializamos WinSock
  11.    int errorCode = WSAStartup( MAKEWORD( 2, 2 ), &wsaData );
  12.    if ( errorCode != 0 )
  13.   {
  14.        printf("Error en WSAStartup: %d\n", errorCode );
  15.        getch( );
  16.        return 1;
  17.    }
  18.  
  19.    struct addrinfo configInicial;
  20.    ZeroMemory( &configInicial, sizeof( configInicial) ); // IMPORTANTE limpiar la memoria
  21.    configInicial.ai_family   = AF_INET;
  22.    configInicial.ai_socktype = SOCK_STREAM;
  23.    configInicial.ai_protocol = IPPROTO_TCP;
  24.    configInicial.ai_flags    = AI_PASSIVE;
  25.  
  26.    // Resolver la dirección IP y el puerto del servidor
  27.    struct addrinfo *configServidor= NULL;
  28.    errorCode = getaddrinfo( NULL, PUERTO_SERVIDOR, &configInicial, &configServidor );
  29.    if ( errorCode != 0 )
  30.    {
  31.        printf("Error en getaddrinfo: %d\n", errorcode );
  32.        WSACleanup( ); // IMPORTANTE reiniciar WinSock
  33.        return 1;
  34.    }
  35.  
  36.    // Crear socket de escucha
  37.    SOCKET socketServidor= INVALID_SOCKET;
  38.    socketServidor= socket( configServidor->ai_family, configServidor->ai_socktype, configServidor->ai_protocol );
  39.    if ( socketServidor== INVALID_SOCKET )
  40.    {
  41.        // Fijate que podemos obtener el codigo de error al crear el socket
  42.        printf("Error al crear socket de escucha: %ld\n", WSAGetLastError( ) );
  43.  
  44.        // Hay que limpiar la memoria
  45.        freeaddrinfo( configServidor );
  46.  
  47.        // Y reiniciar WinSock
  48.        WSACleanup();
  49.        return 1;
  50.    }
  51.  
  52.    // Se enlaza el socket del servidor para que use la ip y el puerto solicitado
  53.    errorcode = bind( socketServidor, configServidor->ai_addr, (int)configServidor->ai_addrlen );
  54.    if ( errorCode == SOCKET_ERROR)
  55.    {
  56.        printf("Error en bind: %d\n", WSAGetLastError( ) );
  57.  
  58.        // Liberamos recursos
  59.        freeaddrinfo( configServidor );
  60.        closesocket( socketServidor );
  61.        WSACleanup( );
  62.        return 1;
  63.    }
  64.  
  65.    // Ya no necesitamos esta configuracion, el socket esta creado
  66.    freeaddrinfo( configServidor );
  67.  
  68.    // Dejamos al socket esperando conexiones
  69.    errorCode = listen( socketServidor , SOMAXCONN );
  70.    if (errorCode == SOCKET_ERROR)
  71.    {
  72.        printf( "Error listen: %d\n", WSAGetLastError( ) );
  73.        closesocket( socketServidor);
  74.        WSACleanup( );
  75.        return 1;
  76.    }
  77.  
  78.    // Procesamos las peticiones que nos llegan
  79.    do
  80.    {
  81.        SOCKET socketCliente= INVALID_SOCKET;
  82.        socketCliente= accept( socketServidor, NULL, NULL );
  83.        if ( socketCliente== INVALID_SOCKET)
  84.        {
  85.            printf( "Error en conexion entrante: %d\n", WSAGetLastError( ) );
  86.            closesocket( socketServidor );
  87.            WSACleanup( );
  88.            return 1;
  89.        }
  90.  
  91.        // Recibimos el mensaje del cliente
  92.        printf( "Conexión entrante:\n" );
  93.        printf( "------------------------------------------\n" );
  94.        int bytesMensaje = 0;
  95.        char recvbuf[ MAX_BUFFER ];
  96.        int recvbuflen = MAX_BUFFER;
  97.        do
  98.        {
  99.            bytesMensaje = recv( socketCliente, recvbuf, recvbuflen, 0 );
  100.            if ( bytesMensaje > 0)
  101.            {
  102.                recvbuf[ bytesMensaje ] = 0;
  103.                printf( "Mensaje recibido:\n" );
  104.                puts( recvbuf );
  105.                printf( "\n" );
  106.                printf("Bytes recibidos: %d\n", bytesMensaje );
  107.  
  108.                // Tambien podemos enviarle una respuesta al cliente
  109.                // En este caso le devolvemos el mensaje que nos ha enviado
  110.                bytesMensaje = send( ClientSocket, recvbuf, bytesMensaje, 0 );
  111.                if ( bytesMensaje == SOCKET_ERROR)
  112.                {
  113.                    printf("Error al enviar la respuesta: %d\n", WSAGetLastError()  );
  114.                    closesocket( socketCliente );
  115.                    break;
  116.                }
  117.                printf( "Bytes enviados: %d\n", bytesMensaje );
  118.            }
  119.            else if ( bytesMensaje == 0 )
  120.                printf( "Conexion con el cliente cerrada.\n" );
  121.            else
  122.                printf( "Error al establecer conexion con cliente: %d\n", WSAGetLastError( ) );
  123.        } while ( bytesMensaje > 0 );
  124.  
  125.        closesocket( socketCliente );
  126.    } while ( 1 );
  127.  
  128.    // En este caso el servidor no para nunca
  129.    // Si se programase una parada habria que realizar las tareas de limpieza
  130.    closesocket( socketServidor );
  131.    WSACleanup( );
  132.  
  133.    return 0;
  134. }

En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #34 en: 24 Julio 2014, 14:22 pm »

Lo e intentado probar pero me da numerosos fallos, las variables en C se declaran solo en la cabecera, no se pueden poner a mitad de código como ocurre en java, hay algunas variables que no se para que sirven xD que no están definidas. Luego si tengo tiempo le dedico más tiempo, y lo retoco lo que pueda, gracias.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #35 en: 26 Julio 2014, 13:27 pm »

Sigo pensando en el tema, me pregunto si puede ser que para enviar las variables, sea necesario enviar el login y password del servidor, primero, yo creo que no debería ser necesario pero puede erradicar ahí un posible problema, también puede ser un fallo de cabecera o que falte algo, no se nada de cabeceras HTTP, bueno esta es la que tengo, igual podemos probar con admin y pass, no se xD.

Código:
POST /index.php HTTP/1.0\r\n
Host: midominio.cam.com\r\n
//Referer: http://midominio.cam.com/index.php\r\n
Content-type: application/x-www-form-urlencoded\r\n
Content-length: 30 \r\n\r\n
nombre=post_ok&contenido=exito

Puede ser que falte algo, o sobre en la cabecera, si eso falla me pregunto si es necesario el login y password del server web para acceder a el envio de las variables que espero que no.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #36 en: 26 Julio 2014, 13:33 pm »

yo de ti no ponía el content-type. Por probar.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #37 en: 26 Julio 2014, 19:37 pm »

Ya lo he probado y también he probado a poner esto en el script php:

Código:
$nombre=$_POST["nombre"];
$contenido=$_POST["contenido"];

Pero nada no funciona, habéis probado si os va a vosotros, no se vosotros que entendéis quizás os cueste menos porque yo sin apuntes, puedo buscar en google pero apenas consigo nada.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #38 en: 26 Julio 2014, 23:04 pm »

prueba a hacer eso con GET. Todo como lo tienes, pero con GET. Si te va, entonces sabremos que es un fallo en el POST.
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #39 en: 27 Julio 2014, 11:23 am »

He probado con GET, con POST, con htmlspecialchars, sin htmlspecialchars en el php, la cabecera la dejo igual, si meto cosas en la cabecera como el referer me da error,  de momento solo tengo en la cabecera HOST, Content-type, Content-length, y las variables. No sé. He visto POST que usan el agente de navegación en la cabecera y más cosas, no sé si hará falta algo de eso.
En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
Páginas: 1 2 3 [4] 5 6 7 8 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Messenger.UIAutomation ¿Como envio un archivo?
Scripting
markus_bitman 3 3,127 Último mensaje 2 Febrero 2010, 08:58 am
por Tyrz
[C] Envió de archivo binario por HTTP
Programación C/C++
yeikos 6 4,097 Último mensaje 4 Mayo 2010, 23:45 pm
por yeikos
¿Como genero un archivo con un nombre por defecto y lo envió por ftp?
Scripting
sabeeee 3 2,527 Último mensaje 4 Febrero 2011, 19:35 pm
por Edu
Como automatizar el envio de cabeceras HTTP ??? « 1 2 »
Desarrollo Web
cybero 10 5,974 Último mensaje 28 Abril 2012, 18:16 pm
por _teiki
Envio de archivo sin nombre Telegram C#
.NET (C#, VB.NET, ASP)
rigorvzla 2 3,342 Último mensaje 27 Junio 2018, 04:29 am
por rigorvzla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines