首页 > 解决方案 > 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

标签: c++

解决方案


通过这个声明:

std::array<unsigned char, 4> ip_ = {};

这意味着 ip_ 是一个包含 0..255 的四个值的数组。这些值对应于 IPv4 地址。没有理由交换 IPv6 和 IPv4 地址。在源代码中,只有当 IPv4 地址包含在 IPv6 结构中时,您才会这样做。所以你试图做的副本既不在这里也不在那里。好吧,不管这些语义如何,这不会给你网络的公共 IP。

如果您想要网络的公共 IP,则可以从网络上连接到 Internet 的任何客户端获取它。有很多这样的解决方案。


推荐阅读