dht:Go 写的 BitTorrent DHT 爬虫

发布时间:2026/6/27 18:02:12
dht:Go 写的 BitTorrent DHT 爬虫 文章目录dhtGo 写的 BitTorrent DHT 爬虫实现了哪些协议两种模式代码示例几个注意点适合谁用dhtGo 写的 BitTorrent DHT 爬虫在 GitHub 上有 2,774 Star。shiyanhui/dht 这个项目用 Go 实现了 BitTorrent 的 DHT 协议。它能干两件事一是作为标准 DHT 服务器跑二是以爬虫模式去抓取网络里的种子元数据。实现了哪些协议项目支持四个 BEP 协议BEP-3部分BEP-5BEP-9BEP-10这几个协议覆盖了 DHT 的核心功能。BEP-5 定义了如何在 DHT 网络里找节点和存储数据BEP-9 是元数据扩展能让你拿到种子文件的信息而不用下载整个种子。两种模式标准模式就是规规矩矩按协议来可以当一个正常的 DHT 服务器用。爬虫模式不一样。它不完全遵守 BEP 协议目标是尽可能多地抓取元数据。收到 AnnouncePeer 请求时它会主动去拉取对应的种子信息。用这个模式你可以搭一个类似 BTDigg 那样的 BT 搜索引擎。代码示例用起来不复杂。创建一个 Wire 下载器监听响应然后配置爬虫模式的回调downloader:dht.NewWire(65535)gofunc(){forresp:rangedownloader.Response(){fmt.Println(resp.InfoHash,resp.MetadataInfo)}}()godownloader.Run()config:dht.NewCrawlConfig()config.OnAnnouncePeerfunc(infoHash,ipstring,portint){downloader.Request([]byte(infoHash),ip,port)}d:dht.New(config)d.Run()代码量不大核心逻辑就是监听 DHT 网络里的节点广播拿到 InfoHash 和 IP/Port然后请求元数据。几个注意点默认配置大概吃 300M 内存。如果资源有限调整 MaxNodes 和 BlackListMaxSize 这两个参数。另外目前不支持 NAT 穿透也就是说只能在公网环境下跑局域网里不行。项目 TODO 里有 NAT Traversal 的计划但还没实现。爬虫模式下速度可能会比专门的爬虫慢一些。这是因为项目本身优先实现标准协议不是专门为爬取优化的。加上有 IP 黑名单机制可能会误封一些正常节点。适合谁用想自己搭 BT 资源搜索引擎的开发者或者想研究 DHT 协议实现的人。代码是 Go 写的结构清晰读起来不费劲。想自己搭 BT 资源搜索引擎的开发者或者想研究 DHT 协议实现的人。代码是 Go 写的结构清晰读起来不费劲。