基于DHT的p2p网络资源爬虫
a magnet-link spider in p2p. 一个磁力链接收集器,让你简单快速地收集DHT网络中其他节点下载资源的信息.
go get -u github.com/bttown/torrent-spider
go build github.com/bttown/torrent-spider
./torrent-spider
package main
import (
"fmt"
"github.com/bttown/dht"
"github.com/bttown/metadata"
"log"
)
var (
collectorQueriesBufferSize = 5000
collectorMaxPendingQueries = 2000
)
var (
// DHT 节点
node = dht.NewNode(dht.OptionAddress("0.0.0.0:8662"))
// 种子信息获取器
collector = metadata.NewCollector(metadata.Options{
QueriesBufferSize: collectorQueriesBufferSize,
MaxPendingQueries: collectorMaxPendingQueries,
})
)
func main() {
// 新获取种子时调用的Hook
collector.OnFinish(func(req metadata.Request, torrent metadata.Torrent) {
magnetLink := fmt.Sprintf("magnet:?xt=urn:btih:%s", req.HashInfo)
log.Println("[Metadata]", magnetLink, torrent.Info.Name)
})
defer collector.Close()
// 当发现DHT网络中有人下载资源时,告知收集器去获取种子详细信息
node.PeerHandler = func(ip string, port int, hashInfo, peerID string) {
if err := collector.Get(&metadata.Request{
IP: ip,
Port: port,
HashInfo: hashInfo,
PeerID: peerID,
}); err != nil {
panic(err)
}
}
node.Serve()
}