如何在 Bittorrent 跟踪器中完成对等方的识别

问题描述

根据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=... 参数。部署在更受限制的环境中的跟踪器确实会使用信任和/或验证方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...