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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  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 6 Visitantes 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 26,317 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 #20 en: 23 Julio 2014, 10:29 am »

Lo inicializo en la sentencia if, una vez ejecuta el else ya debería haber creado el socket.

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: 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);

        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;
}

Este era el php, lo tengo dentro del directorio public_html del servidor web, en el mismo directorio tengo la carpeta archivos donde almacena los archivos que le mando.

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

Decir que no es un script como tal, ya que index.php tiene muchas más funciones como tiene divs, menus, etc, quizas si separara el script de php y lo llamase en vez de hacerlo a todo el index funcionaria o igual es indiferente, lo probaré de momento esto es lo que tengo.


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 #21 en: 23 Julio 2014, 10:40 am »

Cómo estás generando "ip"?


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 #22 en: 23 Julio 2014, 12:20 pm »

Hago un ping a mi dominio web de ahí obtengo la IP que la defino como variable global en el cliente en C.
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 #23 en: 23 Julio 2014, 13:18 pm »

y asumo que has comprobado que el valor almacenado en esa variable es el correcto, cierto?
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 #24 en: 23 Julio 2014, 14:54 pm »

Gracias por tu ayuda eferion, ahora deja a los demás responder, el código ya está posteado no voy a responder preguntas absurdas.

Edito: ¿No ves que si? OMG antes de preguntar dedica un minisegundo a mirar el código
« Última modificación: 23 Julio 2014, 14:59 pm 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 #25 en: 23 Julio 2014, 15:14 pm »

Edito: ¿No ves que si? OMG antes de preguntar dedica un minisegundo a mirar el código

Código
  1. direccion.sin_addr.s_addr=inet_addr(ip);

Si, pedazo de comprobación... seguro que esta línea funciona aunque en "ip" esté poniendo "estoesunamierda" en vez de algo tipo "192.168.1.5"... si, no se cómo no he podido ver que, efectivamente, estabas haciendo todas las comprobaciones precisas para asegurar que "ip" tiene una dirección IP válida.

Gracias por tu ayuda eferion, ahora deja a los demás responder, el código ya está posteado no voy a responder preguntas absurdas.

Me parece estupendo... seguro que con tus super conocimientos de C y C++ eres capaz de sacarlo tu solo... a no, espera, que estás aquí pidiendo ayuda.

¿Crees que le estoy quitando a alguien el derecho a responderte? ¿De verdad sabes cómo funciona Internet?

Si alguien te quiere responder lo podrá hacer te pregunte o no absurdeces que, dicho sean de paso, pueden dar lugar a que tu super programa de 30 líneas no funcione.

Ahora permite que un ignorante como yo que, de seguro, ha hecho más programas que tú (y que además funcionan) te explique un pequeño detalle:

Citar
Si tu programa tuviese un error de bulto habría aflorado en los primeros 3 o 4 mensajes, la gente que suele contestar en este foro no es manca... Dado que no ha sido así tu problema puede estar en los detalles más absurdos:

* Falta de permisos de escritura
* Estás recuperando mal la IP
* No has inicializado correctamente el socket (ya se ha visto que no es esto)

Detalles así de divertidos y de obvios que hacen que la gente pierda su tiempo en contestar a una persona como tú que recurre aquí porque no tiene ni la más remota idea de cómo solucionar un problema... y encima se queja cuando la intentan ayudar... no se, tu mismo.

Y dicho esto, te tomo la palabra. Tranquilo que no vuelvo a pasarme por este hilo... ni por este ni por ninguno que abras... puede que con esto pierdas algún que otro consejo valioso o puede que no. Yo por mi parte me guardo mi opinión personal al respecto.



EDITO:

Solo una pregunta tonta que vuelvo a repetir porque, insisto, no lo veo en el código

¿Dónde narices está el código que asigna un valor a "ip"?

O mejor, no contestes, seguro que así es más divertido encontrar el fallo a tu programa.
« Última modificación: 23 Julio 2014, 15:16 pm por eferion » En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


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

Hazle caso a eferion.
Nos parece muy bien que quieras ocultar a ip de tu servidor, pero al menos pon la ip de Google para 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 #27 en: 23 Julio 2014, 16:28 pm »

jajaja ya lo siento eferion pensaba que me estabas vacilando no quería ser cruel, pero tus preguntas me parecian absurdas y que estaban en el código todas, sino fallo mio por pasarme de listo xD.

La IP es así 84.234.145.130 solo que con numeros cambiados, la obtuve haciendo ping al servidor web, y el socket se crea correctamente,no creo que haya ningún fallo al respecto xD ya lo siento jaja pense que estabas vacilando o algo por el estilo.

Edito la ip se define como variable global: #define ip "84.234.145.130" exactamente.

Ahora estoy probando los valores que devuelven y parece que si hay un problema :

Código:
direccion.sin_family=AF_INET;
        direccion.sin_port=htons(puerto);
        direccion.sin_addr.s_addr=inet_addr(ip);

printf("%d\n",direccion.sin_family);//muestra 2
printf("%d\n",direccion.sin_port);//muestra 20480
printf("%d\n",direccion.sin_addr.s_addr);//muestra -21023899

Pero no entiendo la IP es la que devuelve el ping no? xD

Edito otra vez este es todo el code:

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

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: 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);

        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;
}

De todas formas no se porque falla eso y el connect no falla luego, no tengo apuntes de sockets para win y no se como va esto voy mirando por internet ojeando y probando.

Edito otra vez, me acabo de dar cuenta de que tenia la IP que correspondia a algo en plan cochesymotos.com, peeero acabo de caer en que seguramente sea la misma que pongo cuando me conecto con filezilla al servidor que es en plan server83.host44.com, hice ping a esa direccion y me devolvio una ip parecida pero distinta, cambie la ip en el cliente y el resultado fue el mismo.

printf("%d\n",direccion.sin_family);//muestra 2
printf("%d\n",direccion.sin_port);//muestra 20480
printf("%d\n",direccion.sin_addr.s_addr);//muestra 1503701535
« Última modificación: 23 Julio 2014, 16:58 pm 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 #28 en: 23 Julio 2014, 17:03 pm »

jajaja ya lo siento eferion pensaba que me estabas vacilando no quería ser cruel, pero tus preguntas me parecian absurdas y que estaban en el código todas, sino fallo mio por pasarme de listo xD.

En ese caso sin problemas. Intento que mis preguntas tengan cierto sentido, aunque a veces no lo parezcan. Me puede pasar, como a todo hijo de vecino, que pregunte algo que ya esté contestado en el código... pese a quien le pese soy humano y a veces también me equivoco, aunque no lo hago de mala fe.

La IP es así 84.234.145.130 solo que con numeros cambiados, la obtuve haciendo ping al servidor web, y el socket se crea correctamente,no creo que haya ningún fallo al respecto

Ok, por tu comentario anterior pensé que estabas leyendo la IP dinámicamente haciendo un ping al servidor o algo así... y no me cuadraba el asunto para nada. Cuando consigas corregir esto sería una buena mejora que permitas especificar la dirección del servidor en un archivo de configuración (bien por DNS - lo ideal -, bien por ip). Tener estos datos escritos a pelo en el código solo dan problemas.

printf("%d\n",direccion.sin_family);//muestra 2
printf("%d\n",direccion.sin_port);//muestra 20480
printf("%d\n",direccion.sin_addr.s_addr);//muestra -21023899

Pero no entiendo la IP es la que devuelve el ping no? xD

la función inet_addr hace una conversión para "empaquetar" la ip en formato de red. Esta función tiene en cuenta, entre otras cosas, si tu máquina es BIG ENDIAN o LITTLE ENDIAN a la hora de realizar la conversión... además la IP es de tipo "unsigned", luego si la imprimes con "%d" que se usa para "signed", el valor que te saque no va a servirte de mucho.

PD.: prueba a cambiar Context-Type por Content-Type. Hasta donde llego, Context-Type no es un parámetro válido de cabecera. Lo mismo al tener una cabecera incorrecta el servidor rechaza la conexión... o no sabe como tratarla.

Si esto no soluciona el problema yo realizaría otra prueba para eliminar puntos de fallo:

* Crea un programa que "emule" al servidor web, de tal forma que, simplemente, te saque por pantalla todo lo que reciba por el socket. Después lanza tu cliente contra este programa y mira a ver si imprimes algo. Así al menos puedes verificar que el programa realiza una salida y además puedes comprobar si ésta es la esperada.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re:
« Respuesta #29 en: 23 Julio 2014, 23:46 pm »

Una recomendación.
Mientras no te funciona, prueba a conectarte con Google. Pon solo lo necesario, es decir:

GET / HTTP/1.1
Host:google.es

Y nada más.
Si logras conectar, pasamos al siguiente nivel
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
Messenger.UIAutomation ¿Como envio un archivo?
Scripting
markus_bitman 3 3,344 Último mensaje 2 Febrero 2010, 08:58 am
por Tyrz
[C] Envió de archivo binario por HTTP
Programación C/C++
yeikos 6 4,399 Ú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,742 Último mensaje 4 Febrero 2011, 19:35 pm
por Edu
Como automatizar el envio de cabeceras HTTP ??? « 1 2 »
Desarrollo Web
cybero 10 6,471 Ú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,623 Último mensaje 27 Junio 2018, 04:29 am
por rigorvzla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines