mirror of
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/snowflake.git
synced 2025-10-13 20:11:19 -04:00
Add distinct IP counter to broker
This commit is contained in:
parent
fa7d1e2bb7
commit
2541b13166
2 changed files with 18 additions and 0 deletions
|
@ -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}
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue