block peers that return bad peers

This commit is contained in:
Conrado Gouvea 2022-06-13 12:06:51 -03:00
parent 309a0064b5
commit b552f6e19f
2 changed files with 15 additions and 9 deletions

View File

@ -72,6 +72,11 @@ var (
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.
type Seeder struct {
peer *peer.Peer
@ -88,7 +93,7 @@ type Seeder struct {
addrBook *AddressBook
// The queue of incoming potential addresses
addrQueue chan *wire.NetAddress
addrQueue chan PotentialAddr
}
func NewSeeder(network network.Network) (*Seeder, error) {
@ -108,7 +113,7 @@ func NewSeeder(network network.Network) (*Seeder, error) {
pendingPeers: NewPeerMap(),
livePeers: NewPeerMap(),
addrBook: NewAddressBook(),
addrQueue: make(chan *wire.NetAddress, incomingAddressBufferSize),
addrQueue: make(chan PotentialAddr, incomingAddressBufferSize),
}
// The seeder only acts on verack, addr and addrv2 messages.
@ -144,7 +149,7 @@ func newTestSeeder(network network.Network) (*Seeder, error) {
pendingPeers: NewPeerMap(),
livePeers: NewPeerMap(),
addrBook: NewAddressBook(),
addrQueue: make(chan *wire.NetAddress, incomingAddressBufferSize),
addrQueue: make(chan PotentialAddr, incomingAddressBufferSize),
}
newSeeder.config.Listeners.OnVerAck = newSeeder.onVerAck
@ -363,11 +368,13 @@ func (s *Seeder) RequestAddresses() int {
defer wg.Done()
var na *wire.NetAddress
var p *peer.Peer
for {
select {
case next := <-s.addrQueue:
// Pull the next address off the queue
na = next
na = next.addr
p = next.src
case <-time.After(crawlerThreadTimeout):
// Or die if there wasn't one
return
@ -375,9 +382,8 @@ func (s *Seeder) RequestAddresses() int {
_, denied := DeniedPorts[na.Port]
if denied || (!addrmgr.IsRoutable(na) && !s.config.AllowSelfConns) {
s.logger.Printf("Got bad addr %s:%d from peer %s", na.IP, na.Port, "<placeholder>")
// TODO blacklist peers who give us crap addresses
//s.DisconnectAndBlacklist(peerKeyFromPeer(p))
s.logger.Printf("Got bad addr %s:%d from peer %s; blocked", na.IP, na.Port, p.NA().IP)
s.DisconnectAndBlacklist(peerKeyFromPeer(p))
continue
}

View File

@ -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)
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)
continue
}
s.addrQueue <- &na.NetAddress
s.addrQueue <- PotentialAddr{addr: &na.NetAddress, src: p}
}
}
}