问题描述
根据Bittorrent tracker (https://wiki.theory.org/BitTorrentSpecification) 的规范,peer 是通过它们的peer_id 和ip 来标识的。 peer_id 在通知请求中传递给跟踪器,ip - 从请求标头,但可以选择作为查询参数传递。跟踪器如何知道这个请求实际上是从这个对等方(不是欺诈)发送的,没有任何密钥?
解决方法
请注意,official specification 将该参数列为可选参数,这意味着它不是客户端身份的一部分。相反,它应该被视为对跟踪器的提示,即跟踪器应该将该 IP 分发给其他客户端,而不是通知连接的源。如果跟踪器不信任客户端,则应忽略此提示。
如果客户端向跟踪器进行身份验证(例如,通过 HTTP 基本身份验证或公告 URL 中的秘密令牌),则可以建立信任。
跟踪器还可以验证客户端而不是信任客户端,例如通过打开一个bittorrent连接到宣布的IP和端口,然后为宣布的infohash发送一个bittorrent握手,以检查远程是否可以接受bittorrent连接。这还具有拒绝由于防火墙或 NAT 限制而无法访问的通告的优势。
对于开放的公共跟踪器,这两种方法都不实用,因此它们通常会忽略 &ip=...
参数。部署在更受限制的环境中的跟踪器确实会使用信任和/或验证方法。