Нет ответа от сервера в Wireshark, но ответ получен, и ошибка распаковки не удалась - PullRequest
0 голосов
/ 06 мая 2018

Это моя первая прокси-реализация, которая отправляет запрос от клиента к серверу и отправляет ответ от сервера к клиенту.

У меня на самом деле два вопроса.

Q1: Как показано во второй строке, запрос отправляется на сервер. Но я ожидал получить ответ от адреса сервера «143.248.36.166»

Однако ответа от адреса сервера на адрес источника нет. Но, как показано в 3-й строке и ниже, ответ от прокси отправляется клиенту. Тогда где прокси получает ответ?

(я очистил историю, поэтому я не вижу кеша)

enter image description here


мой код:

        while(1){
        char response[1024];
        bzero(response, 1024);
        int n = read(connfd_to_server, res_buf, 1024);
        if (n <=0){
            printf("will break");
            break;
        }
        else{ //if first packet, modify header
            if(packet == 0){
                res_line = strtok(res_buf, "\r\n");
                for(int i = 0; i<11; i++){  //copy first 11 lines as it is
                    strcat(response, res_line);
                    strcat(response, "\r\n");
                    res_line = strtok(NULL, "\r\n");
                }
                strcat(response, "Via: 1.1 ubuntu (ee323_proxy/1.0.0)");
                strcat(response, "\r\n");  //add this new line
                memcpy(response+strlen(response),res_line,n-strlen(response));  //memcpy rest header, and some message body
                if (send(connfd_to_client, response, n, 0)<0){
                    perror("send failed");
                }
            }
            else{  //if not first packet, there is no header, just send
                if (send(connfd_to_client, res_buf, n, 0)<0){
                    perror("send failed");
                }
            }
        }
        packet++;
    }

Q2: Я хочу отправить измененный контент клиенту. Но есть ошибка.

enter image description here

Как показано, добавлена ​​новая строка. Однако строка после новой строки не заканчивается на «\ r \ n» как другие строки. Я не знаю, почему окончание изменилось.

Также есть сообщение об ошибке: декомпрессия не удалась

Я хочу получить свой последний буфер res_line (заголовок остатка + тело сообщения), однако, похоже, что это неправильно.

Как я могу исправить эти две проблемы?

Большое спасибо заранее Я застрял на некоторое время ...

...