aboutsummaryrefslogtreecommitdiff
path: root/broker
diff options
context:
space:
mode:
authorShelikhoo <xiaokangwang@outlook.com>2022-05-27 17:37:23 +0100
committerShelikhoo <xiaokangwang@outlook.com>2022-06-16 15:00:10 +0100
commit2541b13166b9e502c5314536c3c2777fd84db45b (patch)
tree8cef33dd043d8f11d937486cd52b44657f5f865c /broker
parentfa7d1e2bb77b92452785ce3d03c81a90efc9891e (diff)
downloadsnowflake-2541b13166b9e502c5314536c3c2777fd84db45b.tar.gz
snowflake-2541b13166b9e502c5314536c3c2777fd84db45b.zip
Add distinct IP counter to broker
Diffstat (limited to 'broker')
-rw-r--r--broker/broker.go17
-rw-r--r--broker/ipc.go1
2 files changed, 18 insertions, 0 deletions
diff --git a/broker/broker.go b/broker/broker.go
index 9162370..2bf4614 100644
--- a/broker/broker.go
+++ b/broker/broker.go
@@ -11,6 +11,8 @@ import (
"crypto/tls"
"flag"
"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"
"log"
"net/http"
@@ -194,6 +196,8 @@ func main() {
var certFilename, keyFilename string
var disableGeoip bool
var metricsFilename string
+ var ipCountFilename, ipCountMaskingKey string
+ var ipCountInterval time.Duration
var unsafeLogging bool
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(&disableGeoip, "disable-geoip", false, "don't use geoip for stats collection")
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.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()
i := &IPC{ctx}
diff --git a/broker/ipc.go b/broker/ipc.go
index f5d4747..30de180 100644
--- a/broker/ipc.go
+++ b/broker/ipc.go
@@ -106,6 +106,7 @@ func (i *IPC) ProxyPolls(arg messages.Arg, response *[]byte) error {
} else {
i.ctx.metrics.lock.Lock()
i.ctx.metrics.UpdateCountryStats(remoteIP, proxyType, natType)
+ i.ctx.metrics.RecordIPAddress(remoteIP)
i.ctx.metrics.lock.Unlock()
}