专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

BT背后的技术

  历史
  早期的BT下载主要是通过开放的网站,进行种子资源的公布。在利用tracker中心服务器完成下载peer的交换,最终实现从下载用户的电脑中获取资源。
  在这个过程中,存在两个风险比较大的点:
  第一个公布种子的网站,种子文件包含了所需要下载资源的全部信息,很容易被检测出种子内容是否合规,从而关闭种子公布资源站点。
  第二个提供tracker的中心服务节点,这个也是很容易从种子中查询到的,很容易被封杀。导致P2P自由的分享环境被打破。
  在这个基础上,就出现替代tracker服务器和种子一些新方法,我们简单的介绍下比较主流的去中心化tracker和种子分享网站的P2P分享网络。
  torrentandmagnet
  首先从第一步获取种子开始,我们一般想找一部电影游戏或者一些其他资源,一般都是网盘搜索,或者去BT站,PT去找种子,或者论坛上去找链接。先介绍下种子和磁链的关系,种子一般以。torrent结尾的索引文件。torrentd8:announce62:https:xxxxx。im。xxx88696dc48cbdad7518e4b111b83ee77c7:comment14:TorrenTGui。ORG10:createdby13:uTorrent221013:creationdatei1523099215e8:encoding5:UTF84:infod6:lengthi23715250176e4:name14:SKYHUNTER。iso12:piecelengthi4194304e6:pieces113100:xxx
  这种被序列化的信息就是种子了,里面使用的是一种明文的序列化方法。bencode第二节简单介绍。
  反序列化里面主要包含以下信息:announce:Tracker的主服务器announcelist:Tracker服务器列表comment:种子文件的注释comment。utf8:种子文件注释的utf8编码creationdate:种子文件建立的时间,是从1970年1月1日00:00:00到现在的秒数。encoding:种子文件的默认编码,比如GB2312,Big5,utf8等info:所有关于下载的文件的信息都在这个字段里,根据下载的是单个文件还是多个文件,子字段的项目会不同。files:表示文件的名字,大小,该字段包含如下三个子字段:length:文件的大小,用byte计算path:文件的名字,在下载时不可更改path。utf8:文件名的UTF8编码,
  多文件Torrent的结构的树形图为MultifileTorrentannounceannouncelistcommentcomment。utf8creationdateencodinginfofileslengthpathpath。utf8namename。utf8piecelengthpiecespublisherpublisherurlpublisherurl。utf8publisher。utf8nodes
  单文件Torrent的结构的树形图为SingleFileTorrentannounceannouncelistcommentcomment。utf8creationdateencodinginfolengthnamename。utf8piecelengthpiecespublisherpublisherurlpublisherurl。utf8publisher。utf8nodesmagnet
  为了解决第一种子文件包含的内容信息太多,容易被检测中其中的关键信息。第二种子文件过大,不太容易扩散分享。出现了一种替代种子文件的信息字符串就是磁力链接。形如:magnet:?xturn:btih:b7d9b9d9df8d7678af1f2542677e195fdbdb1674
  其中主要字段是btih,其实这里的值就是bt种子文件中info字段sha1值的base32编码后的字符串。
  bencode
  种子文件的bencode包含四种类型的编码:string类型
  string类型的编码格式为〔length〕:〔string〕。以字符串的长度开头,加一个冒号,并以字符串内容结束。
  示例:abc3:abcint类型
  int类型的编码格式为i〔int〕e。以i开头,加上数字,以e结尾。
  示例:123i123eList类型
  List类型的编码格式为l〔object〕e。以l开头,加上列表中各个元素的编码(元素的类型同样为BEncoding支持的类型),以e结尾。
  示例:Listabc,123l3:abci123eeDictionarystring,object类型
  Dictionarystring,object类型的编码格式为d〔KeyValuePair〕e。以d开头,加上字典中每个键值对的编码,以e结尾。
  示例:Dictionary{name:createchen},{age:23}d4:name11:createchen3:agei23ee
  以上编码list和dictionary支持嵌套。bencode编码方式也被用在后续的BT查询消息的构建上。
  去中心化的peer交换网络DHT
  在去中心化的交换网络上,每个用户(node)都会存储一部分种子信息和种子索引信息。这些索引信息里面包含自己正在下载的资源(peer)、自己周边正在下载的资源信息(peer)、以及一些可能拥有某种子资源的信息(node)。当我们获取到某个种子或者磁链时,就会到这个网络中查询哪些用户在进行这个种子的资源下载,获取这些用户的peer信息(包含ipporttoken),然后和这些peer进行连接,获取资源。在查询的过程中,主要利用krpc进行调用,krpc是一种基于udp的rpc调用服务。
  krpc
  基本结构如下:{t:aa,transcationID216twobytey:r,messagetypequeryqresponsererroreq:。pingfindnodegetpeersr:{}ea:queryparams}
  一条KRPC消息由一个独立的字典组成,其中有2个关键字是所有的消息都包含的,其余的附加关键字取决于消息类型。每一个消息都包含t关键字,它是一个代表了transactionID的字符串类型。transactionID由请求节点产生,并且回复中要包含回显该字段,所以回复可能对应一个节点的多个请求。transactionID应当被编码为一个短的二进制字符串,比如2个字节,这样就可以对应216个请求。另一个每个KRPC消息都包含的关键字是y,它由一个字节组成,表明这个消息的类型。y对应的值有三种情况:q表示请求,r表示回复,e表示错误。
  主要包含以下四个操作:ping
  检测节点是否存活。
  最基础的请求是一个ping。qping,一个ping请求有一个参数,id,它的值是一个20字节的字符串,包含网络字节排序的发送者的节点ID。一个ping的适当回复有一个关键字id,包含发出回复的节点的节点ID。arguments:{id:queryingnodesid}response:{id:queriednodesid}ExamplePacketspingQuery{t:aa,y:q,q:ping,a:{id:abcdefghij0123456789}}bencodedd1:ad2:id20:abcdefghij0123456789e1:q4:ping1:t2:aa1:y1:qeResponse{t:aa,y:r,r:{id:mnopqrstuvwxyz123456}}bencodedd1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:refindnode
  查找节点。
  findnode被用来查找给定ID的节点的联系信息。这时KPRC协议中的qfindnode。findnode请求包含2个参数,第一个参数是id,包含了请求节点的ID。第二个参数是target,包含了请求者正在查找的节点的ID。当一个节点接收到了findnode的请求,他应该给出对应的回复,回复中包含2个关键字id和nodes,nodes是一个字符串类型,包含了被请求节点的路由表中最接近目标节点的K(n)个最接近的节点的联系信息。在规范的DHT网络中,K(n)建议值是8。arguments:{id:queryingnodesid,target:idoftargetnode}response:{id:queriednodesid,nodes:compactnodeinfo}ExamplePacketsfindnodeQuery{t:aa,y:q,q:findnode,a:{id:abcdefghij0123456789,target:mnopqrstuvwxyz123456}}bencodedd1:ad2:id20:abcdefghij01234567896:target20:mnopqrstuvwxyz123456e1:q9:findnode1:t2:aa1:y1:qeResponse{t:aa,y:r,r:{id:0123456789abcdefghij,nodes:def456。。。}}bencodedd1:rd2:id20:0123456789abcdefghij5:nodes9:def456。。。e1:t2:aa1:y1:regetpeers
  查找文件peer。
  getpeers与torrent文件的infohash有关。这时KPRC协议中的qgetpeers。getpeers请求包含2个参数。第一个参数是id,包含了请求节点的ID。第二个参数是infohash,它代表torrent文件的infohash。如果被请求的节点有对应infohash的peers,他将返回一个关键字values,这是一个列表类型的字符串。每一个字符串包含了CompactIPaddressportinfo格式的peers信息。如果被请求的节点没有这个infohash的peers,那么他将返回关键字nodes,这个关键字包含了被请求节点的路由表中离infohash最近的K个节点,arguments:{id:queryingnodesid,infohash:20byteinfohashoftargettorrent}response:{id:queriednodesid,token:opaquewritetoken,values:〔peer1infostring,peer2infostring〕}or:{id:queriednodesid,token:opaquewritetoken,nodes:compactnodeinfo}ExamplePacketsgetpeersQuery{t:aa,y:q,q:getpeers,a:{id:abcdefghij0123456789,infohash:mnopqrstuvwxyz123456}}bencodedd1:ad2:id20:abcdefghij01234567899:infohash20:mnopqrstuvwxyz123456e1:q9:getpeers1:t2:aa1:y1:qeResponsewithpeers{t:aa,y:r,r:{id:abcdefghij0123456789,token:aoeusnth,values:〔axje。u,idhtnm〕}}bencodedd1:rd2:id20:abcdefghij01234567895:token8:aoeusnth6:valuesl6:axje。u6:idhtnmee1:t2:aa1:y1:reResponsewithclosestnodes{t:aa,y:r,r:{id:abcdefghij0123456789,token:aoeusnth,nodes:def456。。。}}bencodedd1:rd2:id20:abcdefghij01234567895:nodes9:def456。。。5:token8:aoeusnthe1:t2:aa1:y1:reannouncepeer
  发起请求节点。
  这个请求用来表明发出announcepeer请求的节点,正在某个端口下载torrent文件。announcepeer包含4个参数。第一个参数是id,包含了请求节点的ID;第二个参数是infohash,包含了torrent文件的infohash;第三个参数是port包含了整型的端口号,表明peer在哪个端口下载;第四个参数数是token,这是在之前的getpeers请求中收到的回复中包含的。收到announcepeer请求的节点必须检查这个token与之前我们回复给这个节点getpeers的token是否相同。如果相同,那么被请求的节点将记录发送announcepeer节点的IP和请求中包含的port端口号在peer联系信息中对应的infohash下。arguments:{id:queryingnodesid,impliedport:0or1,infohash:20byteinfohashoftargettorrent,port:portnumber,token:opaquetoken}response:{id:queriednodesid}ExamplePacketsannouncepeersQuery{t:aa,y:q,q:announcepeer,a:{id:abcdefghij0123456789,impliedport:1,infohash:mnopqrstuvwxyz123456,port:6881,token:aoeusnth}}bencodedd1:ad2:id20:abcdefghij012345678912:impliedporti1e9:infohash20:mnopqrstuvwxyz1234564:porti6881e5:token8:aoeusnthe1:q13:announcepeer1:t2:aa1:y1:qeResponse{t:aa,y:r,r:{id:mnopqrstuvwxyz123456}}bencodedd1:rd2:id20:mnopqrstuvwxyz123456e1:t2:aa1:y1:re
  DHTandKademlia
  DHT(DistributedHashTable)分布式哈希表,Kad网络是其的一种实现方式。Kademlia协议(以下简称Kad)是美国纽约大学的PetarP。Maymounkov和DavidMazieres。在2002年发布的一项研究结果《Kademlia:ApeertopeerinformationsystembasedontheXORmetric》。nodeid
  2160位(bit)的标志id,可以是本机mac的sha1值。在DHT分享网络中,资源的infohash正好也是160位(bit)。在利用kad网络,将infohash存储于与其相近的多个node中,方便在查询过程中利用getpeer进行快速逼近。在如何判定是否与其相近,kad网络利用的是xor运算。
  xordistance
  Kademlia根据两个标示符之间的距离来把对分配给特定的节点。对于两个160位标示符x和y,Kademlia把它们之间的距离定义为二者按位异或(XOR)结果的整数值,d(x,y)xy。
  首先,XOR是一种有效的度量方法(虽然不是欧几里得几何意义上的)。很显然,d(x,x)0;当x不等于y时,d(x,y)0,并且对于任意的x,y来说,d(x,y)d(y,x)。XOR还具有三角特性:d(x,y)d(y,z)大于等于d(x,z)。该三角特性可以从如下事实得出:d(x,y)d(y,z)d(x,z),并且对于任意大于等于0的a和b:ab都大于等于ab。
  同时,XOR也刻画出了隐含在我们基于二叉树描绘的系统中距离的概念。在160位ID的满二叉树中,两个IDs间的距离大小就是包含它们的最小子树的高度。当树不是满的时,距离IDx最近的叶子就是其ID和x具有最长的公共前缀的那个叶子。如果树中有空的分支,那么具有最长公共前缀的叶子就会有多个。此时,我们基于该树的空分支,把x对应的位取反得到IDx’,那么距离x’最近的叶子即为距离x最近的叶子。利用xor的距离测算,最坏O(n)即可获得到查询结果。
  routingtable
  路由表是一颗二叉树,其叶子是kbuckets。每个kbucket存放着具有某些公共ID前缀的节点。前缀就是该kbucket在二叉树中的位置。了因此,每个kbucket覆盖了ID空间的某个范围,所有kbucket合起来完整覆盖了整个160位ID空间。
  节点是根据需要动态分配到路由树中的。一开始,节点A的路由树只有一个节点覆盖整个ID空间的单个kbucket。当A通过findnode或者getpeer获取一个新节点的联系信息时,就会试图把其插入到相应的kbucket中。如果该bucket不满,简单将其插入即可。否则,如果该kbucket的区间范围包含了A自己的节点ID,那么该bucket会分裂为两个新的buckets,原有的内容会被划分到这两个buckets中,接着重复插入过程。如果kbucket已满且不含有A的节点ID,那么就直接丢弃这个新的联系信息。需要注意的是P2P节点在线时间是不稳定的,需要定期去ping检测每个kbucket捅中的节点,如果死掉则剔除掉。按照beps005规范没有更新的节点15分钟需要检测一次。每次krpc操作中可以正常响应的则认为是活跃节点。
  在Kad网络中还存在一种高度不平衡的二叉树均衡的过程,在BT的DHT网络中,目前没有看到使用。
  BT爬虫实现要点
  1。先伪装自己向公共节点进行findnode查询,将自己加入网络。router。bittorrent。com:6881,router。utorrent。com:6881,dht。transmissionbt。com:6881,
  2。在返回的findnode中,替换返回nodeid的某些n位,造成与返回node节点id不在区间内,继续探索整个网络节点分布。funcCreateRandomFindNode(targetstring)(res〔〕byte,transidstring){msg:make(map〔string〕interface{})msg〔t〕TCIDMNGR。GetTranscationID()msg〔y〕qmsg〔q〕findnodemsg〔a〕map〔string〕interface{}{id:target〔:15〕OwnNodeID。ToString()〔15:〕,target:target}return〔〕byte(PackageMessage(msg)),msg〔t〕。(string)}
  3。一般BT爬虫被动接收announcepeer从peer的信息中使用peerwireprotocol获取metadata即种子信息。然后分析torrent中的信息确认文件内容。
  4。注意进行ip黑名单过滤,DHT网络中,存在很多这样爬虫,在实现过程中,发现北美有个ip爬虫疯狂变更nodeid进行findnode请求,把内存塞满的情况(1G),注意控制本地DHT表的总节点数。
  5。加速搜索过程,在获取getpeer请求时进行递归getpeer请求,注意控制深度。可以扩大Kbucket桶的大小,降低二叉树的深度。
  6。在使用peerwireprotocol过程中,因为运营商对P2P封锁,很多情况下下载种子失败,可以使用知名种子库进行infohash下载。
  7。注意控制udp发包速度,以免被主机商防火墙误以为中毒。
  PT
  额外提一点,关于现在的PT,PT网络是禁止开启DHT,防止资源外泄。在PT站发布的种子都会包含PT站的私有tracker服务地址,每个会员下载的种子也会包含自己的私有token,当种子泄露到BT上时,PT管理员很容易封禁掉该会员的信息。PT致力于打造高端高活跃的P2P分享网络。
  参考资料
  http:www。cs。rice。eduConferencesIPTPS02109。pdf
  http:www。bittorrent。orgbepsbep0005。html
  http:www。bittorrent。orgbepsbep0003。html
  http:www。bittorrent。orgbepsbep0000。html
  http:www。bittorrent。orgbepsbep0009。html
  https:wiki。theory。orgindex。php
  作者:戚华威
  来源:微信公众号:讯飞技术沙龙
  出处:https:mp。weixin。qq。comsY1hMesi54glenNt7nUCiw

肠胃不好,经常拉肚子,该怎么办才好?拉肚子必定是肠胃不好,但是肠胃不好不一定会拉肚子。肠道内的供血减少,影响食物消化能力,肠道蠕动变慢,收缩下降,影响肠道发炎,破坏肠道菌群,所以会出现便秘,胀气,腹泻等不良情况。导致恒大如果破产了,许老板有没有法律责任?他当董事长时没破产,离任之后破产他如何负法律责任?教训是投资者和操作者共同思考的问题。当然违法另当别论,秋后算账也是允许的,痕迹无法抺除。恒大破产是必然的,因为恒大集团市值只有34大长公主长公主公主郡主县主她们有什么不同?一般来说,大长公主就是皇帝的姑姑,长公主就是皇帝的姐妹,公主就是皇帝的女儿,郡主则是皇太子的女儿,县主就是亲王的女儿。当然也会有特列,比如宗室女也能变成公主,这个一般是皇帝特封来和请用四字语言描述郭德纲的道德及品质问题?德纲先生,应当讲德。别墅占地,业主指责。记者采访,纵徒拳说。所说相声,三俗很多。为博笑声,信口开河。救了相声,救了京剧?自我标榜,无人认可。但愿先生,重整山河。传递正能,万民同乐。三国杀为什么火不起来?个人观点三国杀由温转凉主要有以下几个原因。第一,游戏基本规则固化。三国杀的游戏规则在此不再多言,想必各位玩家都比较熟悉。对于刚刚接触游戏的人来说,游戏基本规则比较容易上手,但是时间国足绝杀32险胜越南,你觉得国足接下来还有戏吗?国足绝杀32险胜越南,你觉得国足接下耒还有戏吗?李钱继续执教没戏,换我们中超洋教,可能还有戏,虽然10月3号我们以32战胜越南,李钱还是他的个性执教,我能胜越南,的确有运气的成份,会计学专业毕业后出路是什么?这个问题我最有发言权了,我四十多转行做得会计。会计毕业可以考公务员,参公事业单位,可以开代做账公司,会计事务所,会计培训学校等,或者如果有资质承接中小企业代做账业务,还可以进大公司学生的手抄报该怎么画?我是小老师的闲言碎语,致力于回答有关教育方面的问题,仅代表个人观点,有待商榷,欢迎讨论交流。一什么是手抄报手抄报是丰富学生校园文化生活学科知识,培养学生的动手能力逻辑思维能力和创新上985211大学的学生放假回家学习吗?作为一名在武汉的非985院校的高校教师,我先说说我们学校的学生假期在做什么。首先,他们放假时间比985院校的早,当然时间也长一些,学校在培养方案中一般会安排两周企业参观实践课程(2区块链的发展前景怎么样?学习区块链专业技术难吗?区块链的发展前景我个人觉得可以从几方面来看。首先你要知道区块链是新型的互联网技术,简单来说就是一个去中心化的分布式账本,依托于底层密码学基础,建立在幸运网络上的完全透明的一种运营规本科是临床医学专业,考研有哪些专业可以选择?中域教育为你解答过来强答一波结论个人不为题主的未来做精确的选择,请题主根据实际情况,具体操作。不知道题主大三,目前有没有开始学习临床业务课(内外妇儿这些),如果学习了,那对自己方向
为什么要在太空研究燃料电池?专家为你解读视频加载中11月12日,长征七号遥六运载火箭在中国海南文昌航天发射场成功发射,将天舟五号货运飞船精准送入预定轨道。值得一提的是,此次天舟五号货运飞船上搭载的由航天科技集团五院自主研让探索太空的脚步迈得更稳更远(今日谈)12日上午,长征七号遥六运载火箭在我国海南文昌航天发射场成功发射,将天舟五号货运飞船精准送入预定轨道。天舟五号货运飞船在火箭点火起飞后约2个小时,顺利与在轨运行的空间站组合体进行自天冷干燥多吃它,三分钟学会,补钙润燥,咬一口香甜可口,真香头条创作挑战赛立冬过了之后,现在就是正式的冬天了,天气寒冷我们体表会感觉干燥,尤其是嘴唇,越舔越干。体表干燥,体内的干燥也不容忽视,天冷容易上火就是如此,太干燥了,吃一点点油炸或者1990年张学良被释放,记者问他最想见谁,他竟说出了一位汉奸名字1936年,在与杨虎城一起发动了西安事变之后,张学良就遭到了蒋介石的软禁,这场软禁从1936年年底,一直持续到了1990年。在这长达半个多世纪的软禁解除后,张学良终于恢复了自由之身杭州闹市旁的千年古刹,藏着中国唯一有明确纪年的大黑天宝成寺很小,或许是杭州最小的寺院。西湖东南吴山,有紫阳云居瑞石七宝等小山岭。宝成寺坐落于紫阳山东麓。从丁衙巷往里,一片民居右侧高处是山坡,拾级而上,绿竹掩映中有一小小院落。从坐东朝ampampquot我想你了,我们和好吧ampampquot在感情的世界里,根本就没有所谓的胜利者,只有一荣俱荣,一损俱损。逛微博的时候,看到一个这样的故事。男生和女生因为兴趣相似而互相吸引,刚在一起时也是甜甜蜜蜜。但随着感情的升温,问题也大笨蛋,你看不到的这些话后悔吗?那倒不会,难过是真的难过醒悟和顿悟哪个好?01十一月的秋末我们在一起学生时代的我躲在题海里,而你是谁我都不知道。身为学渣的我还蛮幸运的,碰到你这学霸,把我从下游带到中游。上退休教师三亚买22套房10年未拿到,仲裁交房开发商不认可裁裁决书,22份法院执行裁定书,10余年过去了,仍未解决22套房产的纷争。中房报记者陈标志丨三亚报道我在三亚购买房产都13年了,开发商一直不肯交付。11月初,68岁的叶女士抱着厚厚降温后,建议大家常吃4道热菜,驱寒润燥味道好,暖身又暖胃自打入冬后,这天气是一天比一天冷,寒风阴雨,不停袭来,衣服也是在一件件地加,可手脚总是捂不热。其实要想在寒冷的冬天也带有热气,仅仅是靠穿衣服是很难实现的,更应该改变饮食,多吃热菜热10月,你们家物业住在小区吗?10月份,由于各种情况的叠加,各家房地产企业显得格外困难,在大多数业主都处于暂停状态的同时,小区没有办法停下来,也最不能停下来的,就是物业。物业公司的好坏,在此次特殊情况中,起到了谢谢你,还有对不起陪你从脆弱到坚强,我会一直在也许,很久以后你才会懂,像我这般倔强的人是要鼓足多大的勇气才会求你别丢下我,又是憋着多大一股劲儿才彻底把你剥离出我的生活。我每天都会盯着你的主页看了一次
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网