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


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 8,521 veces)
Kaxperday


Desconectado Desconectado

Mensajes: 704


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #10 en: 21 Julio 2014, 17:43 »

Código:
int main()
{
    WSADATA wsa;
    struct sockaddr_in direccion;
    int sock, puerto=80;
    char buffer[200];
    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);


        strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
        strcat(buffer,"Host: dominioweb.com\r\n");
        strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n");
        strcat(buffer,"Content-length: 34\r\n\r\n");
        strcat(buffer,"nombre=yupiiii \r\n");
        printf("%s",buffer);

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

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

Se crea el socket correctamente con la ip del servidor web y con su puerto 80, ahora bien el write da error no consigo enviar datos que me falla? gracias a todos por su ayuda, haber si lo consigo acabar ;)


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


ASMático


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #11 en: 21 Julio 2014, 20:24 »

No es "write". Es "Send".

Código
  1. write(sock,buffer,strlen(buffer),0)

Y cuidado con el content-length. El content-length debe ser el tamaño exacto del cuerpo. En caso de "nombre=yupiiii", sería 14. Despues del body, no hace falta ningún \r\n. Una vez que el servidor lea todo el X caracteres del body (X == content-length), el resto lo va a ignorar. O más que ignorar, se lo puede tomar como otra petición.

Y eso si, si el content-length es más grande que el contenido real, posiblemente el server se quede en espera y no te conteste.


En línea

Kaxperday


Desconectado Desconectado

Mensajes: 704


The man in the Middle


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

Gracias por tu ayuda compañero me esta siendo útil como aprendizaje, aunque sigue sin ir, te dare más detalles al respecto, es lo mínimo que puedo hacer.

Este es el código php que corre en el index.php del servidor web:

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

Entonces yo voy a mi página, pongo en la url las variables dentro de index.php y me crea un archivo con un nombre y un contenido, es simple, desde el navegador funciona sin problemas.

htmlspecialchars recoge los valores de las variables en la url (nombre y contenido) y las asigna a otras variables nombre y contenido.

El código actualizado del cliente que sube los datos es el siguiente:

Código:
int main()
{
    WSADATA wsa;
    struct sockaddr_in direccion;
    int sock, puerto=80;
    char buffer[200];
    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);


        strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
        strcat(buffer,"Host: dominioweb.com\r\n");
        strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n");
        strcat(buffer,"Content-length: 25\r\n\r\n");
        strcat(buffer,"nombre=nombre123correcto");
        printf("%s",buffer);

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

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

Lo he compilado no da errores, la IP del servidor web es correcta, el programa no da ningun error y finaliza satisfactoriamente, sin embargo actualizo la web y no aparece ningún archivo ni ningún tipo de datos, algo ha fallado pues y con lo poco que se no tengo ni idea xP.

Eso es todo compa espero que me podáis ayudar, 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.
ivancea96


Desconectado Desconectado

Mensajes: 3.215


ASMático


Ver Perfil WWW
Re:
« Respuesta #13 en: 22 Julio 2014, 10:40 »

Estás poniendo en el php $_GET[], cuando debería ser $_POST[]
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 704


The man in the Middle


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

Gracias eso he puesto lo demás esta todo igual el programa se ejecuta bien pero sigue sin enviar datos :"""(((( xD
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 #15 en: 22 Julio 2014, 16:21 »

no estás enviando nada bajo la variable "contenido"... ¿no será que te está creando el archivo pero lo deja vacío?
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 704


The man in the Middle


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

Nose trata de eso, no crea ningún archivo, el script funciona con solo poner el nombre (eso hace que cree un archivo con ese nombre y le añade terminacion txt), pero no se crea el archivo a pesar de que envio el nombre, si pongo solo nombre y no contenido da lo mismo ya lo probé xP, no se qué será si tuvieseis algunos apuntes sobre esto, me vendrían muy bien.
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 #17 en: 22 Julio 2014, 21:15 »

Estás seguro de que tienes permisos de escritura para la ruta del archivo?
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 704


The man in the Middle


Ver Perfil WWW
Re: Ayuda envío archivo a web con C vía http
« Respuesta #18 en: 22 Julio 2014, 23:40 »

No debería de haber problemano he puesto ninguna restricción en ningún directorio, cuando probaba con el GET y metida las variables en la URL desde el navegador las recogia correctamente y se creaba el archivo con su contenido, ahora he cambiado el GET por el POST como dijisteis y el código ahí esta, solo he cambiado la esto:

Código:
strcpy(buffer,"POST /index.php HTTP/1.0\r\n");
        strcat(buffer,"Host: dominio.com\r\n");
        strcat(buffer,"Context-type: application/x-www-form-urlencoded\r\n");
        strcat(buffer,"Content-length: 42\r\n\r\n");
        strcat(buffer,"nombre=nombre123correcto&contenido=123456");
        printf("%s",buffer);

Pero sigue sin funcionar, ideas?
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 #19 en: 23 Julio 2014, 08:34 »

Una pregunta tonta... en qué punto concreto has inicializado el socket. Algo del tipo:

Código
  1. if((s = socket(AF_INET , SOCK_STREAM , 0 )) == INVALID_SOCKET){ }

Si no has inicializado el socket es como intentar escribir en un fichero que no has abierto.

Esta línea o su equivalente debería ir antes del "connect".


Cierto, error mio, no lo ví y eso que estuve mirando el código con "tranquilidad".

Un saludo.
« Última modificación: 23 Julio 2014, 10:39 por eferion » En línea

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
envio de archivo automatico - ayuda.
Dudas Generales
X8peru 0 579 Último mensaje 26 Febrero 2005, 08:26
por X8peru
Peticion Post HTTP para subir archivo
Hacking Básico
odeONeSs 2 4,526 Último mensaje 7 Abril 2009, 13:47
por odeONeSs
Messenger.UIAutomation ¿Como envio un archivo?
Scripting
markus_bitman 3 1,628 Último mensaje 2 Febrero 2010, 08:58
por Tyrz
[C] Envió de archivo binario por HTTP
Programación C/C++
yeikos 6 2,080 Último mensaje 4 Mayo 2010, 23:45
por yeikos
Como automatizar el envio de cabeceras HTTP ??? « 1 2 »
Desarrollo Web
cybero 10 2,630 Último mensaje 28 Abril 2012, 18:16
por _teiki
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines