C++ 如何在C++;使用Boost

C++ 如何在C++;使用Boost,c++,boost,proxy,C++,Boost,Proxy,我正在制作一个web应用程序fuzzer,对于我的代理服务器,我正在使用一个叫Alex Ott的家伙开发的开源代码(目前)。我注意到,当我从一些网站请求那些没有被捕获的,所以我真的想在C++中写我自己的代理,但是我完全不知道从哪里开始。有人能给我解释一下吗 最终目标是能够捕获并将通过代理发送的每个请求写入文件,我已经在这样做了,但是我现在的代理服务器并没有捕获所有这些请求,我知道这些请求都在那里 编辑:由于问题不清楚,这里是:我想知道用Boost扩展库,用C++编写的代理服务器代码是什么。过去四

我正在制作一个web应用程序fuzzer,对于我的代理服务器,我正在使用一个叫Alex Ott的家伙开发的开源代码(目前)。我注意到,当我从一些网站请求那些没有被捕获的,所以我真的想在C++中写我自己的代理,但是我完全不知道从哪里开始。有人能给我解释一下吗

最终目标是能够捕获并将通过代理发送的每个请求写入文件,我已经在这样做了,但是我现在的代理服务器并没有捕获所有这些请求,我知道这些请求都在那里


编辑:由于问题不清楚,这里是:我想知道用Boost扩展库,用C++编写的代理服务器代码是什么。过去四个月的问题都是一样的。

好吧,这里有一个功能性的例子让你开始学习。它在两个连接之间转发。请注意,此简单示例不适用于web浏览器,因为客户端将尝试建立多个连接,而此示例仅侦听一个连接。将此作为(非常简单的)基础,您应该能够取得一些进展

有趣的事情发生在
handle\u read
中,它是接收数据时执行的回调。此函数用于在套接字之间转发数据。注意,当我们最初为“本地”和“远程”连接调用它时,我们传递套接字的顺序是相反的(
read\u from
write\u to

#包括
使用名称空间std;
#包括
#包括
#包括
#包括
boost::asio::io_服务和io_服务()
{
静态boost::asio::io_服务svc;
返回svc;
}
char local_data[1024]={0};
字符远程_数据[1024]={0};
无效句柄读取(
boost::asio::ip::tcp::socket&从,
boost::asio::ip::tcp::socket&写入,
字符*读缓冲区,
大小\u t字节,
常量boost::系统::错误(代码和e)
{
//每当接收到数据时,就会调用此函数
//出于调试目的,请在控制台窗口中显示数据
//或者写入文件,或者其他什么。。。
字符串数据(读缓冲区,读缓冲区+字节);

std::我想你指的是代理服务器吗?我不敢问“你尝试了什么?”如果你不知道,你可以从阅读高级Unix网络编程第1卷开始。我强烈建议你使用现有的代理。这里有一个在进行模糊处理时对我很有用的代理,它支持写入文件:是的代理服务器ver.和@aftnix就网络编程而言,我还没有做过太多尝试。我一点也不了解。我一直在使用我发现的内置于Boost的软件,但我想我会开始阅读这本书。就在两个月前,我刚刚为一个非常特定的用例实现了一个代理,因此无法使用现成的exist这是一个比较简单的方法。听一个地址,打开另一个地址,从一个地址传输的数据被转发到另一个地址。我写的这篇文章的全部内容都是使用
boost::asio
,一个简单的文章可以用<500行代码完成。我爱你。这太不可思议了。
#include <iostream>
using namespace std;

#include <boost/asio.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/thread.hpp>
#include <boost/bind.hpp>

boost::asio::io_service& io_service()
{
   static boost::asio::io_service svc;
   return svc;
}

char local_data[1024] = {0};
char remote_data[1024] = {0};

void handle_read(
   boost::asio::ip::tcp::socket& read_from,
   boost::asio::ip::tcp::socket& write_to,
   char* read_buffer,
   size_t bytes,
   const boost::system::error_code& e)
{
   // this function is called whenever data is received

   // for debugging purposes, show the data in the console window
   // or write to file, or whatever...
   std::string data(read_buffer, read_buffer + bytes);    
   std::cout << data << "\n";

   // forward the received data on to "the other side"    
   write_to.send(
      boost::asio::buffer(read_buffer, bytes));

   // read more data from "this side"
   read_from.async_read_some(
      boost::asio::buffer(read_buffer, 1024),
      boost::bind(handle_read, boost::ref(read_from), boost::ref(write_to), read_buffer, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error));
}

int main(int argc, char** argv)
{
   if(argc == 5)
   {
      boost::asio::io_service::work w(io_service());

      boost::thread t(boost::bind(&boost::asio::io_service::run, (&io_service())));

      // extract the connection information from the command line
      boost::asio::ip::address local_address = boost::asio::ip::address::from_string(argv[1]);
      uint16_t local_port = boost::lexical_cast<uint16_t>(argv[2]);
      boost::asio::ip::address remote_address = boost::asio::ip::address::from_string(argv[3]);
      uint16_t remote_port = boost::lexical_cast<uint16_t>(argv[4]);

      boost::asio::ip::tcp::endpoint local_ep(local_address, local_port);
      boost::asio::ip::tcp::endpoint remote_ep(remote_address, remote_port);

      // start listening on the "local" socket -- note this does not
      // have to be local, you could in theory forward through a remote device
      // it's called "local" in the logical sense    
      boost::asio::ip::tcp::acceptor listen(io_service(), local_ep);
      boost::asio::ip::tcp::socket local_socket(io_service());
      listen.accept(local_socket);

      // open the remote connection
      boost::asio::ip::tcp::socket remote_socket(io_service());
      remote_socket.open(remote_ep.protocol());
      remote_socket.connect(remote_ep);

      // start listening for data on the "local" connection
      local_socket.async_receive(
         boost::asio::buffer(local_data, 1024),
         boost::bind(handle_read, boost::ref(local_socket), boost::ref(remote_socket), local_data, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error));

      // also listen for data on the "remote" connection
      remote_socket.async_receive(
         boost::asio::buffer(remote_data, 1024),
         boost::bind(handle_read, boost::ref(remote_socket), boost::ref(local_socket), remote_data, boost::asio::placeholders::bytes_transferred, boost::asio::placeholders::error));

      t.join();
   }
   else
   {
      cout << "proxy <local ip> <port> <remote ip> <port>\n";
   }

   return 0;
}