From c9d117d8bdc42b5b9a5706c816e6b3619ccfbac7 Mon Sep 17 00:00:00 2001 From: Jack Wampler Date: Tue, 10 Oct 2023 19:32:10 -0600 Subject: [PATCH] Decoy registration sharing bug fix (#245) fix c2s used when sharing decoy registrations over the api and track debug tools on master --- .gitignore | 1 + pkg/station/lib/registration.go | 42 +- pkg/station/lib/registration_ingest.go | 15 +- proto/Makefile | 7 +- util/station-debug/README | 9 + util/station-debug/go.mod | 40 + util/station-debug/go.sum | 135 ++ util/station-debug/phantom-sub.py | 33 + util/station-debug/run.sh | 7 + util/station-debug/signalling_pb2.py | 1982 ++++++++++++++++++++++++ util/station-debug/zmqsub.go | 124 ++ 11 files changed, 2359 insertions(+), 36 deletions(-) create mode 100644 util/station-debug/README create mode 100644 util/station-debug/go.mod create mode 100644 util/station-debug/go.sum create mode 100644 util/station-debug/phantom-sub.py create mode 100755 util/station-debug/run.sh create mode 100644 util/station-debug/signalling_pb2.py create mode 100644 util/station-debug/zmqsub.go diff --git a/.gitignore b/.gitignore index 44580e4f..e85a86fc 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ cmd/registration-server/regserver target bin/ Cargo.lock +__pycache__/ diff --git a/pkg/station/lib/registration.go b/pkg/station/lib/registration.go index 79dd13eb..44c14eeb 100644 --- a/pkg/station/lib/registration.go +++ b/pkg/station/lib/registration.go @@ -278,6 +278,8 @@ func (regManager *RegistrationManager) Cleanup() { // DecoyRegistration is a struct for tracking individual sessions that are expecting or tracking connections. type DecoyRegistration struct { + originalC2S *pb.ClientToStation + PhantomIp net.IP PhantomPort uint16 PhantomProto pb.IPProto @@ -409,44 +411,28 @@ func (reg *DecoyRegistration) IDString() string { return string(secret[:regIDLen]) } -// GenerateClientToStation creates a clientToStation struct. This is used in registration sharing -// between stations where the station notifies other stations of a registration. -func (reg *DecoyRegistration) GenerateClientToStation() *pb.ClientToStation { - v4 := false - if reg.PhantomIp.To4() != nil { - v4 = true - } - v6 := !v4 +// GenerateC2SWrapper creates a C2SWrapper struct. This is used in registration sharing between +// stations where the station notifies other stations of a registration. +func (reg *DecoyRegistration) GenerateC2SWrapper() *pb.C2SWrapper { - //[reference] Generate ClientToStation protobuf - // transition := pb.C2S_Transition_C2S_SESSION_INIT - initProto := &pb.ClientToStation{ - CovertAddress: ®.Covert, - DecoyListGeneration: ®.DecoyListVersion, - V6Support: &v6, - V4Support: &v4, - Transport: ®.Transport, + if reg.originalC2S == nil { + return nil } - for (proto.Size(initProto)+AES_GCM_TAG_SIZE)%3 != 0 { - initProto.Padding = append(initProto.Padding, byte(0)) + // This prevents double sharing of the registration over the API when the original C2S creates + // two registrations, one for IPv4 and one for IPv6. + if reg.PhantomIp.To4() == nil && reg.originalC2S.GetV4Support() { + return nil } - return initProto -} - -// GenerateC2SWrapper creates a C2SWrapper struct. This is used in registration sharing between -// stations where the station notifies other stations of a registration. -func (reg *DecoyRegistration) GenerateC2SWrapper() *pb.C2SWrapper { - boolHolder := true - c2s := reg.GenerateClientToStation() + c2s := proto.Clone(reg.originalC2S).(*pb.ClientToStation) if c2s.GetFlags() == nil { c2s.Flags = &pb.RegistrationFlags{ - Prescanned: &boolHolder, + Prescanned: proto.Bool(true), } } else { - c2s.Flags.Prescanned = &boolHolder + c2s.Flags.Prescanned = proto.Bool(true) } source := pb.RegistrationSource_DetectorPrescan diff --git a/pkg/station/lib/registration_ingest.go b/pkg/station/lib/registration_ingest.go index 4d5e9e86..ab549dd4 100644 --- a/pkg/station/lib/registration_ingest.go +++ b/pkg/station/lib/registration_ingest.go @@ -164,7 +164,6 @@ func (rm *RegistrationManager) ingestRegistration(reg *DecoyRegistration) { logger.Errorln("error tracking registration: ", err) Stat().AddErrReg() rm.AddErrReg() - } // If registration is trying to connect to a covert address that @@ -238,6 +237,9 @@ func (rm *RegistrationManager) ingestRegistration(reg *DecoyRegistration) { func tryShareRegistrationOverAPI(reg *DecoyRegistration, apiEndpoint string, logger *log.Logger) { c2a := reg.GenerateC2SWrapper() + if c2a == nil { + return + } payload, err := proto.Marshal(c2a) if err != nil { @@ -294,10 +296,11 @@ func (rm *RegistrationManager) parseRegMessage(msg []byte) ([]*DecoyRegistration parsed.DecoyAddress = make([]byte, 16) } - // If client IP logging is disabled DO NOT parse source IP. - var sourceAddr, phantomAddr net.IP + // If client IP logging is disabled DO NOT parse source IP. The decoy address is only used when + // he client registered using the decoy registrar - indicating the IP of the decoy site used. + var sourceAddr, decoyAddress net.IP sourceAddr = net.IP(parsed.GetRegistrationAddress()) - phantomAddr = net.IP(parsed.GetDecoyAddress()) + decoyAddress = net.IP(parsed.GetDecoyAddress()) // Register one or both of v4 and v6 based on support specified by the client var newRegs []*DecoyRegistration @@ -329,7 +332,7 @@ func (rm *RegistrationManager) parseRegMessage(msg []byte) ([]*DecoyRegistration // log decoy connection and id string if debug logging is enabled. if len(newRegs) > 0 { - logger.Debugf("received registration: '%v' -> '%v' %v %s\n", sourceAddr, phantomAddr, newRegs[0].IDString(), parsed.GetRegistrationSource()) + logger.Debugf("received registration: '%v' -> '%v' %v %s\n", sourceAddr, decoyAddress, newRegs[0].IDString(), parsed.GetRegistrationSource()) } return newRegs, nil } @@ -372,6 +375,8 @@ func (rm *RegistrationManager) NewRegistration(c2s *pb.ClientToStation, conjureK } reg := DecoyRegistration{ + originalC2S: proto.Clone(c2s).(*pb.ClientToStation), + DecoyListVersion: c2s.GetDecoyListGeneration(), Keys: conjureKeys, Covert: c2s.GetCovertAddress(), diff --git a/proto/Makefile b/proto/Makefile index e50ad53a..9a24fd37 100644 --- a/proto/Makefile +++ b/proto/Makefile @@ -6,6 +6,7 @@ SRC = signalling.proto GO_OUT = signalling.pb.go RUST_OUT = signalling.rs +PYTHON_OUT = signalling_pb2.py RUST_OUT_PATH = ../src/$(RUST_OUT) default: $(RUST_OUT_PATH) $(GO_OUT) @@ -16,8 +17,8 @@ $(GO_OUT): $(SRC) $(RUST_OUT_PATH): $(SRC) $(PROTOC) $(SRC) --rust_out . && cp $(RUST_OUT) $(RUST_OUT_PATH) -$(PYTHON_OUT_PATH): $(SRC) - $(PROTOC) --python_out=. $(SRC) && cp $(PYTHON_OUT) $(PYTHON_OUT_PATH) +$(PYTHON_OUT): $(SRC) + $(PROTOC) -I . --python_out=. $(SRC) clean: - rm -f $(GO_OUT) $(RUST_OUT) $(RUST_OUT_PATH) $(PYTHON_OUT) $(PYTHON_OUT_PATH) + rm -f $(GO_OUT) $(RUST_OUT) $(RUST_OUT_PATH) $(PYTHON_OUT) diff --git a/util/station-debug/README b/util/station-debug/README new file mode 100644 index 00000000..1f0922ca --- /dev/null +++ b/util/station-debug/README @@ -0,0 +1,9 @@ +Script to subscribe to the redis Station-to-Detector channel for registered phantoms + +sudo apt install python3 pip +pip3 install redis +pip3 install protobuf + + +./run.sh + diff --git a/util/station-debug/go.mod b/util/station-debug/go.mod new file mode 100644 index 00000000..6c59ac64 --- /dev/null +++ b/util/station-debug/go.mod @@ -0,0 +1,40 @@ +module zmqsub + +go 1.20 + +require ( + github.com/pebbe/zmq4 v1.2.10 + github.com/refraction-networking/conjure v0.7.6 + google.golang.org/protobuf v1.31.0 +) + +require ( + github.com/BurntSushi/toml v1.3.2 // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/dchest/siphash v1.2.3 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/gopacket v1.1.19 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/mroth/weightedrand v1.0.0 // indirect + github.com/oschwald/geoip2-golang v1.9.0 // indirect + github.com/oschwald/maxminddb-golang v1.12.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pion/dtls/v2 v2.2.7 // indirect + github.com/pion/logging v0.2.2 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/sctp v1.8.8 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/transport/v2 v2.2.3 // indirect + github.com/refraction-networking/ed25519 v0.1.2 // indirect + github.com/refraction-networking/obfs4 v0.1.2 // indirect + gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib v1.5.0 // indirect + golang.org/x/crypto v0.13.0 // indirect + golang.org/x/sys v0.12.0 // indirect +) + +replace github.com/pion/dtls/v2 => github.com/mingyech/dtls/v2 v2.0.0 + +replace github.com/pion/transport/v2 => github.com/mingyech/transport/v2 v2.0.0 diff --git a/util/station-debug/go.sum b/util/station-debug/go.sum new file mode 100644 index 00000000..4a812b1d --- /dev/null +++ b/util/station-debug/go.sum @@ -0,0 +1,135 @@ +github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= +github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dchest/siphash v1.2.3 h1:QXwFc8cFOR2dSa/gE6o/HokBMWtLUaNDVd+22aKHeEA= +github.com/dchest/siphash v1.2.3/go.mod h1:0NvQU092bT0ipiFN++/rXm69QG9tVxLAlQHIXMPAkHc= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= +github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/libp2p/go-reuseport v0.3.0/go.mod h1:laea40AimhtfEqysZ71UpYj4S+R9VpH8PgqLo7L+SwI= +github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= +github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= +github.com/mingyech/dtls/v2 v2.0.0 h1:RKN1CjBs8wct3JnrcRmqnfH3BO0ocYLEhmg62uaHq+A= +github.com/mingyech/dtls/v2 v2.0.0/go.mod h1:Jvjs/Mzb6dWhNbhnobeR2HC8nmjF5AaLezvpVo+PQ1U= +github.com/mingyech/transport/v2 v2.0.0 h1:fCiVNeEmIk14fZ3B7Xb/Q8GVPqa/4Sr4IPddtrnZqCs= +github.com/mingyech/transport/v2 v2.0.0/go.mod h1:HxvcVVQjlzjznqrWIlxx424GAEPyasX8gQw1VxjHP/Y= +github.com/mroth/weightedrand v1.0.0 h1:V8JeHChvl2MP1sAoXq4brElOcza+jxLkRuwvtQu8L3E= +github.com/mroth/weightedrand v1.0.0/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= +github.com/oschwald/geoip2-golang v1.9.0 h1:uvD3O6fXAXs+usU+UGExshpdP13GAqp4GBrzN7IgKZc= +github.com/oschwald/geoip2-golang v1.9.0/go.mod h1:BHK6TvDyATVQhKNbQBdrj9eAvuwOMi2zSFXizL3K81Y= +github.com/oschwald/maxminddb-golang v1.12.0 h1:9FnTOD0YOhP7DGxGsq4glzpGy5+w7pq50AS6wALUMYs= +github.com/oschwald/maxminddb-golang v1.12.0/go.mod h1:q0Nob5lTCqyQ8WT6FYgS1L7PXKVVbgiymefNwIjPzgY= +github.com/pebbe/zmq4 v1.2.10 h1:wQkqRZ3CZeABIeidr3e8uQZMMH5YAykA/WN0L5zkd1c= +github.com/pebbe/zmq4 v1.2.10/go.mod h1:nqnPueOapVhE2wItZ0uOErngczsJdLOGkebMxaO8r48= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/sctp v1.8.8 h1:5EdnnKI4gpyR1a1TwbiS/wxEgcUWBHsc7ILAjARJB+U= +github.com/pion/sctp v1.8.8/go.mod h1:igF9nZBrjh5AtmKc7U30jXltsFHicFCXSmWA2GWRaWs= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/refraction-networking/conjure v0.7.6 h1:cNTLrhFXTLGJaL3J6iiSncGDRAYzXbX7MGSvVlxn/Wk= +github.com/refraction-networking/conjure v0.7.6/go.mod h1:/UxAcot49ii6ejyvBrSo3g10yyUEavaGJT1Iy47oAfU= +github.com/refraction-networking/ed25519 v0.1.2 h1:08kJZUkAlY7a7cZGosl1teGytV+QEoNxPO7NnRvAB+g= +github.com/refraction-networking/ed25519 v0.1.2/go.mod h1:nxYLUAYt/hmNpAh64PNSQ/tQ9gTIB89wCaGKJlRtZ9I= +github.com/refraction-networking/obfs4 v0.1.2 h1:J842O4fGSkd2W8ogYj0KN6gqVVY+Cpqodw9qFGL7wVU= +github.com/refraction-networking/obfs4 v0.1.2/go.mod h1:wAl/+gWiLsrcykJA3nKJHx89f5/gXGM8UKvty7+mvbM= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib v1.5.0 h1:rzdY78Ox2T+VlXcxGxELF+6VyUXlZBhmRqZu5etLm+c= +gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/goptlib v1.5.0/go.mod h1:70bhd4JKW/+1HLfm+TMrgHJsUHG4coelMWwiVEJ2gAg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/grpc v1.58.0 h1:32JY8YpPMSR45K+c3o6b8VL73V+rR8k+DeMIr4vRH8o= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/util/station-debug/phantom-sub.py b/util/station-debug/phantom-sub.py new file mode 100644 index 00000000..7b1ab517 --- /dev/null +++ b/util/station-debug/phantom-sub.py @@ -0,0 +1,33 @@ +import redis +import signalling_pb2 as proto +import datetime + +red = redis.StrictRedis('localhost', 6379, charset="utf-8", decode_responses=False) + +def pb_op(i): + if i in proto._STATIONOPERATIONS.values_by_number: + return proto._STATIONOPERATIONS.values_by_number[i].name + return "" + +def pb_proto(i): + if i in proto._IPPROTO.values_by_number: + return proto._IPPROTO.values_by_number[i].name + return "" + +sub = red.pubsub() +sub.subscribe('dark_decoy_map') +for message in sub.listen(): + if message is not None and isinstance(message, dict): + data = message.get('data') + + if not isinstance(data, bytes): + continue + #print(data) + s2d = proto.StationToDetector() + s2d.ParseFromString(data) + op = pb_op(s2d.operation).lower() + pro = pb_proto(s2d.proto).lower() + print('%s %s %s %s:%s :%d %d' % \ + (datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f"), op, s2d.client_ip, pro, s2d.phantom_ip, s2d.dst_port, int(s2d.timeout_ns/1000000000.0))) + + diff --git a/util/station-debug/run.sh b/util/station-debug/run.sh new file mode 100755 index 00000000..6b4c9309 --- /dev/null +++ b/util/station-debug/run.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +#PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python python3 phantom-sub.py + +go build zmqsub.go +PHANTOM_SUBNET_LOCATION=/var/lib/conjure/phantom_subnets.toml ./zmqsub + diff --git a/util/station-debug/signalling_pb2.py b/util/station-debug/signalling_pb2.py new file mode 100644 index 00000000..81fe40dc --- /dev/null +++ b/util/station-debug/signalling_pb2.py @@ -0,0 +1,1982 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: signalling.proto + +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='signalling.proto', + package='proto', + syntax='proto2', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x10signalling.proto\x12\x05proto\x1a\x19google/protobuf/any.proto\"3\n\x06PubKey\x12\x0b\n\x03key\x18\x01 \x01(\x0c\x12\x1c\n\x04type\x18\x02 \x01(\x0e\x32\x0e.proto.KeyType\"\x84\x01\n\x0cTLSDecoySpec\x12\x10\n\x08hostname\x18\x01 \x01(\t\x12\x10\n\x08ipv4addr\x18\x02 \x01(\x07\x12\x10\n\x08ipv6addr\x18\x06 \x01(\x0c\x12\x1d\n\x06pubkey\x18\x03 \x01(\x0b\x32\r.proto.PubKey\x12\x0f\n\x07timeout\x18\x04 \x01(\r\x12\x0e\n\x06tcpwin\x18\x05 \x01(\r\"\xf6\x01\n\nClientConf\x12$\n\ndecoy_list\x18\x01 \x01(\x0b\x32\x10.proto.DecoyList\x12\x12\n\ngeneration\x18\x02 \x01(\r\x12%\n\x0e\x64\x65\x66\x61ult_pubkey\x18\x03 \x01(\x0b\x32\r.proto.PubKey\x12\x37\n\x14phantom_subnets_list\x18\x04 \x01(\x0b\x32\x19.proto.PhantomSubnetsList\x12%\n\x0e\x63onjure_pubkey\x18\x05 \x01(\x0b\x32\r.proto.PubKey\x12\'\n\x0c\x64ns_reg_conf\x18\x06 \x01(\x0b\x32\x11.proto.DnsRegConf\"\x99\x01\n\nDnsRegConf\x12+\n\x0e\x64ns_reg_method\x18\x01 \x02(\x0e\x32\x13.proto.DnsRegMethod\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x02(\t\x12\x0e\n\x06pubkey\x18\x04 \x01(\x0c\x12\x19\n\x11utls_distribution\x18\x05 \x01(\t\x12\x13\n\x0bstun_server\x18\x06 \x01(\t\"4\n\tDecoyList\x12\'\n\ntls_decoys\x18\x01 \x03(\x0b\x32\x13.proto.TLSDecoySpec\"E\n\x12PhantomSubnetsList\x12/\n\x10weighted_subnets\x18\x01 \x03(\x0b\x32\x15.proto.PhantomSubnets\"M\n\x0ePhantomSubnets\x12\x0e\n\x06weight\x18\x01 \x01(\r\x12\x0f\n\x07subnets\x18\x02 \x03(\t\x12\x1a\n\x12randomize_dst_port\x18\x03 \x01(\x08\"O\n\x12WebRTCICECandidate\x12\x10\n\x08ip_upper\x18\x01 \x02(\x04\x12\x10\n\x08ip_lower\x18\x02 \x02(\x04\x12\x15\n\rcomposed_info\x18\x03 \x02(\r\"H\n\tWebRTCSDP\x12\x0c\n\x04type\x18\x01 \x02(\r\x12-\n\ncandidates\x18\x02 \x03(\x0b\x32\x19.proto.WebRTCICECandidate\";\n\x0cWebRTCSignal\x12\x0c\n\x04seed\x18\x01 \x02(\t\x12\x1d\n\x03sdp\x18\x02 \x02(\x0b\x32\x10.proto.WebRTCSDP\" \n\x04\x41\x64\x64r\x12\n\n\x02IP\x18\x01 \x01(\x0c\x12\x0c\n\x04Port\x18\x02 \x01(\r\"\x84\x01\n\x13\x44TLSTransportParams\x12\x1e\n\tsrc_addr4\x18\x01 \x01(\x0b\x32\x0b.proto.Addr\x12\x1e\n\tsrc_addr6\x18\x02 \x01(\x0b\x32\x0b.proto.Addr\x12\x1a\n\x12randomize_dst_port\x18\x03 \x01(\x08\x12\x11\n\tunordered\x18\x04 \x01(\x08\"\xe9\x01\n\x0fStationToClient\x12\x18\n\x10protocol_version\x18\x01 \x01(\r\x12/\n\x10state_transition\x18\x02 \x01(\x0e\x32\x15.proto.S2C_Transition\x12&\n\x0b\x63onfig_info\x18\x03 \x01(\x0b\x32\x11.proto.ClientConf\x12)\n\nerr_reason\x18\x04 \x01(\x0e\x32\x15.proto.ErrorReasonS2C\x12\x13\n\x0btmp_backoff\x18\x05 \x01(\r\x12\x12\n\nstation_id\x18\x06 \x01(\t\x12\x0f\n\x07padding\x18\x64 \x01(\x0c\"w\n\x11RegistrationFlags\x12\x13\n\x0bupload_only\x18\x01 \x01(\x08\x12\x12\n\ndark_decoy\x18\x02 \x01(\x08\x12\x14\n\x0cproxy_header\x18\x03 \x01(\x08\x12\x0f\n\x07use_TIL\x18\x04 \x01(\x08\x12\x12\n\nprescanned\x18\x05 \x01(\x08\"\xad\x04\n\x0f\x43lientToStation\x12\x18\n\x10protocol_version\x18\x01 \x01(\r\x12\x1d\n\x15\x64\x65\x63oy_list_generation\x18\x02 \x01(\r\x12/\n\x10state_transition\x18\x03 \x01(\x0e\x32\x15.proto.C2S_Transition\x12\x13\n\x0bupload_sync\x18\x04 \x01(\x04\x12\x1a\n\x12\x63lient_lib_version\x18\x05 \x01(\r\x12#\n\x1b\x64isable_registrar_overrides\x18\x06 \x01(\x08\x12\x15\n\rfailed_decoys\x18\n \x03(\t\x12\"\n\x05stats\x18\x0b \x01(\x0b\x32\x13.proto.SessionStats\x12\'\n\ttransport\x18\x0c \x01(\x0e\x32\x14.proto.TransportType\x12.\n\x10transport_params\x18\r \x01(\x0b\x32\x14.google.protobuf.Any\x12\x16\n\x0e\x63overt_address\x18\x14 \x01(\t\x12 \n\x18masked_decoy_server_name\x18\x15 \x01(\t\x12\x12\n\nv6_support\x18\x16 \x01(\x08\x12\x12\n\nv4_support\x18\x17 \x01(\x08\x12\'\n\x05\x66lags\x18\x18 \x01(\x0b\x32\x18.proto.RegistrationFlags\x12*\n\rwebrtc_signal\x18\x1f \x01(\x0b\x32\x13.proto.WebRTCSignal\x12\x0f\n\x07padding\x18\x64 \x01(\x0c\"s\n\x15PrefixTransportParams\x12\x11\n\tprefix_id\x18\x01 \x01(\x05\x12\x0e\n\x06prefix\x18\x02 \x01(\x0c\x12\x1b\n\x13\x63ustom_flush_policy\x18\x03 \x01(\x05\x12\x1a\n\x12randomize_dst_port\x18\r \x01(\x08\"4\n\x16GenericTransportParams\x12\x1a\n\x12randomize_dst_port\x18\r \x01(\x08\"\xb2\x02\n\nC2SWrapper\x12\x15\n\rshared_secret\x18\x01 \x01(\x0c\x12\x34\n\x14registration_payload\x18\x03 \x01(\x0b\x32\x16.proto.ClientToStation\x12\x36\n\x13registration_source\x18\x04 \x01(\x0e\x32\x19.proto.RegistrationSource\x12\x1c\n\x14registration_address\x18\x06 \x01(\x0c\x12\x15\n\rdecoy_address\x18\x07 \x01(\x0c\x12:\n\x15registration_response\x18\x08 \x01(\x0b\x32\x1b.proto.RegistrationResponse\x12\x14\n\x0cRegRespBytes\x18\t \x01(\x0c\x12\x18\n\x10RegRespSignature\x18\n \x01(\x0c\"\x8f\x01\n\x0cSessionStats\x12\x1c\n\x14\x66\x61iled_decoys_amount\x18\x14 \x01(\r\x12\x1d\n\x15total_time_to_connect\x18\x1f \x01(\r\x12\x16\n\x0ertt_to_station\x18! \x01(\r\x12\x14\n\x0ctls_to_decoy\x18& \x01(\r\x12\x14\n\x0ctcp_to_decoy\x18\' \x01(\r\"\xbe\x01\n\x11StationToDetector\x12\x12\n\nphantom_ip\x18\x01 \x01(\t\x12\x11\n\tclient_ip\x18\x02 \x01(\t\x12\x12\n\ntimeout_ns\x18\x03 \x01(\x04\x12+\n\toperation\x18\x04 \x01(\x0e\x32\x18.proto.StationOperations\x12\x10\n\x08\x64st_port\x18\n \x01(\r\x12\x10\n\x08src_port\x18\x0b \x01(\r\x12\x1d\n\x05proto\x18\x0c \x01(\x0e\x32\x0e.proto.IPProto\"\xec\x01\n\x14RegistrationResponse\x12\x10\n\x08ipv4addr\x18\x01 \x01(\x07\x12\x10\n\x08ipv6addr\x18\x02 \x01(\x0c\x12\x10\n\x08\x64st_port\x18\x03 \x01(\r\x12\x14\n\x0cserverRandom\x18\x04 \x01(\x0c\x12\r\n\x05\x65rror\x18\x05 \x01(\t\x12%\n\nclientConf\x18\x06 \x01(\x0b\x32\x11.proto.ClientConf\x12.\n\x10transport_params\x18\n \x01(\x0b\x32\x14.google.protobuf.Any\x12\"\n\x1aphantoms_support_port_rand\x18\x0b \x01(\x08\"x\n\x0b\x44nsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1b\n\x13\x63lientconf_outdated\x18\x02 \x01(\x08\x12;\n\x16\x62idirectional_response\x18\x03 \x01(\x0b\x32\x1b.proto.RegistrationResponse*+\n\x07KeyType\x12\x0f\n\x0b\x41\x45S_GCM_128\x10Z\x12\x0f\n\x0b\x41\x45S_GCM_256\x10[*)\n\x0c\x44nsRegMethod\x12\x07\n\x03UDP\x10\x01\x12\x07\n\x03\x44OT\x10\x02\x12\x07\n\x03\x44OH\x10\x03*\xe7\x01\n\x0e\x43\x32S_Transition\x12\x11\n\rC2S_NO_CHANGE\x10\x00\x12\x14\n\x10\x43\x32S_SESSION_INIT\x10\x01\x12\x1b\n\x17\x43\x32S_SESSION_COVERT_INIT\x10\x0b\x12\x18\n\x14\x43\x32S_EXPECT_RECONNECT\x10\x02\x12\x15\n\x11\x43\x32S_SESSION_CLOSE\x10\x03\x12\x14\n\x10\x43\x32S_YIELD_UPLOAD\x10\x04\x12\x16\n\x12\x43\x32S_ACQUIRE_UPLOAD\x10\x05\x12 \n\x1c\x43\x32S_EXPECT_UPLOADONLY_RECONN\x10\x06\x12\x0e\n\tC2S_ERROR\x10\xff\x01*\x98\x01\n\x0eS2C_Transition\x12\x11\n\rS2C_NO_CHANGE\x10\x00\x12\x14\n\x10S2C_SESSION_INIT\x10\x01\x12\x1b\n\x17S2C_SESSION_COVERT_INIT\x10\x0b\x12\x19\n\x15S2C_CONFIRM_RECONNECT\x10\x02\x12\x15\n\x11S2C_SESSION_CLOSE\x10\x03\x12\x0e\n\tS2C_ERROR\x10\xff\x01*\xac\x01\n\x0e\x45rrorReasonS2C\x12\x0c\n\x08NO_ERROR\x10\x00\x12\x11\n\rCOVERT_STREAM\x10\x01\x12\x13\n\x0f\x43LIENT_REPORTED\x10\x02\x12\x13\n\x0f\x43LIENT_PROTOCOL\x10\x03\x12\x14\n\x10STATION_INTERNAL\x10\x04\x12\x12\n\x0e\x44\x45\x43OY_OVERLOAD\x10\x05\x12\x11\n\rCLIENT_STREAM\x10\x64\x12\x12\n\x0e\x43LIENT_TIMEOUT\x10\x65*\x82\x01\n\rTransportType\x12\x08\n\x04Null\x10\x00\x12\x07\n\x03Min\x10\x01\x12\t\n\x05Obfs4\x10\x02\x12\x08\n\x04\x44TLS\x10\x03\x12\n\n\x06Prefix\x10\x04\x12\x08\n\x04uTLS\x10\x05\x12\n\n\x06\x46ormat\x10\x06\x12\x08\n\x04WASM\x10\x07\x12\x07\n\x03\x46TE\x10\x08\x12\x08\n\x04Quic\x10\t\x12\n\n\x06Webrtc\x10\x63*\x86\x01\n\x12RegistrationSource\x12\x0f\n\x0bUnspecified\x10\x00\x12\x0c\n\x08\x44\x65tector\x10\x01\x12\x07\n\x03\x41PI\x10\x02\x12\x13\n\x0f\x44\x65tectorPrescan\x10\x03\x12\x14\n\x10\x42idirectionalAPI\x10\x04\x12\x07\n\x03\x44NS\x10\x05\x12\x14\n\x10\x42idirectionalDNS\x10\x06*@\n\x11StationOperations\x12\x0b\n\x07Unknown\x10\x00\x12\x07\n\x03New\x10\x01\x12\n\n\x06Update\x10\x02\x12\t\n\x05\x43lear\x10\x03*$\n\x07IPProto\x12\x07\n\x03Unk\x10\x00\x12\x07\n\x03Tcp\x10\x01\x12\x07\n\x03Udp\x10\x02' + , + dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,]) + +_KEYTYPE = _descriptor.EnumDescriptor( + name='KeyType', + full_name='proto.KeyType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='AES_GCM_128', index=0, number=90, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='AES_GCM_256', index=1, number=91, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3333, + serialized_end=3376, +) +_sym_db.RegisterEnumDescriptor(_KEYTYPE) + +KeyType = enum_type_wrapper.EnumTypeWrapper(_KEYTYPE) +_DNSREGMETHOD = _descriptor.EnumDescriptor( + name='DnsRegMethod', + full_name='proto.DnsRegMethod', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='UDP', index=0, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DOT', index=1, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DOH', index=2, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3378, + serialized_end=3419, +) +_sym_db.RegisterEnumDescriptor(_DNSREGMETHOD) + +DnsRegMethod = enum_type_wrapper.EnumTypeWrapper(_DNSREGMETHOD) +_C2S_TRANSITION = _descriptor.EnumDescriptor( + name='C2S_Transition', + full_name='proto.C2S_Transition', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='C2S_NO_CHANGE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_SESSION_INIT', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_SESSION_COVERT_INIT', index=2, number=11, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_EXPECT_RECONNECT', index=3, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_SESSION_CLOSE', index=4, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_YIELD_UPLOAD', index=5, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_ACQUIRE_UPLOAD', index=6, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_EXPECT_UPLOADONLY_RECONN', index=7, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='C2S_ERROR', index=8, number=255, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3422, + serialized_end=3653, +) +_sym_db.RegisterEnumDescriptor(_C2S_TRANSITION) + +C2S_Transition = enum_type_wrapper.EnumTypeWrapper(_C2S_TRANSITION) +_S2C_TRANSITION = _descriptor.EnumDescriptor( + name='S2C_Transition', + full_name='proto.S2C_Transition', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='S2C_NO_CHANGE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='S2C_SESSION_INIT', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='S2C_SESSION_COVERT_INIT', index=2, number=11, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='S2C_CONFIRM_RECONNECT', index=3, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='S2C_SESSION_CLOSE', index=4, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='S2C_ERROR', index=5, number=255, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3656, + serialized_end=3808, +) +_sym_db.RegisterEnumDescriptor(_S2C_TRANSITION) + +S2C_Transition = enum_type_wrapper.EnumTypeWrapper(_S2C_TRANSITION) +_ERRORREASONS2C = _descriptor.EnumDescriptor( + name='ErrorReasonS2C', + full_name='proto.ErrorReasonS2C', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='NO_ERROR', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='COVERT_STREAM', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CLIENT_REPORTED', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CLIENT_PROTOCOL', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STATION_INTERNAL', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DECOY_OVERLOAD', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CLIENT_STREAM', index=6, number=100, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CLIENT_TIMEOUT', index=7, number=101, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3811, + serialized_end=3983, +) +_sym_db.RegisterEnumDescriptor(_ERRORREASONS2C) + +ErrorReasonS2C = enum_type_wrapper.EnumTypeWrapper(_ERRORREASONS2C) +_TRANSPORTTYPE = _descriptor.EnumDescriptor( + name='TransportType', + full_name='proto.TransportType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='Null', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Min', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Obfs4', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DTLS', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Prefix', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='uTLS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Format', index=6, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='WASM', index=7, number=7, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='FTE', index=8, number=8, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Quic', index=9, number=9, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Webrtc', index=10, number=99, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=3986, + serialized_end=4116, +) +_sym_db.RegisterEnumDescriptor(_TRANSPORTTYPE) + +TransportType = enum_type_wrapper.EnumTypeWrapper(_TRANSPORTTYPE) +_REGISTRATIONSOURCE = _descriptor.EnumDescriptor( + name='RegistrationSource', + full_name='proto.RegistrationSource', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='Unspecified', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Detector', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='API', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DetectorPrescan', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='BidirectionalAPI', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DNS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='BidirectionalDNS', index=6, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=4119, + serialized_end=4253, +) +_sym_db.RegisterEnumDescriptor(_REGISTRATIONSOURCE) + +RegistrationSource = enum_type_wrapper.EnumTypeWrapper(_REGISTRATIONSOURCE) +_STATIONOPERATIONS = _descriptor.EnumDescriptor( + name='StationOperations', + full_name='proto.StationOperations', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='Unknown', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='New', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Update', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Clear', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=4255, + serialized_end=4319, +) +_sym_db.RegisterEnumDescriptor(_STATIONOPERATIONS) + +StationOperations = enum_type_wrapper.EnumTypeWrapper(_STATIONOPERATIONS) +_IPPROTO = _descriptor.EnumDescriptor( + name='IPProto', + full_name='proto.IPProto', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='Unk', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Tcp', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='Udp', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=4321, + serialized_end=4357, +) +_sym_db.RegisterEnumDescriptor(_IPPROTO) + +IPProto = enum_type_wrapper.EnumTypeWrapper(_IPPROTO) +AES_GCM_128 = 90 +AES_GCM_256 = 91 +UDP = 1 +DOT = 2 +DOH = 3 +C2S_NO_CHANGE = 0 +C2S_SESSION_INIT = 1 +C2S_SESSION_COVERT_INIT = 11 +C2S_EXPECT_RECONNECT = 2 +C2S_SESSION_CLOSE = 3 +C2S_YIELD_UPLOAD = 4 +C2S_ACQUIRE_UPLOAD = 5 +C2S_EXPECT_UPLOADONLY_RECONN = 6 +C2S_ERROR = 255 +S2C_NO_CHANGE = 0 +S2C_SESSION_INIT = 1 +S2C_SESSION_COVERT_INIT = 11 +S2C_CONFIRM_RECONNECT = 2 +S2C_SESSION_CLOSE = 3 +S2C_ERROR = 255 +NO_ERROR = 0 +COVERT_STREAM = 1 +CLIENT_REPORTED = 2 +CLIENT_PROTOCOL = 3 +STATION_INTERNAL = 4 +DECOY_OVERLOAD = 5 +CLIENT_STREAM = 100 +CLIENT_TIMEOUT = 101 +Null = 0 +Min = 1 +Obfs4 = 2 +DTLS = 3 +Prefix = 4 +uTLS = 5 +Format = 6 +WASM = 7 +FTE = 8 +Quic = 9 +Webrtc = 99 +Unspecified = 0 +Detector = 1 +API = 2 +DetectorPrescan = 3 +BidirectionalAPI = 4 +DNS = 5 +BidirectionalDNS = 6 +Unknown = 0 +New = 1 +Update = 2 +Clear = 3 +Unk = 0 +Tcp = 1 +Udp = 2 + + + +_PUBKEY = _descriptor.Descriptor( + name='PubKey', + full_name='proto.PubKey', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='proto.PubKey.key', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='proto.PubKey.type', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=90, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=54, + serialized_end=105, +) + + +_TLSDECOYSPEC = _descriptor.Descriptor( + name='TLSDecoySpec', + full_name='proto.TLSDecoySpec', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='hostname', full_name='proto.TLSDecoySpec.hostname', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ipv4addr', full_name='proto.TLSDecoySpec.ipv4addr', index=1, + number=2, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ipv6addr', full_name='proto.TLSDecoySpec.ipv6addr', index=2, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='pubkey', full_name='proto.TLSDecoySpec.pubkey', index=3, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timeout', full_name='proto.TLSDecoySpec.timeout', index=4, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='tcpwin', full_name='proto.TLSDecoySpec.tcpwin', index=5, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=108, + serialized_end=240, +) + + +_CLIENTCONF = _descriptor.Descriptor( + name='ClientConf', + full_name='proto.ClientConf', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='decoy_list', full_name='proto.ClientConf.decoy_list', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='generation', full_name='proto.ClientConf.generation', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='default_pubkey', full_name='proto.ClientConf.default_pubkey', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='phantom_subnets_list', full_name='proto.ClientConf.phantom_subnets_list', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='conjure_pubkey', full_name='proto.ClientConf.conjure_pubkey', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='dns_reg_conf', full_name='proto.ClientConf.dns_reg_conf', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=243, + serialized_end=489, +) + + +_DNSREGCONF = _descriptor.Descriptor( + name='DnsRegConf', + full_name='proto.DnsRegConf', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='dns_reg_method', full_name='proto.DnsRegConf.dns_reg_method', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='target', full_name='proto.DnsRegConf.target', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='domain', full_name='proto.DnsRegConf.domain', index=2, + number=3, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='pubkey', full_name='proto.DnsRegConf.pubkey', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='utls_distribution', full_name='proto.DnsRegConf.utls_distribution', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='stun_server', full_name='proto.DnsRegConf.stun_server', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=492, + serialized_end=645, +) + + +_DECOYLIST = _descriptor.Descriptor( + name='DecoyList', + full_name='proto.DecoyList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='tls_decoys', full_name='proto.DecoyList.tls_decoys', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=647, + serialized_end=699, +) + + +_PHANTOMSUBNETSLIST = _descriptor.Descriptor( + name='PhantomSubnetsList', + full_name='proto.PhantomSubnetsList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='weighted_subnets', full_name='proto.PhantomSubnetsList.weighted_subnets', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=701, + serialized_end=770, +) + + +_PHANTOMSUBNETS = _descriptor.Descriptor( + name='PhantomSubnets', + full_name='proto.PhantomSubnets', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='weight', full_name='proto.PhantomSubnets.weight', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='subnets', full_name='proto.PhantomSubnets.subnets', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='randomize_dst_port', full_name='proto.PhantomSubnets.randomize_dst_port', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=772, + serialized_end=849, +) + + +_WEBRTCICECANDIDATE = _descriptor.Descriptor( + name='WebRTCICECandidate', + full_name='proto.WebRTCICECandidate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='ip_upper', full_name='proto.WebRTCICECandidate.ip_upper', index=0, + number=1, type=4, cpp_type=4, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ip_lower', full_name='proto.WebRTCICECandidate.ip_lower', index=1, + number=2, type=4, cpp_type=4, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='composed_info', full_name='proto.WebRTCICECandidate.composed_info', index=2, + number=3, type=13, cpp_type=3, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=851, + serialized_end=930, +) + + +_WEBRTCSDP = _descriptor.Descriptor( + name='WebRTCSDP', + full_name='proto.WebRTCSDP', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='type', full_name='proto.WebRTCSDP.type', index=0, + number=1, type=13, cpp_type=3, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='candidates', full_name='proto.WebRTCSDP.candidates', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=932, + serialized_end=1004, +) + + +_WEBRTCSIGNAL = _descriptor.Descriptor( + name='WebRTCSignal', + full_name='proto.WebRTCSignal', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='seed', full_name='proto.WebRTCSignal.seed', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sdp', full_name='proto.WebRTCSignal.sdp', index=1, + number=2, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1006, + serialized_end=1065, +) + + +_ADDR = _descriptor.Descriptor( + name='Addr', + full_name='proto.Addr', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='IP', full_name='proto.Addr.IP', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='Port', full_name='proto.Addr.Port', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1067, + serialized_end=1099, +) + + +_DTLSTRANSPORTPARAMS = _descriptor.Descriptor( + name='DTLSTransportParams', + full_name='proto.DTLSTransportParams', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='src_addr4', full_name='proto.DTLSTransportParams.src_addr4', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='src_addr6', full_name='proto.DTLSTransportParams.src_addr6', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='randomize_dst_port', full_name='proto.DTLSTransportParams.randomize_dst_port', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='unordered', full_name='proto.DTLSTransportParams.unordered', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1102, + serialized_end=1234, +) + + +_STATIONTOCLIENT = _descriptor.Descriptor( + name='StationToClient', + full_name='proto.StationToClient', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='protocol_version', full_name='proto.StationToClient.protocol_version', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='state_transition', full_name='proto.StationToClient.state_transition', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='config_info', full_name='proto.StationToClient.config_info', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='err_reason', full_name='proto.StationToClient.err_reason', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='tmp_backoff', full_name='proto.StationToClient.tmp_backoff', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='station_id', full_name='proto.StationToClient.station_id', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='padding', full_name='proto.StationToClient.padding', index=6, + number=100, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1237, + serialized_end=1470, +) + + +_REGISTRATIONFLAGS = _descriptor.Descriptor( + name='RegistrationFlags', + full_name='proto.RegistrationFlags', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='upload_only', full_name='proto.RegistrationFlags.upload_only', index=0, + number=1, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='dark_decoy', full_name='proto.RegistrationFlags.dark_decoy', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='proxy_header', full_name='proto.RegistrationFlags.proxy_header', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='use_TIL', full_name='proto.RegistrationFlags.use_TIL', index=3, + number=4, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='prescanned', full_name='proto.RegistrationFlags.prescanned', index=4, + number=5, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1472, + serialized_end=1591, +) + + +_CLIENTTOSTATION = _descriptor.Descriptor( + name='ClientToStation', + full_name='proto.ClientToStation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='protocol_version', full_name='proto.ClientToStation.protocol_version', index=0, + number=1, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='decoy_list_generation', full_name='proto.ClientToStation.decoy_list_generation', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='state_transition', full_name='proto.ClientToStation.state_transition', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='upload_sync', full_name='proto.ClientToStation.upload_sync', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='client_lib_version', full_name='proto.ClientToStation.client_lib_version', index=4, + number=5, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='disable_registrar_overrides', full_name='proto.ClientToStation.disable_registrar_overrides', index=5, + number=6, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='failed_decoys', full_name='proto.ClientToStation.failed_decoys', index=6, + number=10, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='stats', full_name='proto.ClientToStation.stats', index=7, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='transport', full_name='proto.ClientToStation.transport', index=8, + number=12, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='transport_params', full_name='proto.ClientToStation.transport_params', index=9, + number=13, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='covert_address', full_name='proto.ClientToStation.covert_address', index=10, + number=20, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='masked_decoy_server_name', full_name='proto.ClientToStation.masked_decoy_server_name', index=11, + number=21, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='v6_support', full_name='proto.ClientToStation.v6_support', index=12, + number=22, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='v4_support', full_name='proto.ClientToStation.v4_support', index=13, + number=23, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='flags', full_name='proto.ClientToStation.flags', index=14, + number=24, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='webrtc_signal', full_name='proto.ClientToStation.webrtc_signal', index=15, + number=31, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='padding', full_name='proto.ClientToStation.padding', index=16, + number=100, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1594, + serialized_end=2151, +) + + +_PREFIXTRANSPORTPARAMS = _descriptor.Descriptor( + name='PrefixTransportParams', + full_name='proto.PrefixTransportParams', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='prefix_id', full_name='proto.PrefixTransportParams.prefix_id', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='prefix', full_name='proto.PrefixTransportParams.prefix', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='custom_flush_policy', full_name='proto.PrefixTransportParams.custom_flush_policy', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='randomize_dst_port', full_name='proto.PrefixTransportParams.randomize_dst_port', index=3, + number=13, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2153, + serialized_end=2268, +) + + +_GENERICTRANSPORTPARAMS = _descriptor.Descriptor( + name='GenericTransportParams', + full_name='proto.GenericTransportParams', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='randomize_dst_port', full_name='proto.GenericTransportParams.randomize_dst_port', index=0, + number=13, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2270, + serialized_end=2322, +) + + +_C2SWRAPPER = _descriptor.Descriptor( + name='C2SWrapper', + full_name='proto.C2SWrapper', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='shared_secret', full_name='proto.C2SWrapper.shared_secret', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='registration_payload', full_name='proto.C2SWrapper.registration_payload', index=1, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='registration_source', full_name='proto.C2SWrapper.registration_source', index=2, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='registration_address', full_name='proto.C2SWrapper.registration_address', index=3, + number=6, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='decoy_address', full_name='proto.C2SWrapper.decoy_address', index=4, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='registration_response', full_name='proto.C2SWrapper.registration_response', index=5, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='RegRespBytes', full_name='proto.C2SWrapper.RegRespBytes', index=6, + number=9, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='RegRespSignature', full_name='proto.C2SWrapper.RegRespSignature', index=7, + number=10, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2325, + serialized_end=2631, +) + + +_SESSIONSTATS = _descriptor.Descriptor( + name='SessionStats', + full_name='proto.SessionStats', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='failed_decoys_amount', full_name='proto.SessionStats.failed_decoys_amount', index=0, + number=20, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='total_time_to_connect', full_name='proto.SessionStats.total_time_to_connect', index=1, + number=31, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='rtt_to_station', full_name='proto.SessionStats.rtt_to_station', index=2, + number=33, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='tls_to_decoy', full_name='proto.SessionStats.tls_to_decoy', index=3, + number=38, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='tcp_to_decoy', full_name='proto.SessionStats.tcp_to_decoy', index=4, + number=39, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2634, + serialized_end=2777, +) + + +_STATIONTODETECTOR = _descriptor.Descriptor( + name='StationToDetector', + full_name='proto.StationToDetector', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='phantom_ip', full_name='proto.StationToDetector.phantom_ip', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='client_ip', full_name='proto.StationToDetector.client_ip', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timeout_ns', full_name='proto.StationToDetector.timeout_ns', index=2, + number=3, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='operation', full_name='proto.StationToDetector.operation', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='dst_port', full_name='proto.StationToDetector.dst_port', index=4, + number=10, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='src_port', full_name='proto.StationToDetector.src_port', index=5, + number=11, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='proto', full_name='proto.StationToDetector.proto', index=6, + number=12, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2780, + serialized_end=2970, +) + + +_REGISTRATIONRESPONSE = _descriptor.Descriptor( + name='RegistrationResponse', + full_name='proto.RegistrationResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='ipv4addr', full_name='proto.RegistrationResponse.ipv4addr', index=0, + number=1, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ipv6addr', full_name='proto.RegistrationResponse.ipv6addr', index=1, + number=2, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='dst_port', full_name='proto.RegistrationResponse.dst_port', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='serverRandom', full_name='proto.RegistrationResponse.serverRandom', index=3, + number=4, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='error', full_name='proto.RegistrationResponse.error', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='clientConf', full_name='proto.RegistrationResponse.clientConf', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='transport_params', full_name='proto.RegistrationResponse.transport_params', index=6, + number=10, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='phantoms_support_port_rand', full_name='proto.RegistrationResponse.phantoms_support_port_rand', index=7, + number=11, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2973, + serialized_end=3209, +) + + +_DNSRESPONSE = _descriptor.Descriptor( + name='DnsResponse', + full_name='proto.DnsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='success', full_name='proto.DnsResponse.success', index=0, + number=1, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='clientconf_outdated', full_name='proto.DnsResponse.clientconf_outdated', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='bidirectional_response', full_name='proto.DnsResponse.bidirectional_response', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto2', + extension_ranges=[], + oneofs=[ + ], + serialized_start=3211, + serialized_end=3331, +) + +_PUBKEY.fields_by_name['type'].enum_type = _KEYTYPE +_TLSDECOYSPEC.fields_by_name['pubkey'].message_type = _PUBKEY +_CLIENTCONF.fields_by_name['decoy_list'].message_type = _DECOYLIST +_CLIENTCONF.fields_by_name['default_pubkey'].message_type = _PUBKEY +_CLIENTCONF.fields_by_name['phantom_subnets_list'].message_type = _PHANTOMSUBNETSLIST +_CLIENTCONF.fields_by_name['conjure_pubkey'].message_type = _PUBKEY +_CLIENTCONF.fields_by_name['dns_reg_conf'].message_type = _DNSREGCONF +_DNSREGCONF.fields_by_name['dns_reg_method'].enum_type = _DNSREGMETHOD +_DECOYLIST.fields_by_name['tls_decoys'].message_type = _TLSDECOYSPEC +_PHANTOMSUBNETSLIST.fields_by_name['weighted_subnets'].message_type = _PHANTOMSUBNETS +_WEBRTCSDP.fields_by_name['candidates'].message_type = _WEBRTCICECANDIDATE +_WEBRTCSIGNAL.fields_by_name['sdp'].message_type = _WEBRTCSDP +_DTLSTRANSPORTPARAMS.fields_by_name['src_addr4'].message_type = _ADDR +_DTLSTRANSPORTPARAMS.fields_by_name['src_addr6'].message_type = _ADDR +_STATIONTOCLIENT.fields_by_name['state_transition'].enum_type = _S2C_TRANSITION +_STATIONTOCLIENT.fields_by_name['config_info'].message_type = _CLIENTCONF +_STATIONTOCLIENT.fields_by_name['err_reason'].enum_type = _ERRORREASONS2C +_CLIENTTOSTATION.fields_by_name['state_transition'].enum_type = _C2S_TRANSITION +_CLIENTTOSTATION.fields_by_name['stats'].message_type = _SESSIONSTATS +_CLIENTTOSTATION.fields_by_name['transport'].enum_type = _TRANSPORTTYPE +_CLIENTTOSTATION.fields_by_name['transport_params'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_CLIENTTOSTATION.fields_by_name['flags'].message_type = _REGISTRATIONFLAGS +_CLIENTTOSTATION.fields_by_name['webrtc_signal'].message_type = _WEBRTCSIGNAL +_C2SWRAPPER.fields_by_name['registration_payload'].message_type = _CLIENTTOSTATION +_C2SWRAPPER.fields_by_name['registration_source'].enum_type = _REGISTRATIONSOURCE +_C2SWRAPPER.fields_by_name['registration_response'].message_type = _REGISTRATIONRESPONSE +_STATIONTODETECTOR.fields_by_name['operation'].enum_type = _STATIONOPERATIONS +_STATIONTODETECTOR.fields_by_name['proto'].enum_type = _IPPROTO +_REGISTRATIONRESPONSE.fields_by_name['clientConf'].message_type = _CLIENTCONF +_REGISTRATIONRESPONSE.fields_by_name['transport_params'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_DNSRESPONSE.fields_by_name['bidirectional_response'].message_type = _REGISTRATIONRESPONSE +DESCRIPTOR.message_types_by_name['PubKey'] = _PUBKEY +DESCRIPTOR.message_types_by_name['TLSDecoySpec'] = _TLSDECOYSPEC +DESCRIPTOR.message_types_by_name['ClientConf'] = _CLIENTCONF +DESCRIPTOR.message_types_by_name['DnsRegConf'] = _DNSREGCONF +DESCRIPTOR.message_types_by_name['DecoyList'] = _DECOYLIST +DESCRIPTOR.message_types_by_name['PhantomSubnetsList'] = _PHANTOMSUBNETSLIST +DESCRIPTOR.message_types_by_name['PhantomSubnets'] = _PHANTOMSUBNETS +DESCRIPTOR.message_types_by_name['WebRTCICECandidate'] = _WEBRTCICECANDIDATE +DESCRIPTOR.message_types_by_name['WebRTCSDP'] = _WEBRTCSDP +DESCRIPTOR.message_types_by_name['WebRTCSignal'] = _WEBRTCSIGNAL +DESCRIPTOR.message_types_by_name['Addr'] = _ADDR +DESCRIPTOR.message_types_by_name['DTLSTransportParams'] = _DTLSTRANSPORTPARAMS +DESCRIPTOR.message_types_by_name['StationToClient'] = _STATIONTOCLIENT +DESCRIPTOR.message_types_by_name['RegistrationFlags'] = _REGISTRATIONFLAGS +DESCRIPTOR.message_types_by_name['ClientToStation'] = _CLIENTTOSTATION +DESCRIPTOR.message_types_by_name['PrefixTransportParams'] = _PREFIXTRANSPORTPARAMS +DESCRIPTOR.message_types_by_name['GenericTransportParams'] = _GENERICTRANSPORTPARAMS +DESCRIPTOR.message_types_by_name['C2SWrapper'] = _C2SWRAPPER +DESCRIPTOR.message_types_by_name['SessionStats'] = _SESSIONSTATS +DESCRIPTOR.message_types_by_name['StationToDetector'] = _STATIONTODETECTOR +DESCRIPTOR.message_types_by_name['RegistrationResponse'] = _REGISTRATIONRESPONSE +DESCRIPTOR.message_types_by_name['DnsResponse'] = _DNSRESPONSE +DESCRIPTOR.enum_types_by_name['KeyType'] = _KEYTYPE +DESCRIPTOR.enum_types_by_name['DnsRegMethod'] = _DNSREGMETHOD +DESCRIPTOR.enum_types_by_name['C2S_Transition'] = _C2S_TRANSITION +DESCRIPTOR.enum_types_by_name['S2C_Transition'] = _S2C_TRANSITION +DESCRIPTOR.enum_types_by_name['ErrorReasonS2C'] = _ERRORREASONS2C +DESCRIPTOR.enum_types_by_name['TransportType'] = _TRANSPORTTYPE +DESCRIPTOR.enum_types_by_name['RegistrationSource'] = _REGISTRATIONSOURCE +DESCRIPTOR.enum_types_by_name['StationOperations'] = _STATIONOPERATIONS +DESCRIPTOR.enum_types_by_name['IPProto'] = _IPPROTO +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +PubKey = _reflection.GeneratedProtocolMessageType('PubKey', (_message.Message,), { + 'DESCRIPTOR' : _PUBKEY, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.PubKey) + }) +_sym_db.RegisterMessage(PubKey) + +TLSDecoySpec = _reflection.GeneratedProtocolMessageType('TLSDecoySpec', (_message.Message,), { + 'DESCRIPTOR' : _TLSDECOYSPEC, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.TLSDecoySpec) + }) +_sym_db.RegisterMessage(TLSDecoySpec) + +ClientConf = _reflection.GeneratedProtocolMessageType('ClientConf', (_message.Message,), { + 'DESCRIPTOR' : _CLIENTCONF, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.ClientConf) + }) +_sym_db.RegisterMessage(ClientConf) + +DnsRegConf = _reflection.GeneratedProtocolMessageType('DnsRegConf', (_message.Message,), { + 'DESCRIPTOR' : _DNSREGCONF, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.DnsRegConf) + }) +_sym_db.RegisterMessage(DnsRegConf) + +DecoyList = _reflection.GeneratedProtocolMessageType('DecoyList', (_message.Message,), { + 'DESCRIPTOR' : _DECOYLIST, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.DecoyList) + }) +_sym_db.RegisterMessage(DecoyList) + +PhantomSubnetsList = _reflection.GeneratedProtocolMessageType('PhantomSubnetsList', (_message.Message,), { + 'DESCRIPTOR' : _PHANTOMSUBNETSLIST, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.PhantomSubnetsList) + }) +_sym_db.RegisterMessage(PhantomSubnetsList) + +PhantomSubnets = _reflection.GeneratedProtocolMessageType('PhantomSubnets', (_message.Message,), { + 'DESCRIPTOR' : _PHANTOMSUBNETS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.PhantomSubnets) + }) +_sym_db.RegisterMessage(PhantomSubnets) + +WebRTCICECandidate = _reflection.GeneratedProtocolMessageType('WebRTCICECandidate', (_message.Message,), { + 'DESCRIPTOR' : _WEBRTCICECANDIDATE, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.WebRTCICECandidate) + }) +_sym_db.RegisterMessage(WebRTCICECandidate) + +WebRTCSDP = _reflection.GeneratedProtocolMessageType('WebRTCSDP', (_message.Message,), { + 'DESCRIPTOR' : _WEBRTCSDP, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.WebRTCSDP) + }) +_sym_db.RegisterMessage(WebRTCSDP) + +WebRTCSignal = _reflection.GeneratedProtocolMessageType('WebRTCSignal', (_message.Message,), { + 'DESCRIPTOR' : _WEBRTCSIGNAL, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.WebRTCSignal) + }) +_sym_db.RegisterMessage(WebRTCSignal) + +Addr = _reflection.GeneratedProtocolMessageType('Addr', (_message.Message,), { + 'DESCRIPTOR' : _ADDR, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.Addr) + }) +_sym_db.RegisterMessage(Addr) + +DTLSTransportParams = _reflection.GeneratedProtocolMessageType('DTLSTransportParams', (_message.Message,), { + 'DESCRIPTOR' : _DTLSTRANSPORTPARAMS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.DTLSTransportParams) + }) +_sym_db.RegisterMessage(DTLSTransportParams) + +StationToClient = _reflection.GeneratedProtocolMessageType('StationToClient', (_message.Message,), { + 'DESCRIPTOR' : _STATIONTOCLIENT, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.StationToClient) + }) +_sym_db.RegisterMessage(StationToClient) + +RegistrationFlags = _reflection.GeneratedProtocolMessageType('RegistrationFlags', (_message.Message,), { + 'DESCRIPTOR' : _REGISTRATIONFLAGS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.RegistrationFlags) + }) +_sym_db.RegisterMessage(RegistrationFlags) + +ClientToStation = _reflection.GeneratedProtocolMessageType('ClientToStation', (_message.Message,), { + 'DESCRIPTOR' : _CLIENTTOSTATION, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.ClientToStation) + }) +_sym_db.RegisterMessage(ClientToStation) + +PrefixTransportParams = _reflection.GeneratedProtocolMessageType('PrefixTransportParams', (_message.Message,), { + 'DESCRIPTOR' : _PREFIXTRANSPORTPARAMS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.PrefixTransportParams) + }) +_sym_db.RegisterMessage(PrefixTransportParams) + +GenericTransportParams = _reflection.GeneratedProtocolMessageType('GenericTransportParams', (_message.Message,), { + 'DESCRIPTOR' : _GENERICTRANSPORTPARAMS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.GenericTransportParams) + }) +_sym_db.RegisterMessage(GenericTransportParams) + +C2SWrapper = _reflection.GeneratedProtocolMessageType('C2SWrapper', (_message.Message,), { + 'DESCRIPTOR' : _C2SWRAPPER, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.C2SWrapper) + }) +_sym_db.RegisterMessage(C2SWrapper) + +SessionStats = _reflection.GeneratedProtocolMessageType('SessionStats', (_message.Message,), { + 'DESCRIPTOR' : _SESSIONSTATS, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.SessionStats) + }) +_sym_db.RegisterMessage(SessionStats) + +StationToDetector = _reflection.GeneratedProtocolMessageType('StationToDetector', (_message.Message,), { + 'DESCRIPTOR' : _STATIONTODETECTOR, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.StationToDetector) + }) +_sym_db.RegisterMessage(StationToDetector) + +RegistrationResponse = _reflection.GeneratedProtocolMessageType('RegistrationResponse', (_message.Message,), { + 'DESCRIPTOR' : _REGISTRATIONRESPONSE, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.RegistrationResponse) + }) +_sym_db.RegisterMessage(RegistrationResponse) + +DnsResponse = _reflection.GeneratedProtocolMessageType('DnsResponse', (_message.Message,), { + 'DESCRIPTOR' : _DNSRESPONSE, + '__module__' : 'signalling_pb2' + # @@protoc_insertion_point(class_scope:proto.DnsResponse) + }) +_sym_db.RegisterMessage(DnsResponse) + + +# @@protoc_insertion_point(module_scope) diff --git a/util/station-debug/zmqsub.go b/util/station-debug/zmqsub.go new file mode 100644 index 00000000..bf7ba55c --- /dev/null +++ b/util/station-debug/zmqsub.go @@ -0,0 +1,124 @@ +package main + +import ( + "flag" + //"fmt" + zmq "github.com/pebbe/zmq4" + golog "log" + "net" + "os" + "strconv" + + // "github.com/refraction-networking/conjure/pkg/dtls/dnat" + // "github.com/refraction-networking/conjure/pkg/transports/connecting/dtls" + "github.com/refraction-networking/conjure/pkg/station/log" + cj "github.com/refraction-networking/conjure/pkg/station/lib" + "github.com/refraction-networking/conjure/pkg/transports/wrapping/min" + "github.com/refraction-networking/conjure/pkg/transports/wrapping/obfs4" + "github.com/refraction-networking/conjure/pkg/transports/wrapping/prefix" + pb "github.com/refraction-networking/conjure/proto" + + "google.golang.org/protobuf/proto" +) + +var enabledTransports = map[pb.TransportType]cj.Transport{ + pb.TransportType_Min: min.Transport{}, + pb.TransportType_Obfs4: obfs4.Transport{}, + pb.TransportType_Prefix: prefix.Transport{}, +} + +func handleReg(logger *log.Logger, source net.IP, reg *cj.DecoyRegistration) { + + logger.Printf("%v %v:%v %+v\n", source, reg.PhantomProto, net.JoinHostPort(reg.PhantomIp.String(), strconv.FormatUint(uint64(reg.PhantomPort), 10)), reg) +} + +func main() { + + var zmqAddress string + flag.StringVar(&zmqAddress, "zmq-address", "ipc://@zmq-proxy", "Address of ZMQ proxy") + flag.Parse() + + logger := log.New(os.Stdout, "", golog.Ldate|golog.Lmicroseconds) + + sub, err := zmq.NewSocket(zmq.SUB) + if err != nil { + logger.Printf("could not create new ZMQ socket: %v\n", err) + return + } + defer sub.Close() + + err = sub.Connect(zmqAddress) + if err != nil { + logger.Println("error connecting to zmq publisher:", err) + } + err = sub.SetSubscribe("") + if err != nil { + logger.Println("error subscribing to zmq:", err) + } + + regManager := cj.NewRegistrationManager(&cj.RegConfig{}) + + // dtlsbuilder := dnat.NewDNAT + // dtlsTransport, err := dtls.NewTransport(nil, nil, nil, nil, dtlsbuilder) + // if err != nil { + // log.Fatalf("failed to setup dtls: %v", err) + // } + // enabledTransports[pb.TransportType_DTLS] = dtlsTransport + + // Add supported transport options for registration validation + for transportType, transport := range enabledTransports { + err = regManager.AddTransport(transportType, transport) + if err != nil { + logger.Errorf("failed to add transport: %v", err) + } + } + + + for { + msg, err := sub.RecvBytes(0) + if err != nil { + logger.Printf("error reading from ZMQ socket: %v\n", err) + return + } + + parsed := &pb.C2SWrapper{} + err = proto.Unmarshal(msg, parsed) + if err != nil { + logger.Printf("Failed to unmarshall ClientToStation: %v", err) + return + } + + // if either addres is not provided (reg came over api / client ip + // logging disabled) fill with zeros to avoid nil dereference. + if parsed.GetRegistrationAddress() == nil { + parsed.RegistrationAddress = make([]byte, 16) + } + if parsed.GetDecoyAddress() == nil { + parsed.DecoyAddress = make([]byte, 16) + } + + // If client IP logging is disabled DO NOT parse source IP. + var sourceAddr net.IP + sourceAddr = net.IP(parsed.GetRegistrationAddress()) + + if parsed.GetRegistrationPayload().GetV4Support() && sourceAddr.To4() != nil { + reg, err := regManager.NewRegistrationC2SWrapper(parsed, false) + if err != nil { + logger.Printf("Failed to create registration: %v", err) + return + } + handleReg(logger, sourceAddr, reg) + } + + + if parsed.GetRegistrationPayload().GetV6Support() { + reg, err := regManager.NewRegistrationC2SWrapper(parsed, true) + if err != nil { + logger.Printf("Failed to create registration: %v", err) + return + } + handleReg(logger, sourceAddr, reg) + } + + } +}