Add distinct IP counter to broker

This commit is contained in:
Shelikhoo 2022-05-27 17:37:23 +01:00
parent fa7d1e2bb7
commit 2541b13166
No known key found for this signature in database
GPG key ID: C4D5E79D22B25316
2 changed files with 18 additions and 0 deletions

View file

@ -11,6 +11,8 @@ import (
"crypto/tls" "crypto/tls"
"flag" "flag"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/bridgefingerprint" "git.torproject.org/pluggable-transports/snowflake.git/v2/common/bridgefingerprint"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/ipsetsink"
"git.torproject.org/pluggable-transports/snowflake.git/v2/common/ipsetsink/sinkcluster"
"io" "io"
"log" "log"
"net/http" "net/http"
@ -194,6 +196,8 @@ func main() {
var certFilename, keyFilename string var certFilename, keyFilename string
var disableGeoip bool var disableGeoip bool
var metricsFilename string var metricsFilename string
var ipCountFilename, ipCountMaskingKey string
var ipCountInterval time.Duration
var unsafeLogging bool var unsafeLogging bool
flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications") flag.StringVar(&acmeEmail, "acme-email", "", "optional contact email for Let's Encrypt notifications")
@ -210,6 +214,9 @@ func main() {
flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS") flag.BoolVar(&disableTLS, "disable-tls", false, "don't use HTTPS")
flag.BoolVar(&disableGeoip, "disable-geoip", false, "don't use geoip for stats collection") flag.BoolVar(&disableGeoip, "disable-geoip", false, "don't use geoip for stats collection")
flag.StringVar(&metricsFilename, "metrics-log", "", "path to metrics logging output") flag.StringVar(&metricsFilename, "metrics-log", "", "path to metrics logging output")
flag.StringVar(&ipCountFilename, "ip-count-log", "", "path to ip count logging output")
flag.StringVar(&ipCountMaskingKey, "ip-count-mask", "", "masking key for ip count logging")
flag.DurationVar(&ipCountInterval, "ip-count-interval", time.Hour, "time interval between each chunk")
flag.BoolVar(&unsafeLogging, "unsafe-logging", false, "prevent logs from being scrubbed") flag.BoolVar(&unsafeLogging, "unsafe-logging", false, "prevent logs from being scrubbed")
flag.Parse() flag.Parse()
@ -257,6 +264,16 @@ func main() {
} }
} }
if ipCountFilename != "" {
ipCountFile, err := os.OpenFile(ipCountFilename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err.Error())
}
ipSetSink := ipsetsink.NewIPSetSink(ipCountMaskingKey)
ctx.metrics.distinctIPWriter = sinkcluster.NewClusterWriter(ipCountFile, ipCountInterval, ipSetSink)
}
go ctx.Broker() go ctx.Broker()
i := &IPC{ctx} i := &IPC{ctx}

View file

@ -106,6 +106,7 @@ func (i *IPC) ProxyPolls(arg messages.Arg, response *[]byte) error {
} else { } else {
i.ctx.metrics.lock.Lock() i.ctx.metrics.lock.Lock()
i.ctx.metrics.UpdateCountryStats(remoteIP, proxyType, natType) i.ctx.metrics.UpdateCountryStats(remoteIP, proxyType, natType)
i.ctx.metrics.RecordIPAddress(remoteIP)
i.ctx.metrics.lock.Unlock() i.ctx.metrics.lock.Unlock()
} }