diff --git a/main.go b/main.go index ae5219b..4ecc9c0 100644 --- a/main.go +++ b/main.go @@ -22,8 +22,14 @@ import ( "time" ) +type QueueAddr struct { + IP net.IP + Time time.Time + Server string +} + var ( - blacklistQueue []net.IP + blacklistQueue []QueueAddr isUpdated = atomic.Bool{} ) @@ -78,14 +84,13 @@ func updateRunner() { } for { - log.Info("Checking for updates") if isUpdated.Load() { isUpdated.Store(false) update(repository, branch, auth, fileName) } // Sleep for 1 minute - time.Sleep(5 * time.Second) + time.Sleep(1 * time.Minute) } } @@ -179,7 +184,7 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod } toAdd := blacklistQueue - blacklistQueue = []net.IP{} + blacklistQueue = []QueueAddr{} isAlreadyPresent := func(s net.IP) bool { // check if the address is already present in the list @@ -232,11 +237,21 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod return false } - added := make([]net.IP, 0) + added := make([]QueueAddr, 0) for _, v := range toAdd { - if !isAlreadyPresent(v) { - alreadyBlacklisted = append(alreadyBlacklisted, v.String()) - added = append(added, v) + if !isAlreadyPresent(v.IP) { + // check if the address is already present in the list + isPresent := false + for _, candidate := range added { + if v.IP.String() == candidate.IP.String() { + isPresent = true + break + } + } + if !isPresent { + alreadyBlacklisted = append(alreadyBlacklisted, v.IP.String()) + added = append(added, v) + } } } @@ -250,20 +265,20 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod commitMessage := strings.Builder{} commitMessage.WriteString(fmt.Sprintf("Add %d new addresses\n-------------------------------\n", len(added))) for _, v := range added { - logMessages.WriteString(fmt.Sprintf("%s ", time.Now().Format(time.RFC3339))) - logMessages.WriteString(fmt.Sprintf("addr='%s'", v.String())) + logMessages.WriteString(fmt.Sprintf("%s ", v.Time.Format(time.RFC3339))) + logMessages.WriteString(fmt.Sprintf("server='%s' addr='%s'", v.Server, v.IP.String())) - commitMessage.WriteString(v.String()) - reverseDNSNames, err := net.LookupAddr(v.String()) + commitMessage.WriteString(v.IP.String()) + reverseDNSNames, err := net.LookupAddr(v.IP.String()) if err == nil { line := fmt.Sprintf(" hostname='%s'", reverseDNSNames[0]) commitMessage.WriteString(line) logMessages.WriteString(line) } else { - log.Warnf("Failed to lookup reverse DNS for %s: %s", v.String(), err.Error()) + log.Warnf("Failed to lookup reverse DNS for %s: %s", v.IP.String(), err.Error()) } - geo, err := geoLookup(v) + geo, err := geoLookup(v.IP) if err == nil { line := fmt.Sprintf( " country='%s' city='%s' postal='%s'", @@ -274,10 +289,10 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod commitMessage.WriteString(line) logMessages.WriteString(line) } else { - log.Warnf("Failed to lookup geo for %s: %s", v.String(), err.Error()) + log.Warnf("Failed to lookup geo for %s: %s", v.IP.String(), err.Error()) } - asn, err := asnLookup(v) + asn, err := asnLookup(v.IP) if err == nil { line := fmt.Sprintf( " asn.id='%d' asn.name='%s'", @@ -287,7 +302,7 @@ func update(repository *git.Repository, branch string, auth transport.AuthMethod commitMessage.WriteString(line) logMessages.WriteString(line) } else { - log.Warnf("Failed to lookup ASN for %s: %s", v.String(), err.Error()) + log.Warnf("Failed to lookup ASN for %s: %s", v.IP.String(), err.Error()) } commitMessage.WriteString("\n") @@ -423,8 +438,16 @@ func listen(addr string) { } _ = conn.Close() - log.Infof("Got request from %s, blacklisting", remoteAddr) - blacklistQueue = append(blacklistQueue, ip) + log. + WithField("ip", ip.String()). + WithField("remote", remoteAddr). + WithField("server", addr). + Infof("Got request from %s, blacklisting", remoteAddr) + blacklistQueue = append(blacklistQueue, QueueAddr{ + IP: ip, + Time: time.Now(), + Server: addr, + }) isUpdated.Store(true) } }