主线 DHT:为什么 ping 中的哈希与 find_node 中的哈希不同?
Mainline DHT: why hash in ping is different than hash in find_node?
我正在使用 Mainline DHT 实现。我看到了奇怪的行为。
假设我知道节点 IP 和端口:1.1.1.1:7777。我用我自己的节点哈希作为目标向他发送 "find_node" 请求。我从他那里得到了 8 个节点,假设第一个哈希是:abcdeabcdeabcdeabcde 和 IP:2.2.2.2:8888。
现在我向 2.2.2.2:8888 发送 "ping" 请求,该节点用与我在 "find_node" 响应中从 1.1.1.1:7777 得到的哈希值完全不同的哈希值响应我。我看到这不是个案。这是怎么回事?为什么来自 2 个不同来源的同一节点的哈希值不同?谢谢回答。
可能是 2.2.2.2:8888 不知道它的外部端口/地址,或者它还没有更新。因此不同的哈希..
这可能是一个恶意节点,它不保持其节点 ID 一致,以努力进入尽可能多的路由 table。它这样做可能是为了数据收集或 DoS 放大目的。
一般来说,您不应该过分信任远程节点报告和清理数据的任何内容。如果它不保持其 ID 一致,您应该将其从路由 table 中删除,并忽略其查询中返回的结果。我列出了 BEP42 in the documentation of my own DHT implementation.
之外的一系列可能的清理方法
另一种可能性是节点 B 只是在此期间更改了它的 ID(例如由于重启)而节点 A 尚未更新它或没有正确跟踪 ID 更改。但这不应该发生得太频繁。
And I see that is not individual case.
总的来说,我只希望这种行为来自网络的一小部分。因此,您应该将发送虚假响应的唯一 IP 地址的数量与发送正常响应的唯一 IP 地址的数量进行比较。如果您的实现很天真并且被恶意节点困住以联系更多恶意节点,则很容易将这些统计数据弄错。
但是在查找过程中,当您从未正确清理其路由 table 的节点获取污染数据时,您可能会在终端阶段更频繁地看到这种情况。作为一个例子,旧的 libtorrent 版本没有(参见相关 issue;请注意,我在这里没有单独列出 libtorrent,许多实现在这一领域都很糟糕)。
我正在使用 Mainline DHT 实现。我看到了奇怪的行为。
假设我知道节点 IP 和端口:1.1.1.1:7777。我用我自己的节点哈希作为目标向他发送 "find_node" 请求。我从他那里得到了 8 个节点,假设第一个哈希是:abcdeabcdeabcdeabcde 和 IP:2.2.2.2:8888。 现在我向 2.2.2.2:8888 发送 "ping" 请求,该节点用与我在 "find_node" 响应中从 1.1.1.1:7777 得到的哈希值完全不同的哈希值响应我。我看到这不是个案。这是怎么回事?为什么来自 2 个不同来源的同一节点的哈希值不同?谢谢回答。
可能是 2.2.2.2:8888 不知道它的外部端口/地址,或者它还没有更新。因此不同的哈希..
这可能是一个恶意节点,它不保持其节点 ID 一致,以努力进入尽可能多的路由 table。它这样做可能是为了数据收集或 DoS 放大目的。
一般来说,您不应该过分信任远程节点报告和清理数据的任何内容。如果它不保持其 ID 一致,您应该将其从路由 table 中删除,并忽略其查询中返回的结果。我列出了 BEP42 in the documentation of my own DHT implementation.
之外的一系列可能的清理方法另一种可能性是节点 B 只是在此期间更改了它的 ID(例如由于重启)而节点 A 尚未更新它或没有正确跟踪 ID 更改。但这不应该发生得太频繁。
And I see that is not individual case.
总的来说,我只希望这种行为来自网络的一小部分。因此,您应该将发送虚假响应的唯一 IP 地址的数量与发送正常响应的唯一 IP 地址的数量进行比较。如果您的实现很天真并且被恶意节点困住以联系更多恶意节点,则很容易将这些统计数据弄错。
但是在查找过程中,当您从未正确清理其路由 table 的节点获取污染数据时,您可能会在终端阶段更频繁地看到这种情况。作为一个例子,旧的 libtorrent 版本没有(参见相关 issue;请注意,我在这里没有单独列出 libtorrent,许多实现在这一领域都很糟糕)。