Documentation ¶
Overview ¶
Package dht implements the bittorrent dht protocol. For more information see http://www.bittorrent.org/beps/bep_0005.html.
Index ¶
- Constants
- Variables
- func Decode(data []byte) (result interface{}, err error)
- func DecodeDict(data []byte, start int) (result interface{}, index int, err error)
- func DecodeInt(data []byte, start int) (result interface{}, index int, err error)
- func DecodeList(data []byte, start int) (result interface{}, index int, err error)
- func DecodeString(data []byte, start int) (result interface{}, index int, err error)
- func Encode(data interface{}) string
- func EncodeDict(data map[string]interface{}) string
- func EncodeInt(data int) string
- func EncodeList(data []interface{}) string
- func EncodeString(data string) string
- func Log(a ...interface{})
- func ParseKey(data map[string]interface{}, key string, t string) error
- func ParseKeys(data map[string]interface{}, pairs [][]string) error
- type Config
- type DHT
- func (dht *DHT) AnnouncePeer(infoHash string) error
- func (dht *DHT) DoAllGetPeers()
- func (dht *DHT) GetPeers(infoHash string) error
- func (dht *DHT) IsCrawlMode() bool
- func (dht *DHT) IsStandardMode() bool
- func (dht *DHT) Join2addr(addr string)
- func (dht *DHT) Log(args ...interface{})
- func (dht *DHT) RemoveAnnouncePeer(infoHash string) bool
- func (dht *DHT) Run()
- func (dht *DHT) Stop()
- type Fn
- type IStunList
- type MyTicker
- type Peer
- type Request
- type Response
- type StunList
- func (r StunList) GetDhtList() []string
- func (r StunList) GetDhtListRawA() []string
- func (r StunList) GetDhtMma() []multiaddr.Multiaddr
- func (r StunList) GetDhtUdpLists() []string
- func (r StunList) GetSelfPublicIpPort() (string, int)
- func (r StunList) GetSelfPublicIpPort1() (string, int)
- func (r StunList) GetStunLists() []string
- func (r StunList) SliceIndex(element string, data []string) int
- type Wire
Constants ¶
const ( // StandardMode follows the standard protocol StandardMode = iota // CrawlMode for crawling the dht network.值为1 CrawlMode )
const ( // REQUEST represents request message type REQUEST = iota // DATA represents data message type DATA // REJECT represents reject message type REJECT )
const ( // BLOCK is 2 ^ 14 BLOCK = 16384 // MaxMetadataSize represents the max medata it can accept MaxMetadataSize = BLOCK * 1000 // EXTENDED represents it is a extended message EXTENDED = 20 // HANDSHAKE represents handshake bit HANDSHAKE = 0 )
Variables ¶
var ( // ErrNotReady is the error when DHT is not initialized. ErrNotReady = errors.New("dht is not ready") // ErrOnGetPeersResponseNotSet is the error that config // OnGetPeersResponseNotSet is not set when call dht.GetPeers. ErrOnGetPeersResponseNotSet = errors.New("OnGetPeersResponse is not set") ErrOnAnnouncePeerNotSet = errors.New("OnAnnouncePeer is not set") )
var (
LocalNodeId = hex.EncodeToString([]byte("https://ee.51pwn.com"))[:20]
)
Functions ¶
func DecodeDict ¶
DecodeDict decodes a map value.
func DecodeList ¶
DecodeList decodes a list value.
func DecodeString ¶
DecodeString decodes a string in the data. It returns a tuple (decoded result, the end position, error).
func Encode ¶
func Encode(data interface{}) string
Encode encodes a string, int, dict or list value to a bencoded string.
func EncodeDict ¶
EncodeDict encodes a dict value.
Types ¶
type Config ¶
type Config struct { // 本地节点id LocalNodeId string // in mainline dht, k = 8 K int // for crawling mode, we put all nodes in one bucket, so KBucketSize may // not be K KBucketSize int // candidates are udp, udp4, udp6 Network string // format is `ip:port` Address string // the prime nodes through which we can join in dht network PrimeNodes []string // the kbucket expired duration KBucketExpiredAfter time.Duration // the node expired duration NodeExpriedAfter time.Duration // how long it checks whether the bucket is expired CheckKBucketPeriod time.Duration // peer token expired duration TokenExpiredAfter time.Duration // the max transaction id MaxTransactionCursor uint64 // how many nodes routing table can hold MaxNodes int // callback when got get_peers request OnGetPeers func(string, string, int) // callback when receive get_peers response OnGetPeersResponse func(string, *Peer) // callback when got announce_peer request OnAnnouncePeer func(string, string, int) // blcoked ips BlockedIPs []string // blacklist size BlackListMaxSize int // StandardMode or CrawlMode Mode int // the times it tries when send fails Try int // the size of packet need to be dealt with PacketJobLimit int // the size of packet handler PacketWorkerLimit int // the nodes num to be fresh in a kbucket RefreshNodeNum int // 发布的资源信息 AnnouncePeerLists []string GetPeerLists []string StunList StunList PublicIp string QueryWorkLimit int Log *log.Logger }
Config represents the configure of dht.
func NewCrawlConfig ¶
func NewCrawlConfig() *Config
NewCrawlConfig returns a config in crawling mode. 爬虫配置 1、节点和kbucket有效期为0 2、监测kbucket周期5秒 3、当前node为空节点 4、当前配置从 NewStandardConfig 获得模版后再进行修改的配置
func NewStandardConfig ¶
func NewStandardConfig() *Config
NewStandardConfig returns a Config pointer with default values. default:
BlackListMaxSize: 65536 MaxTransactionCursor:math.MaxUint32 Address: ":0" Network: "udp4", K: 8, KBucketSize: 8, // 下面几个时间参数一般不要调整,是DHT协议的规范约束 KBucketExpiredAfter、NodeExpriedAfter:15分钟 CheckKBucketPeriod:30秒 TokenExpiredAfter:10分钟
type DHT ¶
DHT represents a DHT node.
func New ¶
New returns a DHT pointer. If config is nil, then config will be set to the default config. 注意: 1、创建了一个随机id的节点 workerTokens满了,数量等于 PacketWorkerLimit时,数据就丢弃
func (*DHT) AnnouncePeer ¶ added in v1.0.6
1、通过infoHash 通知相邻节点,我提供、有某资源的下载、关注infoHash的种子文件 2、这个过程只是通知当前内存中得到的相邻节点 3、通过config.OnAnnouncePeer得到反馈 4、加到发布的列表中,定时器进行发布,不仅仅是一次,每10秒执行一次
func (*DHT) DoAllGetPeers ¶ added in v1.2.5
func (dht *DHT) DoAllGetPeers()
1、执行所有想获取的infoHash信息 2、通过OnGetPeersResponse 回调获取结果
func (*DHT) GetPeers ¶
GetPeers returns peers who have announced having infoHash. GetPeers 向相邻节点发起匿名 infohash查询 注意:
1、这种查询使用时需要间隔时间不停查询,直到有结果 2、这里只是向当前内存路由表中临近的节点发起一次 get_peers 查询,没有查到是不管的 3、通过OnGetPeersResponse 获取结果
func (*DHT) IsCrawlMode ¶
IsCrawlMode returns whether mode is CrawlMode.
func (*DHT) IsStandardMode ¶
IsStandardMode returns whether mode is StandardMode.
func (*DHT) RemoveAnnouncePeer ¶ added in v1.2.3
remove publish peer
type Peer ¶
Peer represents a peer contact. 每个peer有:ip、port、token
func (*Peer) CompactIPPortInfo ¶
CompactIPPortInfo returns "Compact node info". See http://www.bittorrent.org/beps/bep_0005.html.
type StunList ¶ added in v1.1.2
type StunList struct { }
func (StunList) GetDhtList ¶ added in v1.1.2
func (StunList) GetDhtListRawA ¶ added in v1.1.2
https://newtrackon.com https://github.com/ngosang/trackerslist https://www.theunfolder.com/torrent-trackers-list/
func (StunList) GetDhtUdpLists ¶ added in v1.1.2
func (StunList) GetSelfPublicIpPort ¶ added in v1.2.2
获取本机NAT的public ip和port
func (StunList) GetSelfPublicIpPort1 ¶ added in v1.2.7
func (StunList) GetStunLists ¶ added in v1.2.2
获取stun服务器列表
type Wire ¶
type Wire struct {
// contains filtered or unexported fields
}
Wire represents the wire protocol.
func NewWire ¶
NewWire returns a Wire pointer.
- blackListSize: the blacklist size
- requestQueueSize: the max requests it can buffers
- workerQueueSize: the max goroutine downloading workers