我正在与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保持一致,从而试图进入尽可能多的路由表。出于数据收集或DoS放大的目的,可能正在这样做。
通常,您不应该相信远程节点报告过多数据并清理数据的任何内容。如果它的ID不一致,则应将其从路由表中删除,并忽略其查询中返回的结果。我在BEP42中列出了除documentation of my own DHT implementation之外的许多可能的消毒方法。
另一种可能性是,节点B在此期间仅更改了其ID(例如,由于重新启动),而节点A尚未更新它,或者未正确跟踪ID更改。但这不应该太频繁地发生。
而且我认为这不是个别情况。
总的来说,我只会从很小一部分的网络中获得这种效果。因此,您应该将发送虚假响应的唯一IP地址的数量与发送健全响应的唯一IP地址的数量进行比较。如果您的实施过于幼稚并且被恶意节点困住以联系更多恶意节点,那么很容易使这些统计信息出错。