Проблема с хендшейком и получением вебсокет трафика на локальний прокси(C++\boost.beast) #3
Трафик перенаправлен с помощью FoxyProxy
main функция:
int main() {
string input;
try {
net::io_context ioc{ 1 };
ssl::context ctx_socket{ ssl::context::tlsv12 };
ssl::context ctx_http(ssl::context::tlsv12_server);
load_certificate(ctx_http);
load_certificate(ctx_socket);
tcp::acceptor http_acceptor(ioc, { net::ip::make_address("127.0.0.1"), 443 });
tcp::acceptor ws_acceptor(ioc, { net::ip::make_address("127.0.0.1"), 444 });
thread([&input]() {
rubine_katana_console(input);
}).detach();
http_acceptor_func(http_acceptor, ctx_http);
socket_acceptor_func(ws_acceptor, ctx_socket);
ioc.run();
}
catch (const exception& e) {
cout << "[✖] ERROR IN MAIN: " << e.what() << endl;
return -1;
}
return 0;
}
работает нормально.
Websocket_acceptor:
void socket_acceptor_func(tcp::acceptor& acceptor, ssl::context& ctx_socket) {
auto socket = std::make_shared<tcp::socket>(acceptor.get_executor());
acceptor.async_accept(*socket, [socket, &acceptor, &ctx_socket](boost::system::error_code ec) {
if (!ec) {
std::thread([sock = std::move(*socket), &ctx_socket]() mutable {
websocket_proxy_server(std::move(sock), ctx_socket);
}).detach();
}
socket_acceptor_func(acceptor, ctx_socket);
});
}
Функцию свою виполняет, не думаю что ошибка в нем.
Сама функция прокси для вебсокета:
void websocket_proxy_server(tcp::socket socket, ssl::context& ctx) {
ssl::stream<tcp::socket> ssl_stream{ std::move(socket), ctx };
std::cerr << "[WS] starting SSL handshake...\n";
ssl_stream.handshake(ssl::stream_base::server);
std::cerr << "[WS] SSL handshake OK\n";
websocket::stream<ssl::stream<tcp::socket>> ws{ std::move(ssl_stream) };
ws.set_option(websocket::stream_base::decorator(
[](websocket::response_type& res) {
res.set(http::field::server,
std::string(BOOST_BEAST_VERSION_STRING) +
" websocket-server-sync-ssl");
}));
ws.accept();
for (;;) {
beast::flat_buffer buffer;
ws.read(buffer);
std::cout << beast::buffers_to_string(buffer.data()) << std::endl;
}
}
Здесь уже ошибка, видно что трафик бил перенаправлен, но обработка не происходит. std::cerr << "[WS] starting SSL handshake...\n"; - тут зависает, значит хендшейк не проходит. Известно что первий запрос серверу от сайта(по вебсокет):
wss://gs-kw5wg-7ncx9.london.moomoo.io/?token=...
Еще потом добавил логи, ошибок не било(тут в функции их убрал).
Если что функция для подгрузки сертификатов:
void load_certificate(ssl::context& ctx) {
beast::error_code ec;
string cert = R"()";
string key = R"()";
ctx.use_certificate_chain(boost::asio::buffer(cert.data(), cert.size()), ec);
if (ec) {
cerr << "cert error: " << ec.message() << "\n";
}
ctx.use_private_key(boost::asio::buffer(key.data(), key.size()), boost::asio::ssl::context::pem, ec);
if (ec) {
cerr << "key error: " << ec.message() << "\n";
}
}
В чем может бить ошибка? +- делал по документации, как и всегда.