【问题标题】:What is the correct way to get the client's IP address in Crow (C++ library)?在 Crow(C++ 库)中获取客户端 IP 地址的正确方法是什么?
【发布时间】:2018-09-25 20:05:15
【问题描述】:

我正在使用 Crow(C++ 服务器库)并尝试获取客户端的 IP 地址。

我找到了这个答案,Getting the client IP address: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, what else could be useful?,所以我尝试了:

CROW_ROUTE(app, "/mine")([](const crow::request& req, crow::response& res)
{
    std::string ip_address = req.get_header_value("REMOTE_ADDR");

    res.write(req.get_header_value("HTTP_X_FORWARDED_FOR"));
    res.write(req.get_header_value("HTTP_CLIENT_IP"));
    res.write(req.get_header_value("HTTP_X_FORWARDED"));
    res.write(req.get_header_value("HTTP_X_CLUSTER_CLIENT_IP"));
    res.write(req.get_header_value("HTTP_FORWARDED_FOR"));
    res.write(req.get_header_value("HTTP_FORWARDED"));

    for( auto head : req.headers )
    {
        res.write(head.first);
        res.write(" = ");
        res.write(head.second);
        res.write( "<br/>" );
    }
    res.end();
});

但所有这些标题字段都是空白的。是否有其他方法可以获取 IP 地址,或者我的浏览器只是没有发送所需的信息?

【问题讨论】:

  • 通常从连接套接字获取。似乎 Crow 提供对它的访问权限有点小。也许您可以add an issue 请求获取客户地址的方法?

标签: c++ http crow


【解决方案1】:

这对我有用:

std::string str_IP_and_PortNumber("");
auto itr = req.headers.find("Host");
if (itr != req.headers.end())
{
  str_IP_and_PortNumber = itr->second;
}

实际上,不确定这是否是您需要的 - 这将获取服务器的 IP 和端口号,如客户端所见。如果您需要不同的东西,只需在调试视图窗口中查看 req.headers 树并找到您感兴趣的字符串键。

【讨论】:

    猜你喜欢
    • 2015-01-29
    • 1970-01-01
    • 2022-01-20
    • 2019-01-14
    • 1970-01-01
    • 2011-07-15
    • 2019-11-13
    • 1970-01-01
    • 2015-09-01
    相关资源
    最近更新 更多