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 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
} }

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) 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}
} }
} }
} }