2017-01-30 13 views
0

В настоящее время я изучаю интернет. Я пытаюсь создать простой прокси-сервер, который просто перенаправляет запрос со стороны сервера на клиентскую сторону. Im в настоящее время соответствует this учебник. Это, как далеко я получил:Показать HTTP-запрос, отправленный на мой сервер с помощью C++

#define MYPORT "3490" // the port users will be connecting to 
#define BACKLOG 10  // how many pending connections queue will hold 

int main(int argc, const char* argv[]) { 
    struct addrinfo hints; 
    struct addrinfo *res; 
    int sockIn; 
    int sockOut; 

    memset(&hints, 0, sizeof hints); // make sure its empty 
    hints.ai_family = AF_UNSPEC;  // use IPv4 or IPv6, whichever 
    hints.ai_socktype = SOCK_STREAM; // what kind of socket 
    hints.ai_flags = AI_PASSIVE;  // fill in my IP for me 

    //listens on the hosts ip address: 
    getaddrinfo(NULL, MYPORT, &hints, &res); 

    // make a socket, bind it, and listen on it: 
    sockIn = socket(res->ai_family, res->ai_socktype, res->ai_protocol); 
    bind(sockIn, res->ai_addr, res->ai_addrlen); 
    listen(sockIn, BACKLOG); 

    freeaddrinfo(res); // free the linked-list 

     struct sockaddr_storage their_addr; 
     socklen_t addr_size; 
     char buf[512]; 

     while(1) { 
      addr_size = sizeof their_addr; 
      struct sockaddr *addr = (struct sockaddr *)&their_addr; 
      sockOut = accept(sockIn, addr, &addr_size); 
      recv(sockOut, buf, sizeof buf, 0); 
      for (auto ch : buf) { 
       cout << ch; 
      } 
      close(sockOut); 
     } 
} 

Сейчас им просто показывая «привет» на каждой странице я посещаю. Прежде чем реализовать клиентскую часть идентификатора прокси-сервера, чтобы вместо этого отобразить HTTP-запрос Get, который мой браузер отправляет на серверную часть прокси. Моя проблема в том, что я не знаю, как ее получить. Руководство, которое я использую, не критично относится к этому.

Редактировать: я добавил вызов recv, который, предположительно, должен прочитать все, начиная с сокета в буфере. К сожалению, он ничего не делает

ответ

0

скачать и установить wireshark (пакет сниффер), или же Fiddler Fiddler (HTTP proxy). Вы сможете легко проверить HTTP-трафик. Я рекомендую вам начать с скрипача. Установите на компьютер, где находится ваш браузер.

+0

Спасибо, у меня есть wirehark, и я знаю, как его использовать. Я должен был быть более конкретным. Я хочу, чтобы использовать вызовы C++ для достижения моей цели. – Bonbin

+1

ОК, я отвечал, как отображать/проверять запрос на получение, а не через C++. Я рассматриваю возможность удаления моего ответа, но это может быть полезно для тех, кто должен видеть трафик http независимо от метода. –