c++ - GET 请求中的 IP 客户端 torrent
问题描述
我已经安装了https://github.com/OlafvdSpek/xbt。我使用 cloudflare 并且在 xbtt 中不显示客户端的真实 IP 地址,显示服务器的本地 IP。我强行将它添加到 nginxrewrite ^(.*)$ $1?ip=$remote_addr break;
以在 GET 请求中显示它:
1595982801 ::ffff:192.168.4.5 56450 GET /00000002dd0e809ada41d86416fce509/announce?ip=80.212.125.78&info_hash=D%e79%c3%e5f%9c%96%cf~1a8%d7%ef%03%02%07%88%60&peer_id=-UT355W-%88%b2Ma%a0%87%e6%1dN%db%26%2f&port=36217&uploaded=0&downloaded=0&left=342000&corrupt=0&key=A65806EF&numwant=200&compact=1&no_peer_id=1 HTTP/1.0
在 XBTT 中,我为所有客户端获得 IP 192.168.4.5。192.168.4.5 - IP 地址服务器,80.212.125.78 - 真实客户端。我只需要使用真实IP,而不是本地服务器,这是由于使用了cloudflare。我无法从 GET 请求中获取客户端的真实 IP 地址并将其添加到 XBTT,这就是我尝试这样做的方法。1.我添加文件https://raw.githubusercontent.com/OlafvdSpek/xbt/master/Tracker/tracker.h
std::array<unsigned char, 4> ip_ = {};
2.并更改https://raw.githubusercontent.com/OlafvdSpek/xbt/master/Tracker/tracker.cpp
memcpy(peer.ipv4.data(), &in.ipv6_[12], 4);
变成
memcpy(peer.ipv4.data(), &in.ip_[12], 4);
但在构建并重新启动后,我得到客户端的 IP 地址为 0.0.0.0,而不是我需要的 80.212.125.78
解决方案
通过这个声明:
std::array<unsigned char, 4> ip_ = {};
这意味着 ip_ 是一个包含 0..255 的四个值的数组。这些值对应于 IPv4 地址。没有理由交换 IPv6 和 IPv4 地址。在源代码中,只有当 IPv4 地址包含在 IPv6 结构中时,您才会这样做。所以你试图做的副本既不在这里也不在那里。好吧,不管这些语义如何,这不会给你网络的公共 IP。
如果您想要网络的公共 IP,则可以从网络上连接到 Internet 的任何客户端获取它。有很多这样的解决方案。
推荐阅读
- spring-data-jpa - 审计现有数据库表中的完整实体
- node.js - 无法在猫鼬中保存另一个参考文档中的一个对象?
- docker - 如何为基于 linux 的 docker 容器获取 nuget
- python - 为什么我的站点地图显示 /number 而不是 /title 我的帖子?
- go - 解组 json 字段是 int 或 string
- javascript - 如果 route.path 包含 /add,则默认选中所有复选框
- reactjs - 如何检查地图是否有值或没有反应
- background - 如何更改关于光标位置的背景颜色
- javascript - npm run start 仅在服务器上导致空白页
- android - 如何将 OpenCV android-sdk 导入使用 Bazel 的项目?