2.08测试版

对的,数据包在两个不同的参数里,分别进行汇报客户端名称信息与peerid
建立连接的时候只发送peerid,建立连接成功后,才通知对方客户端名称,分别在两个数据包里,如下图所示

如果使用猜测的方式我觉得不太合理,但是可以和utorrent一样,用fake字符串特别标注出来此结果为猜测

这似乎是BEP10扩展协议中的一种字段
bep_0010.rst_post
可能并非所有客户端都支持

但像这种明确写在BEP20中的客户端名称就不能算是猜测了吧?
而且客户端名称汇报功能并不是必须的

以及彗星的n/a所代表的含义究竟是什么

biglybt 既汇报了客户端名称 peerID 也对得上
依然后面有一个 n/a 我只能认为是彗星内部有一个已知客户端名单
不在名单上的都会被加上n/a的标记

其实是对方启用了匿名模式,你可以测试一下qb打开匿名后,就显示不出客户端名称信息了

优先取这个值,如果值不存在在使用猜测,如果是猜测的结果一定要标注fake字符串用于人类可读

参考吸血事件,不是出来了好几个互联网上从没见过的bt客户端,依旧能正常显示hp、taipei等客户端名称信息,n/a一般就是没取到这个客户端名称的字符串值

有可能,我看了一下taipei后面有 n/a 的显示,难道比特彗星用的不是fake,而是 n/a 显示

这个是因为qb在隐身模式下关闭了BEP10中的这个客户端名称传递功能吧?
但这是一个扩展协议 它确实很常见 但不代表所有客户端都支持

即使这样peer ID 应该是不会变的吧? 难道qb在隐身模式下会伪造peer ID?


很遗憾 HP 似乎支持 BEP10中的客户端名称显示 所以其既显示客户端名称也有 n/a

目前分析BC的客户端显示逻辑

  • 存在扩展消息的客户端标识时
    –若扩展标识与peerid一致,则显示扩展消息中的标识
    –若扩展标识与peerid不同,则显示扩展标识,并在括号中显示peerid识别的标识
    –若peerid无法识别,则显示扩展标识,并在括号中显示n/a

  • 没有扩展消息的客户端标识时
    –若peerid能被识别,则显示peerid识别的标识
    –若peerid无法识别,则显示n/a(无括号)

分析截图

·扩展标识与peerid一致
图片

·扩展标识与peerid不同
f5d795acc988c503d3e0d561cee4c9be.jpeg

·无扩展消息,成功识别peerid(两个qb显示格式不同)
1e459b7ba54dd9a219a1ebbc0a6422c1.jpeg

·有扩展消息,无法识别peerid

·无扩展消息,无法识别peerid
557d06393ca9a4fa3d284f80ce982781

目前来看,显示逻辑符合直觉。
但对peerid的识别精度太低,导致出现很多没必要的n/a,引起混淆,需要改进。
可以的话,建议也更新一下帮助文档,有需要的用户可以查阅避免误解。

或者像qB这样分两列显示

注意qB这里“客户端”列的显示逻辑跟BC类似,没有扩展标识的话也是用peerid识别。

一个辨认方法是,通常扩展标识是带斜杠的。
下图中qB版本都一样,但是中间两个显示的客户端标识没有斜杠,应该是关闭了扩展消息中的项目。

最后,用户列表中的国旗也有部分无法显示,建议补全。
部分IP对应的地区发生变更,可能也没有及时更新。
目前是否提供IP库的热更新?

1個讚

可以的话,能在加一个选项卡,显示对方是否TCP公网可连接吧
例如发ACK请求的时候,对方能回复,那么判断对方就是可连接的公网
比如发起状态为本地,通过TCP协议连接到对方,那么对方就是公网
但是如果自身是公网的时候,可能别人连接到自身导致变成远程,客户端来不及发请求连接对方,那么就要额外发一个ack包去给这个已连接用户来判断是否公网ip

例如新选项卡“公网ip可连接” 值:是、否、未知无法判断

或者用远程端口和监听端口是否一致,并且连接类型协议是TCP的时候,判断是公网ip显示出来也可以
这个方法二可以避免ack请求包浪费,以本地计算数值是否一致的方式来判断对方是否公网

目前已知的判断方法只有人工去观察远程端口和监听端口是否一致,一致的话,对方就是公网ip,如果不一致那么对方就是内外ip,但是这样不利于人类观察,因为要去用脑子计算一次两个数值是否相同,所以做一个新选项来显示对方是否公网吧

如果连接协议用UTP的时候,则显示未知无法判断

这个功能做了,就能很好的分辨对方是否公网ip了
就可以加一个反吸血。。。拉黑内网ip用户 因为内网往往起不到很好的分流上传效果,种源发种只想传给公网ip的用户

我倒希望 BitComet 有一个功能,
把我的 500 Mbps 上传 快速完整榨干 100 GB,
我就能提早收工.

建议扩充内置的peer ID识别库至少应该包含所有在BEP20中列出的已知客户端

已知客户端列表
...

'AG' - Ares
'A~' - Ares
'AR' - Arctic
'AV' - Avicora
'AX' - BitPump
'AZ' - Azureus
'BB' - BitBuddy
'BC' - BitComet
'BF' - Bitflu
'BG' - BTG (uses Rasterbar libtorrent)
'BR' - BitRocket
'BS' - BTSlave
'BX' - ~Bittorrent X
'CD' - Enhanced CTorrent
'CT' - CTorrent
'DE' - DelugeTorrent
'DP' - Propagate Data Client
'EB' - EBit
'ES' - electric sheep
'FT' - FoxTorrent
'FW' - FrostWire
'FX' - Freebox BitTorrent
'GS' - GSTorrent
'HL' - Halite
'HN' - Hydranode
'KG' - KGet
'KT' - KTorrent
'LH' - LH-ABC
'LP' - Lphant
'LT' - libtorrent
'lt' - libTorrent
'LW' - LimeWire
'MO' - MonoTorrent
'MP' - MooPolice
'MR' - Miro
'MT' - MoonlightTorrent
'NX' - Net Transport
'PD' - Pando
'qB' - qBittorrent
'QD' - QQDownload
'QT' - Qt 4 Torrent example
'RT' - Retriever
'S~' - Shareaza alpha/beta
'SB' - ~Swiftbit
'SS' - SwarmScope
'ST' - SymTorrent
'st' - sharktorrent
'SZ' - Shareaza
'TN' - TorrentDotNET
'TR' - Transmission
'TS' - Torrentstorm
'TT' - TuoTu
'UL' - uLeecher!
'UT' - µTorrent
'UW' - µTorrent Web
'VG' - Vagaa
'WD' - WebTorrent Desktop
'WT' - BitLet
'WW' - WebTorrent
'WY' - FireTorrent
'XL' - Xunlei
'XT' - XanTorrent
'XX' - Xtorrent
'ZT' - ZipTorrent

...

'A' - ABC
'O' - Osprey Permaseed
'Q' - BTQueue
'R' - Tribler
'S' - Shadow's client
'T' - BitTornado
'U' - UPnP NAT Bit Torrent

...

也可以参考这个项目添加更多的客户端记录
bittorrent-peerid/index.js at master · webtorrent/bittorrent-peerid · GitHub


目前已知彗星缺少以下这些国家/地区的旗帜 只能显示代码

可参考项目:eMule 地区旗帜库 countryflag32.dll(famfamfam 版与 Flagfox 版) | eMule Fans 电骡爱好者

缺失的旗帜

:cyprus: CY - 塞浦路斯(Cyprus)
:dominican_republic: DO - 多米尼加共和国(Dominican Republic)
:morocco: MA - 摩洛哥(Morocco)
:new_zealand: NZ - 新西兰(New Zealand)
:costa_rica: CR - 哥斯达黎加(Costa Rica)
:uruguay: UY - 乌拉圭(Uruguay)
:serbia: RS - 塞尔维亚(Serbia)
:mauritius: MU - 毛里求斯(Mauritius)
:lithuania: LT - 立陶宛(Lithuania)
:fiji: FJ - 斐济(Fiji)
:malaysia: MY - 马来西亚(Malaysia)
:bangladesh: BD - 孟加拉国(Bangladesh)
:kenya: KE - 肯尼亚(Kenya)
:greece: GR - 希腊(Greece)
:south_africa: ZA - 南非(South Africa)
:liberia: LR - 利比里亚(Liberia)
:iceland: IS - 冰岛(Iceland)
:ecuador: EC - 厄瓜多尔(Ecuador)
:aruba: AW - 阿鲁巴岛(Aruba)
:barbados: BB - 巴巴多斯(Barbados)

建议在补齐旗帜后 也建议添加复制名称的功能
一些旗帜的并不方便辨识 仍然需要通过名称来识别

现在要获取名称只能将鼠标放置在旗帜上来查看悬浮提示
建议可以右键旗帜 复制 将名称复制到剪贴板上
目前在旗帜上右键复制没有任何效果


现在的ip库似乎是2020年的
可以更新一下
要是能明确数据库格式也可以让用户自行更新

这之前我建议过,
没被采纳,
意思就是 每个人都认识 全世界 的 旗.

所以这两个都是tt,该怎么算

其实彗星现在的这个显示逻辑也没什么问题
要是国家名称能显示成对应的语言就好了

现在一律是英文 也不太好认
qb就可以跟随语言变化


不冲突 一个是全大写 一个是全小写

其实彗星现在的这个显示逻辑也没什么问题
要是国家名称能显示成对应的语言就好了

现在一律是英文 也不太好认
qb就可以跟随语言变化

贼困难,
之前贼多建议 都没被采纳,
现在都懒的建议了.

秀个 英文 都难,
更何况要 秀 中文.

那就用IP吧 复制IP手动去在线查询网站上去查
在线工具应该还是比较准的


通过大小写搭配还可以搞出 “Tt” 和 “tT” 还能容纳两种客户端(

关于 qbittorrent 在匿名模式下能否以被比特彗星正确识别问题的研究

实验准备

qbittorrent 客户端信息

比特彗星 客户端信息

qbittorrent 开启匿名模式

两客户端同时下载相同的测试资源
观察两客户端的用户栏信息

比特彗星

qbittorrent

观察比特彗星中对端 qbittorrent 的客户端名称
qbittorrent 被正确识别

其版本号中没有斜杠 应该是通过 peer ID 来判断的

检查 peer ID

十六进制原始ID

2d7142343535302d654474704d732a4975427365

解码后的字符串:

-qB4550-eDtpMs*IuBse

peer ID 为标准的 qbittorrent ID

查看 qbittorrent 文档中对匿名模式的解释:

从文档来看在匿名模式下 qbittorrent 确实不会通过通告自己的客户端名称

不过没有对更旧版本的 qbittorrent 进行测试
但从文档来看即使在更旧的版本中 匿名模式下
客户端依然会正确传递 peer ID

而比特彗星可以在对端没有通告客户端名称的情况下
通过 peer ID 识别客户端类型 若其在已知列表中

结论:qbittorrent 在匿名模式下可以被比特彗星正确识别不会出现 n/a 的情况

能不能增加一个设置自动封禁索取超过种子文件2倍大小的其他客户端?

测试可以从以下链接自行下载数据库更新
https://download.ip2location.com/lite/IP2LOCATION-LITE-DB1.IPV6.BIN.ZIP
解压后覆盖\BitComet\ip2location\ip2location.bin
旗帜应该没办法自己加了

我倒觉的 旗帜 不重要,
谁能认识 全世界的所有旗帜,
而且有些旗帜长的贼像 常搞错,
反而 文字 更容易懂.

确实有效果 虽然不支持热重载 但也没关系


我都有些担心旗帜是写死在程序里的了

不是说旗帜不重要 软件的一致性还是要保持的
用名字来识别当然更方便

像常见的地方直接看一眼旗帜就认出来了
不常见的看一下名字就可以

这是最理想的情况

之前我建议过,
同时显示 旗帜 + 文字,
没被采纳.