c++实现socks5服务器(Linux only)

代码使用libevent做事件驱动。目前仅支持tcp走代理,支持账号密码或无密码方式验证登陆。由于ipv6普及度并不高且与ipv4十分不兼容,所以代码只支持ipv4. 支持域名解析走代理。

项目地址

GitHub

使用方法

客户端请下载proxycap

服务器从GitHub上下载源码后编译:
1.安装libevent(若安装则忽略 )
libevent官网
2.编译
cd src
cmake
make
等待编译成功后文件夹下出现名为“socks5Server”的可执行文件表示编译成功。
3.配置设置
在运行之前,请在存放socks5Server所在目录添加配置文件,配置文件如下:

CLIENT_TTL = 600 
#CLIENT_TTL表示当一个连接在CLIENT_TTL秒内没有传输数据,服务器将会关闭该连接
SEND_UNIT_SIZE = 1500
#服务器每次为单个
以下是C++实现socks5端口转发的代码示例: ```cpp #include <iostream> #include <string> #include <thread> #include <vector> #include <boost/asio.hpp> using boost::asio::ip::tcp; class Session : public std::enable_shared_from_this<Session> { public: Session(tcp::socket socket) : socket_(std::move(socket)) {} void start() { do_read(); } private: void do_read() { auto self(shared_from_this()); socket_.async_read_some(boost::asio::buffer(data_, max_length), [this, self](boost::system::error_code ec, std::size_t length) { if (!ec) { do_write(length); } }); } void do_write(std::size_t length) { auto self(shared_from_this()); boost::asio::async_write(socket_, boost::asio::buffer(data_, length), [this, self](boost::system::error_code ec, std::size_t /*length*/) { if (!ec) { do_read(); } }); } tcp::socket socket_; enum { max_length = 1024 }; char data_[max_length]; }; class Server { public: Server(boost::asio::io_context& io_context, short port) : acceptor_(io_context, tcp::endpoint(tcp::v4(), port)) { do_accept(); } private: void do_accept() { acceptor_.async_accept( [this](boost::system::error_code ec, tcp::socket socket) { if (!ec) { std::make_shared<Session>(std::move(socket))->start(); } do_accept(); }); } tcp::acceptor acceptor_; }; int main(int argc, char* argv[]) { try { if (argc != 2) { std::cerr << "Usage: socks5_server <port>\n"; return 1; } boost::asio::io_context io_context; Server s(io_context, std::atoi(argv[1])); std::vector<std::thread> threads; for (std::size_t i = 0; i < std::thread::hardware_concurrency(); ++i) { threads.emplace_back([&io_context]() { io_context.run(); }); } for (auto& t : threads) { t.join(); } } catch (std::exception& e) { std::cerr << "Exception: " << e.what() << "\n"; } return 0; } ``` 以上代码实现了一个简单的socks5服务器,可以监听指定端口并接受来自客户端的连接请求。在接受到连接请求后,服务器会创建一个新的Session对象来处理该连接。Session对象会异步读取客户端发送的数据,并将其原封不动地发送回去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值