# socks_server **Repository Path**: actcms/socks_server ## Basic Information - **Project Name**: socks_server - **Description**: 一个socks4/5的代理服务器实现。 - **Primary Language**: Unknown - **License**: BSL-1.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 49 - **Created**: 2014-06-19 - **Last Updated**: 2022-08-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 一个使用现代c++实现的socks4/5协议的实现 ======================================= 使用c++20协程,支持socks4/socks4a/socks5的server/client实现.

### 使用示例程序:
``` #include "socks/logging.hpp" #include "socks/socks_server.hpp" #include "socks/socks_client.hpp" #include "socks/use_awaitable.hpp" #include #include #include #include namespace net = boost::asio; using net::ip::tcp; using namespace socks; using server_ptr = std::shared_ptr; net::awaitable start_socks_server(server_ptr& server) { tcp::endpoint socks_listen( net::ip::address::from_string("0.0.0.0"), 1080); socks_server_option opt; opt.usrdid_ = "jack"; opt.passwd_ = "1111"; auto executor = co_await net::this_coro::executor; server = std::make_shared( executor, socks_listen, opt); server->open(); co_return; } net::awaitable start_socks_client() { auto executor = co_await net::this_coro::executor; tcp::socket s(executor); tcp::endpoint server_addr( net::ip::address::from_string("127.0.0.1"), 1080); // tcp socket connect to socks server. boost::system::error_code ec; co_await s.async_connect(server_addr, asio_util::use_awaitable[ec]); if (ec) { LOG_WARN << "client connect to server: " << ec.message(); co_return; } // handshake and tell to socks server target. socks::socks_client_option opt; opt.target_host = "www.baidu.com"; opt.target_port = 80; opt.proxy_hostname = true; opt.username = "jack"; opt.password = "1111"; co_await socks::async_socks_handshake(s, opt, asio_util::use_awaitable[ec]); if (ec) { LOG_WARN << "client handshake to server: " << ec.message(); co_return; } LOG_DBG << "completed socks handshake."; // Next, do some http stuff with socket... co_return; } int main() { net::io_context ioc(1); server_ptr server; co_spawn(ioc, start_socks_server(server), net::detached); co_spawn(ioc, start_socks_client(), net::detached); ioc.run(); return 0; } ``` very easy to use!!!