Ir para conteúdo
Entre para seguir isso  
Eduardo Bittencourt

Solucionado Resposta http completa

Posts Recomendados

Eu conseguir solucionar o problema referente a resposta http, a solução foi copiar blocos de memória com o tamanho total a cada iteração,  fazendo uma soma no buffer. A solução está na linha 99 a 101.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>
#include <regex.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/time.h>

#define TAM 512

struct zone{
        
       char *host;
       char *result;
       char *content;
       char *user;
       char *page;
       char *postr;

};

int main(void) {

    struct sockaddr_in host;

    struct zone *s;

    s = (struct zone *) malloc(500*sizeof(struct zone));

    memset(s, 0, sizeof(struct zone)); // inicializa todos os dados da estrutura com 0, deixando o buffer limpo

    int sock_create, conectar, total; 

      s->host = "zone-h.org";
      s->result = malloc(500*sizeof(char));
      s->content = "Content-Type: application/x-www-form-urlencoded";
      s->user = "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0";
      s->page = "/notify/single";
      s->debugger = "defacer=Teste&domain1=http://testando.com.br&hackmode=18&reason=1: undefined";


    sprintf(s->result, "POST %s HTTP/1.1\r\nHost: %s\r\n%s\r\nContent-length: 70\r\n\r\n%s", s->page, s->host, s->content, s->post); // uni todos os conteúdos das váriaveis para o buffer s->result


    if((sock_create = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

             puts("Erro ao criar socket");
             return 1;

      }
  
    //estrutura do socket do host

    host.sin_family = AF_INET;
    host.sin_port = htons(80);
    host.sin_addr.s_addr = inet_addr("72.20.18.5");

    if(connect(sock_create, (struct sockaddr *)&host, sizeof(host)) < 0) {
    
                puts("Erro ao se conectar");
                asm("xor %eax, %eax"); // zera os registradores          
                asm("mov $0x1, %eax"); // move 0x1 exit para o registrador eax
                asm("mov $0x1, %ebx"); // move 0x1 para ebx como argumento da função
                asm("int $0x80");  // executa a syscall

      }

     if(send(sock_create, s->result, strlen(s->result), 0) < 0) {

               puts("Erro ao enviar mensagem");
               return 1; // encerra o programa com erro
       }


     free(s);
    
     char *buffer = malloc(20000);
     char *body = malloc(20000*sizeof(char)); //váriavel não usada

   
      for(;;) { //loop infinto até a conexão ser encerrada e retornar 0
             
            if((total = recv(sock_create, buffer, TAM, 0)) < 0) {
                        puts("Erro ao receber body");
                        exit(1);

            } else if(total == 0) {

                 break;

              }

                memset(&body[total_length], 0, TAM);
                memcpy(&body[total_length], buffer, total);
	            total_length += total; 
        }
           printf("%s", buffer); 
         //free(buffer);

         //buffer = NULL; //aponta para a constante NULL evitando wild pointers

  }

 

Editado por Eduardo Bittencourt

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 horas atrás, Eduardo Bittencourt disse:

memset(buffer, 0, TAM);

Essa linha tá zerando o buffer a cada iteração, e quando o loop acaba, o buffer tá zerado. Experimenta movê-la para fora (antes) antes do loop. ;) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já fiz isso Fernando, porém dá no mesmo, e se eu não colocar a função memset dentro do loop, ele vai ficar repetindo todo o código a cada iteração, por isso tenho que limpar o buffer, o problema é na função recv, porém não sei como solucionar. 

 

Editado por Eduardo Bittencourt

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×