是否有一个用C#编写的完全(我的意思是完全)写的BitTorrent客户端?我知道用单声道写的BitTorrent客户端,我非常喜欢它.
除了用C#编写的MonoTorrent和BitSharp之外还有其他开源BitTorrent客户端正在开发中吗?
只是想知道C#程序员们在那里会产生多少兴趣"C#中的开源位源客户端".
编辑:请查看Michael Stum的南瓜洪流http://pumpkintorrent.codeplex.com/
@Michael:感谢分享项目网址.
@Allan:感谢MonoTorrent;)
我对线级协议的想法不是很清楚.我听说BitTorrent使用它并读到线程级协议可以被认为是API的反面.我读RMI调用可以被认为是线程协议,但我仍然有点困惑.有人可以用更好的方式解释这个吗?
我一直试图了解洪流磁铁技术,但我似乎无法弄清楚在打开磁铁链接时你是如何与第一个同伴联系的.
当你得到如下所示的磁力链接时,它不包含初始对等 - 只有BitTorrent信息哈希(btih)和文件名.
magnet:?xt=urn:btih:bbb6db69965af769f664b6636e7914f8735141b3&dn=ubuntu-12.04-desktop-i386.iso
Run Code Online (Sandbox Code Playgroud)
根据BitTorrent和Magnets:他们如何运作?(MakeUseOf)
如果单击未指定跟踪器(
tr
)的磁力链接,将使用DHT找到第一个对等方.一旦你有了同伴,同伴交换也会开始.
维基百科上的DHT文章没有具体说明如何找到同伴,但在Kademlia文章中(BitTorrent DHT所基于的),它说
想要加入网络的节点必须首先完成引导过程.在此阶段,加入节点需要知道另一个节点的IP地址和端口 - 一个已经参与Kademlia网络的引导节点(从用户或从存储的列表中获得).
但它从哪里知道该节点?我没有在磁铁链接中看到地址或任何内容.由于它是分散的(无跟踪),我不希望它提前知道节点.或者DHT实际上不是分散的?
是否有一个Python BitTorrent库可以正常工作?
我需要为研究项目修补BitTorrent协议,我不想重新发明轮子并编写我自己的协议实现(我也不能这样做)
我查看了官方BitTorrent客户端的来源,但这不是我想要的.库/模块是我更喜欢的.
谢谢!
我已经四处寻找答案,但我似乎只能找到适合你的软件.有人知道如何在python中这样做吗?
我试图理解磁链接如何工作,因为我读过它们使用DHT和PEX来获取对等体,但如果我是网络中的新节点,我怎么能找到只有哈希的哈希文件?!它不总是需要链接到已知主机吗?
谢谢
我需要一种方法将.torrents转换成磁力链接.想在python中这样做.有没有图书馆已经这样做了?
如果防火墙默认阻止所有传入连接,p2p技术如何工作?像种子一样,你如何连接到共享文件并从中获取信息的每个人?它是通过中继服务器还是什么?
这个问题的目标是我只是想更好地理解P2P和网络以及安全/加密的本质.我是一名前端Web开发人员,如果我们低于HTTP请求,我对网络堆栈的了解并不是很好.
话虽如此,我试图了解互联网服务提供商和所识别的内容如何"嗅探"洪流流量.我觉得这个问题会暴露我的无知,但是不可能有某种类似HTTPS的P2P协议那么不可读吗?
我知道一个给定的数据包必须在整个过程中识别它到网络的目的地,但是不能将数据包配置为只显示它们的目的地,以便没有人能够确定它的目的,直到它到达目的地为止?为什么ISP显然是一个不可复制的情况,只能看看P2P流量并了解它的一切,但SSH是非常安全的?
encryption p2p bittorrent network-programming network-security
我正在用Java开发一个bitTorrent客户端.我知道网上有很多图书馆,但我无能为力; 我想要自己的.无论如何,我注意到一些奇怪的行为,也许你们知道我缺少的东西:
socketTimeOut
或者"无法连接"错误).显然,从跟踪器接收对等体列表.我还通过尝试ping它们来随机测试一些IP; ping通常是成功的.(对于所有统计数据,数字并不准确.)
一些BitTorrent问题:
更新#4:由于考虑到答案,我切断了一些问题
这是'80%失败的连接率问题': 我的80%未能连接费率的原因是什么?这不是坏运气,因为我试图连接的每个客户都没有我的空间.我正在听6881,但也测试了其他端口.昨天我取得了巨大的成功,接受了一堆连接(相同的代码,过去几周的一些变化),片段消息开始流动..所以我的代码并非完全没用.
在关闭之前,torrent客户端是否会向跟踪器发送最后一条消息,event=stopped
使其使用对等信息更新其内部数据库,以便它不会作为响应发送包含无用对等信息的列表?或者只是他们应该......因为它似乎真的让我收到死去的同龄人.
[length: 1][Id = 5][payload: {}]
); 似乎他们发送了bitfield,我发送了bitfield ..(有些发送像疯了一样有消息),他们意识到我很穷,他们放弃了我.握手后有些掉线连接.(太粗鲁了.)更新#1:似乎与μTorrent客户端的连接表现为上述模式(BITFIELD,HAVE轰击,紧密连接).我在本地测试了一堆bitTorrent客户端(μTorrent,BitTorrent,Vuze,BitCommet,Deluge),并且只在μTorrent上发现了这种模式.在其他人,沟通很好(HS,BITFIELD,UNCHOCE和快乐分享).现在,这个μTorrent可能是最流行的bitTorrent客户端(6/8连接开始是μTorrent),所以......任何想法?
更新#2:在保持"bad list,"
它看起来确实如此(这实际上是有道理的).例如,使用μTorrent,我注意到以下无连接间隔(30秒,1分钟,1分30秒,2分钟......).通过"无连接"意味着,在先前的连接结束之后,x
几秒钟没有接受新的连接.
更新#3:有消息轰炸可能是所谓的"懒惰的位域"(做了几个测试,在HAVE中提到的每个部分都不存在于BITFIELD中).我看到μTorrent和BitTorrent使用这种方法.
另一个结论是:有些客户在尊重BitTorrent规范方面更具限制性,如果违反规则将关闭连接.例如:我注意到BitTorrent和BitTornado,如果你发送一个bitfield消息但没有碎片他们会关闭连接(没有碎片=空位域..但规格说"它是可选的,如果客户端没有碎片则无需发送"),如果你发送任何类型的消息之前发送UNCHOKE消息(甚至没有兴趣),其他人会关闭连接.
更新#4: 因为我最初对第一个问题感兴趣(可能是因为我的80%连接速率失败的原因是什么?...被激起的问题可能更受欢迎),这里有一些解释为什么有时连接是不成功的:
1)如果我在停止前一个连接后立即开始与对等体的连接(通过停止 - 我的意思是关闭套接字):另一边的对等体直到下一次读/写才知道.
详细信息: - 我注意到了很多次,这在完成下载后更加明显..如果我关闭连接,那么直到它尝试发送新的KEEP_ALIVE(~2分钟)才会意识到这一点.但是如果我在交换REQUEST-PIECE时关闭,对等体会很快意识到.在关闭连接后的第一个场景中,我仍然存在于uTorrent对等选项卡中.如果我查看记录器选项卡,大约2分钟后,它会意识到我已经离开了.
2)似乎uTorrent看到我的BITFIELD消息被破坏了(显然应该在接收后关闭连接)(这不会发生总是..我也检查并重新检查,msg没问题和其他BT客户端没有这样的问题) .
详细信息: - 如果我查看uTorrent记录器选项卡,它会在我发送位域后显示"Disconnected:Bad packet" - 我打算尝试执行lazzy bitfield,也许我可以逃避这个(我也看到了大多数BT客户这样做)
3)(超过可能链接到#1)当uTorrent不允许我重新连接时,我在logger选项卡中看到:"Disconnect:已经有相同的连接(丢弃额外连接)"..目前我选择随机本地端口当启动一个新的连接时(看到这个在大多数BT客户端中实现),但这并没有欺骗它,他仍然看到我的同伴已经存在于他的"对等列表"中(可能是ip匹配).. Buuut:在30%的测试中,相同的情况,它确实允许我重新连接:) ..我还没有解释为什么
4)还有一件事:在你关闭uTorrent中的一个洪流之后,看起来'接触者的关注'仍然存在(通过我的意思是:右键单击+停止).这意味着我仍然可以启动连接,发送HANDSHAKE ..在此之后,我断开连接(它没有HANDSHAKE回来).uTorrent记录器中的消息:"Disconnect:No such torrent:80FF40A75A3B907C0869B798781D97938CE146AE",这个长字符串是我的信息哈希..在与其他BT客户端一起测试时看到了这一点.
更多信息:
bittorrent ×10
magnet-uri ×3
p2p ×3
python ×3
dht ×2
.net ×1
c# ×1
encryption ×1
extract ×1
firewall ×1
hash ×1
java ×1
kademlia ×1
networking ×1
protocols ×1
sha1 ×1
sockets ×1
terminology ×1