block peers that return bad peers
This commit is contained in:
parent
309a0064b5
commit
b552f6e19f
|
@ -72,6 +72,11 @@ var (
|
||||||
blacklistDropTime = 3 * 24 * time.Hour
|
blacklistDropTime = 3 * 24 * time.Hour
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type PotentialAddr struct {
|
||||||
|
addr *wire.NetAddress
|
||||||
|
src *peer.Peer
|
||||||
|
}
|
||||||
|
|
||||||
// Seeder contains all of the state and configuration needed to request addresses from Zcash peers and present them to a DNS provider.
|
// Seeder contains all of the state and configuration needed to request addresses from Zcash peers and present them to a DNS provider.
|
||||||
type Seeder struct {
|
type Seeder struct {
|
||||||
peer *peer.Peer
|
peer *peer.Peer
|
||||||
|
@ -88,7 +93,7 @@ type Seeder struct {
|
||||||
addrBook *AddressBook
|
addrBook *AddressBook
|
||||||
|
|
||||||
// The queue of incoming potential addresses
|
// The queue of incoming potential addresses
|
||||||
addrQueue chan *wire.NetAddress
|
addrQueue chan PotentialAddr
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSeeder(network network.Network) (*Seeder, error) {
|
func NewSeeder(network network.Network) (*Seeder, error) {
|
||||||
|
@ -108,7 +113,7 @@ func NewSeeder(network network.Network) (*Seeder, error) {
|
||||||
pendingPeers: NewPeerMap(),
|
pendingPeers: NewPeerMap(),
|
||||||
livePeers: NewPeerMap(),
|
livePeers: NewPeerMap(),
|
||||||
addrBook: NewAddressBook(),
|
addrBook: NewAddressBook(),
|
||||||
addrQueue: make(chan *wire.NetAddress, incomingAddressBufferSize),
|
addrQueue: make(chan PotentialAddr, incomingAddressBufferSize),
|
||||||
}
|
}
|
||||||
|
|
||||||
// The seeder only acts on verack, addr and addrv2 messages.
|
// The seeder only acts on verack, addr and addrv2 messages.
|
||||||
|
@ -144,7 +149,7 @@ func newTestSeeder(network network.Network) (*Seeder, error) {
|
||||||
pendingPeers: NewPeerMap(),
|
pendingPeers: NewPeerMap(),
|
||||||
livePeers: NewPeerMap(),
|
livePeers: NewPeerMap(),
|
||||||
addrBook: NewAddressBook(),
|
addrBook: NewAddressBook(),
|
||||||
addrQueue: make(chan *wire.NetAddress, incomingAddressBufferSize),
|
addrQueue: make(chan PotentialAddr, incomingAddressBufferSize),
|
||||||
}
|
}
|
||||||
|
|
||||||
newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck
|
newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck
|
||||||
|
@ -363,11 +368,13 @@ func (s *Seeder) RequestAddresses() int {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
|
|
||||||
var na *wire.NetAddress
|
var na *wire.NetAddress
|
||||||
|
var p *peer.Peer
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case next := <-s.addrQueue:
|
case next := <-s.addrQueue:
|
||||||
// Pull the next address off the queue
|
// Pull the next address off the queue
|
||||||
na = next
|
na = next.addr
|
||||||
|
p = next.src
|
||||||
case <-time.After(crawlerThreadTimeout):
|
case <-time.After(crawlerThreadTimeout):
|
||||||
// Or die if there wasn't one
|
// Or die if there wasn't one
|
||||||
return
|
return
|
||||||
|
@ -375,9 +382,8 @@ func (s *Seeder) RequestAddresses() int {
|
||||||
|
|
||||||
_, denied := DeniedPorts[na.Port]
|
_, denied := DeniedPorts[na.Port]
|
||||||
if denied || (!addrmgr.IsRoutable(na) && !s.config.AllowSelfConns) {
|
if denied || (!addrmgr.IsRoutable(na) && !s.config.AllowSelfConns) {
|
||||||
s.logger.Printf("Got bad addr %s:%d from peer %s", na.IP, na.Port, "<placeholder>")
|
s.logger.Printf("Got bad addr %s:%d from peer %s; blocked", na.IP, na.Port, p.NA().IP)
|
||||||
// TODO blacklist peers who give us crap addresses
|
s.DisconnectAndBlacklist(peerKeyFromPeer(p))
|
||||||
//s.DisconnectAndBlacklist(peerKeyFromPeer(p))
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ func (s *Seeder) onAddr(p *peer.Peer, msg *wire.MsgAddr) {
|
||||||
s.logger.Printf("Already knew about %s:%d", na.IP, na.Port)
|
s.logger.Printf("Already knew about %s:%d", na.IP, na.Port)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.addrQueue <- na
|
s.addrQueue <- PotentialAddr{addr: na, src: p}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ func (s *Seeder) onAddrV2(p *peer.Peer, msg *wire.MsgAddrV2) {
|
||||||
s.logger.Printf("Already knew about %s:%d", na.IP, na.Port)
|
s.logger.Printf("Already knew about %s:%d", na.IP, na.Port)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.addrQueue <- &na.NetAddress
|
s.addrQueue <- PotentialAddr{addr: &na.NetAddress, src: p}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue