Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请教下有关报告完成进度之准确度的影响因素 #141

Closed
SeaHOH opened this issue Jul 6, 2020 · 8 comments
Closed

请教下有关报告完成进度之准确度的影响因素 #141

SeaHOH opened this issue Jul 6, 2020 · 8 comments

Comments

@SeaHOH
Copy link

SeaHOH commented Jul 6, 2020

这不是关于增强版的问题,但我英文太差,这种比较麻烦的细节在这里交流更方便些,希望 owner 能允许。

前情提要:由于 qBittorrent 各种小问题不断,加之我的系统是 Win7,运行 qBittorrent 更是不稳定,最近不仅没法做种 (和我的网络设置也有关系 qbittorrent#13052 ) 还会导致系统崩溃,最终我还是换回了许久不用的 μTorrent。由于还要继续使用屏蔽功能,我自己写了一个工具,它包含一个检测 peer 报告完成进度准确度的功能。使用一段时间后发现,除了迅雷外,qBittorrent 居然是被检出数量最多的客户端 (主要是 4.1.7 和 4.2.5),有时甚至比迅雷还多 (因为大多数时候直接就屏蔽了,没有机会检测)。

虽然其它客户端也会零星检出虚假完成进度,但远不及 qBittorrent 那么频繁。请问,有哪些因素会影响到报告完成进度的准确性呢?网络 (感觉不太可能,不过没看过 BEP 相关部分,不能肯定)、软件固有设置 (in code)、用户设置,或者其它什么。

qBittorrent 的特殊表现是否表明其固有设置可能存在失误?当然,我的检测方法也可能不合适,这里具体描述一下,或者请直接看代码。如果本地处于 seeding,或者从 peer 的下载量为 0,且 peer 报告 0 完成进度,那么计算对 peer 上传量是否大于 torrent 整体的 1.5‰,是就判断为虚假。

另外,有没有这样的可能,这些被检出的 qBittorrent 客户端中的大部分其实是假冒的?

如有就此解惑,是以感激不尽。

@c0re100
Copy link
Owner

c0re100 commented Jul 7, 2020

試試不封鎖這一類qBittorrent? 做一個完整的統計,看看他有沒有回報正確的進度?
正常會自動將進度回報給對方,不清楚這一個封包會不會丟失(但應該不會每次都會丟包吧?)
因為我用qBittorrent沒看過這類情況(qb用戶回報0進度),我的網絡連不上就連不上了lol

@SeaHOH
Copy link
Author

SeaHOH commented Jul 8, 2020

谢谢,这个思路挺好,我做个长期统计看看情况。

@SeaHOH
Copy link
Author

SeaHOH commented Jul 10, 2020

按照上面的计算方法,只记录不屏蔽,发现确实有不少一直报 0 完成进度。

我又仔细思考,发现此方法没有照顾到因各种原因重新开始下载的 peer,于是修改成从本次下载进度开始计算。

修改后,被检出的数量急剧缩减,到现在为止仍然是个位数。
μTorrent 一个,看起来是网络原因,一分钟内其进度就正常了。
其余都是 qBittorrent,进度始终是 0,不过暂时没有 4.2.5。 有点奇怪的是,μTorrent 在几分钟后就与这些 peer 断开了,由于样本太少,而且上传给这些 peer 的速度也比较小,因此不确定是否是 μTorrent 本身已经具备虚假下载进度检测功能从而断开。

这么看起来 qBittorrent 本身有问题的可能性比较大,我还会继续观察,有新发现再来报告。

@SeaHOH
Copy link
Author

SeaHOH commented Jul 17, 2020

到现在为止,总共发现不到 30 例。除少数几个使用 libtorrent 旧版本的 peer 不确定(其中一个断续连接有 2 小时,但给它的上传量始终只有 1 MB),其它大部分都在 1 分钟内,个别 2 分钟内恢复正常,看起来像是网络问题。

最初的数据异常可能是用户使用习惯上的差异,以及错误的计算方法所导致。虽然样本数量比较少,但大致能解释得通。

这样看起来,遇到其它始终报告 0 进度的未知客户端的可能性实在是太小。但作为轻微强迫症患者,我决定保留此功能。

再次感谢 c0re100 让我得以解惑。虽尚未完全明了,但也足矣。

@SeaHOH SeaHOH closed this as completed Jul 17, 2020
@SeaHOH
Copy link
Author

SeaHOH commented Jul 19, 2020

终于发现一例特别可疑的:libtorrent/0.16.16.0@139.227.236.120:53551,做种两分钟内上传给它 180 MB 占比 70%,然后它就断开连接,估计已完成下载。由于整个过程实在太快,还是不能确定是否故意伪造 0 进度。

不能限制单线程上传速度对吸血来讲,其实算是利好?
如果以后吸血都全角度深度伪造,当前协议好像不支持把它们区分出来?

@c0re100
Copy link
Owner

c0re100 commented Jul 19, 2020

终于发现一例特别可疑的:libtorrent/0.16.16.0@139.227.236.120:53551,做种两分钟内上传给它 180 MB 占比 70%,然后它就断开连接,估计已完成下载。由于整个过程实在太快,还是不能确定是否故意伪造 0 进度。

不能限制单线程上传速度对吸血来讲,其实算是利好?
如果以后吸血都全角度深度伪造,当前协议好像不支持把它们区分出来?

是的,當初設計BT的時候本來就沒人會想到這樣濫用0進度

@SeaHOH
Copy link
Author

SeaHOH commented Jul 20, 2020

BT 设计得太过简陋,不过这也是它能流行起来的原因。有点怀念 eD2k/Kad,已多年未曾用过。

现在只能采取这种计算验证的办法,还需要考虑网络因素,但又不能太过宽松,其中分寸实在是不好把握。

@SeaHOH
Copy link
Author

SeaHOH commented Jul 29, 2020

除了前天才发现的假冒 FrostWire 可以确定是故意报 0 进度 (上传很顺畅),其它始终报 0 进度 (上传不足 10MB) 的大多都是与国外的连接,估计是网络问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants