From a56c194015da599a5235425dd4aeff0ceec2d465 Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Thu, 18 Aug 2022 14:31:20 +0200 Subject: [PATCH] chore: update submodules Unfortunately ja3er.com is down, so the examples now are much less useful than they were before :-(. Part of https://github.com/ooni/probe/issues/2211 --- README.md | 2 ++ example/example-proxy/.gitignore | 1 + example/example-proxy/go.mod | 12 ++++---- example/example-proxy/go.sum | 35 ++++++++++++++++------- example/example-proxy/main.go | 7 ++--- example/example-proxy/tls.go | 14 ++++++++- example/example-utls-with-dial/.gitignore | 2 +- example/example-utls-with-dial/go.mod | 12 ++++---- example/example-utls-with-dial/go.sum | 35 ++++++++++++++++------- example/example-utls-with-dial/http.go | 5 +++- example/example-utls-with-dial/main.go | 7 ++--- example/example-utls-with-dial/tls.go | 10 +++++++ example/example-utls/go.mod | 12 ++++---- example/example-utls/go.sum | 35 ++++++++++++++++------- example/example-utls/main.go | 7 ++--- example/example-utls/tls.go | 14 ++++++++- go.mod | 2 +- go.sum | 8 ++---- 18 files changed, 152 insertions(+), 68 deletions(-) create mode 100644 example/example-proxy/.gitignore diff --git a/README.md b/README.md index 91617589..460e2a80 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,8 @@ and otherwise replace `tls.Client` with `TLSClientFactory`; - [ ] ensure [stdlibwrapper.go](stdlibwrapper.go) copies all the `Request` and `Response` fields; +- [ ] run `go get -u -v ./... && go mod tidy`; + - [ ] commit the changes and push `merged-main` to gitub; - [ ] open a PR and merge it *using a merge commit*; diff --git a/example/example-proxy/.gitignore b/example/example-proxy/.gitignore new file mode 100644 index 00000000..e8f496e1 --- /dev/null +++ b/example/example-proxy/.gitignore @@ -0,0 +1 @@ +/example-proxy diff --git a/example/example-proxy/go.mod b/example/example-proxy/go.mod index c5cb4fea..2f044ea4 100644 --- a/example/example-proxy/go.mod +++ b/example/example-proxy/go.mod @@ -4,13 +4,15 @@ go 1.18 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 - github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e - github.com/refraction-networking/utls v1.1.0 + github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 + github.com/refraction-networking/utls v1.1.1 ) require ( - golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect - golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/klauspost/compress v1.15.9 // indirect + golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 // indirect + golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect + golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect golang.org/x/text v0.3.7 // indirect ) diff --git a/example/example-proxy/go.sum b/example/example-proxy/go.sum index c547d88f..a9fa7756 100644 --- a/example/example-proxy/go.sum +++ b/example/example-proxy/go.sum @@ -1,14 +1,29 @@ +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e h1:hM6+SmEh6aCzXZDIHTwA0UeyjXNy7EfK1NpE3zr3WBo= -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= -github.com/refraction-networking/utls v1.1.0 h1:dKXJwSqni/t5csYJ+aQcEgqB7AMWYi6EUc9u3bEmjX0= -github.com/refraction-networking/utls v1.1.0/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 h1:nGWGi89yQRBDiG1++ANsbh8gYj76lAcQvnhlgrQ/1DY= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= +github.com/refraction-networking/utls v1.1.1 h1:4p66eNC+MOrL3tI7oMdA5Z8d1TgQXB8fxfuueE9DA7U= +github.com/refraction-networking/utls v1.1.1/go.mod h1:+D89TUtA8+NKVFj1IXWr0p3tSdX1+SqUB7rL0QnGqyg= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 h1:GIAS/yBem/gq2MUqgNIzUHW7cJMmx3TGZOrnyYaNQ6c= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/example/example-proxy/main.go b/example/example-proxy/main.go index 56944d80..b42484d2 100644 --- a/example/example-proxy/main.go +++ b/example/example-proxy/main.go @@ -65,10 +65,9 @@ func useProxy(URL, proxy string, func main() { proxy := flag.String("proxy", "127.0.0.1:54321", "where the proxy should listen") - // The default URL we use should return us the JA3 fingerprint - // we're using to communicate with the server. We expect such a - // fingerprint to change when we use the `-utls` flag. - url := flag.String("url", "https://ja3er.com/json", "the URL to get") + // Unfortunately ja3er.com is down. So we're now using as the default + // destination a google website. Not as useful as ja3er.com. + url := flag.String("url", "https://google.com/robots.txt", "the URL to get") utls := flag.Bool("utls", false, "try using uTLS") flag.Parse() var ffun func(conn net.Conn, config *tls.Config) oohttp.TLSConn diff --git a/example/example-proxy/tls.go b/example/example-proxy/tls.go index 755e0ad6..6fba4a75 100644 --- a/example/example-proxy/tls.go +++ b/example/example-proxy/tls.go @@ -11,7 +11,11 @@ import ( // utlsConnAdapter adapts utls.UConn to the oohttp.TLSConn interface. type utlsConnAdapter struct { + // UConn is the underlying utls.UConn *utls.UConn + + // conn is here to implement NetConn + conn net.Conn } var _ oohttp.TLSConn = &utlsConnAdapter{} @@ -49,6 +53,11 @@ func (c *utlsConnAdapter) HandshakeContext(ctx context.Context) error { } } +// NetConn implements TLSConn's NetConn +func (c *utlsConnAdapter) NetConn() net.Conn { + return c.conn +} + // utlsFactory creates a new uTLS connection. func utlsFactory(conn net.Conn, config *tls.Config) oohttp.TLSConn { uConfig := &utls.Config{ @@ -58,5 +67,8 @@ func utlsFactory(conn net.Conn, config *tls.Config) oohttp.TLSConn { InsecureSkipVerify: config.InsecureSkipVerify, DynamicRecordSizingDisabled: config.DynamicRecordSizingDisabled, } - return &utlsConnAdapter{utls.UClient(conn, uConfig, utls.HelloFirefox_55)} + return &utlsConnAdapter{ + UConn: utls.UClient(conn, uConfig, utls.HelloFirefox_55), + conn: conn, + } } diff --git a/example/example-utls-with-dial/.gitignore b/example/example-utls-with-dial/.gitignore index 19a41141..b7c87cc8 100644 --- a/example/example-utls-with-dial/.gitignore +++ b/example/example-utls-with-dial/.gitignore @@ -1 +1 @@ -/example-utls +/example-utls-with-dial diff --git a/example/example-utls-with-dial/go.mod b/example/example-utls-with-dial/go.mod index f93add2a..a784b3b5 100644 --- a/example/example-utls-with-dial/go.mod +++ b/example/example-utls-with-dial/go.mod @@ -2,15 +2,17 @@ module github.com/ooni/oohttp/example/example-utls-with-dial go 1.18 -require github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e +require github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 require ( - github.com/refraction-networking/utls v1.1.0 - golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect + github.com/refraction-networking/utls v1.1.1 + golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect golang.org/x/text v0.3.7 // indirect ) require ( - golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/klauspost/compress v1.15.9 // indirect + golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 // indirect + golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect ) diff --git a/example/example-utls-with-dial/go.sum b/example/example-utls-with-dial/go.sum index e6ecaec5..8408da7f 100644 --- a/example/example-utls-with-dial/go.sum +++ b/example/example-utls-with-dial/go.sum @@ -1,12 +1,27 @@ -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e h1:hM6+SmEh6aCzXZDIHTwA0UeyjXNy7EfK1NpE3zr3WBo= -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= -github.com/refraction-networking/utls v1.1.0 h1:dKXJwSqni/t5csYJ+aQcEgqB7AMWYi6EUc9u3bEmjX0= -github.com/refraction-networking/utls v1.1.0/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 h1:nGWGi89yQRBDiG1++ANsbh8gYj76lAcQvnhlgrQ/1DY= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= +github.com/refraction-networking/utls v1.1.1 h1:4p66eNC+MOrL3tI7oMdA5Z8d1TgQXB8fxfuueE9DA7U= +github.com/refraction-networking/utls v1.1.1/go.mod h1:+D89TUtA8+NKVFj1IXWr0p3tSdX1+SqUB7rL0QnGqyg= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 h1:GIAS/yBem/gq2MUqgNIzUHW7cJMmx3TGZOrnyYaNQ6c= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/example/example-utls-with-dial/http.go b/example/example-utls-with-dial/http.go index e908d578..bb991379 100644 --- a/example/example-utls-with-dial/http.go +++ b/example/example-utls-with-dial/http.go @@ -32,7 +32,10 @@ func dialTLSContext(ctx context.Context, network string, addr string) (net.Conn, // Implementation note: using Firefox 55 ClientHello because that // avoids a bunch of issues, e.g., Brotli encrypted x509 certs. uconn := utls.UClient(conn, uconfig, utls.HelloFirefox_55) - uadapter := &utlsConnAdapter{uconn} + uadapter := &utlsConnAdapter{ + UConn: uconn, + conn: conn, + } if err := uadapter.HandshakeContext(ctx); err != nil { conn.Close() return nil, err diff --git a/example/example-utls-with-dial/main.go b/example/example-utls-with-dial/main.go index 40cbb489..6dafaba2 100644 --- a/example/example-utls-with-dial/main.go +++ b/example/example-utls-with-dial/main.go @@ -17,10 +17,9 @@ func newClient(txp http.RoundTripper) *http.Client { var defaultClient = newClient(defaultTransport) func main() { - // The default URL we use should return us the JA3 fingerprint - // we're using to communicate with the server. We expect such a - // fingerprint to change when we use the `-utls` flag. - url := flag.String("url", "https://ja3er.com/json", "the URL to get") + // Unfortunately ja3er.com is down. So we're now using as the default + // destination a google website. Not as useful as ja3er.com. + url := flag.String("url", "https://google.com/robots.txt", "the URL to get") flag.Parse() resp, err := defaultClient.Get(*url) if err != nil { diff --git a/example/example-utls-with-dial/tls.go b/example/example-utls-with-dial/tls.go index 7835ec20..a5ca92b9 100644 --- a/example/example-utls-with-dial/tls.go +++ b/example/example-utls-with-dial/tls.go @@ -3,6 +3,7 @@ package main import ( "context" "crypto/tls" + "net" oohttp "github.com/ooni/oohttp" utls "github.com/refraction-networking/utls" @@ -10,7 +11,11 @@ import ( // utlsConnAdapter adapts utls.UConn to the oohttp.TLSConn interface. type utlsConnAdapter struct { + // UConn is the underlying utls.UConn *utls.UConn + + // conn is here to implement NetConn + conn net.Conn } var _ oohttp.TLSConn = &utlsConnAdapter{} @@ -47,3 +52,8 @@ func (c *utlsConnAdapter) HandshakeContext(ctx context.Context) error { return ctx.Err() } } + +// NetConn implements TLSConn's NetConn +func (c *utlsConnAdapter) NetConn() net.Conn { + return c.conn +} diff --git a/example/example-utls/go.mod b/example/example-utls/go.mod index 26923abb..b94a97d1 100644 --- a/example/example-utls/go.mod +++ b/example/example-utls/go.mod @@ -2,15 +2,17 @@ module github.com/ooni/oohttp/example/example-utls go 1.18 -require github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e +require github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 require ( - github.com/refraction-networking/utls v1.1.0 - golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect + github.com/refraction-networking/utls v1.1.1 + golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect golang.org/x/text v0.3.7 // indirect ) require ( - golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 // indirect - golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/klauspost/compress v1.15.9 // indirect + golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 // indirect + golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2 // indirect ) diff --git a/example/example-utls/go.sum b/example/example-utls/go.sum index e6ecaec5..8408da7f 100644 --- a/example/example-utls/go.sum +++ b/example/example-utls/go.sum @@ -1,12 +1,27 @@ -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e h1:hM6+SmEh6aCzXZDIHTwA0UeyjXNy7EfK1NpE3zr3WBo= -github.com/ooni/oohttp v0.0.0-20220521113303-fb27ebcf5f1e/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= -github.com/refraction-networking/utls v1.1.0 h1:dKXJwSqni/t5csYJ+aQcEgqB7AMWYi6EUc9u3bEmjX0= -github.com/refraction-networking/utls v1.1.0/go.mod h1:tz9gX959MEFfFN5whTIocCLUG57WiILqtdVxI8c6Wj0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898 h1:SLP7Q4Di66FONjDJbCYrCRrh97focO6sLogHO7/g8F0= -golang.org/x/crypto v0.0.0-20220518034528-6f7dac969898/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484 h1:nGWGi89yQRBDiG1++ANsbh8gYj76lAcQvnhlgrQ/1DY= +github.com/ooni/oohttp v0.2.1-0.20220818115853-7e0e0fdc8484/go.mod h1:p2VVLbs+BXBIgTHITV9Vw8Rv6G1u66JUWP/8KCgDGNo= +github.com/refraction-networking/utls v1.1.1 h1:4p66eNC+MOrL3tI7oMdA5Z8d1TgQXB8fxfuueE9DA7U= +github.com/refraction-networking/utls v1.1.1/go.mod h1:+D89TUtA8+NKVFj1IXWr0p3tSdX1+SqUB7rL0QnGqyg= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8 h1:GIAS/yBem/gq2MUqgNIzUHW7cJMmx3TGZOrnyYaNQ6c= +golang.org/x/crypto v0.0.0-20220817201139-bc19a97f63c8/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20220817070843-5a390386f1f2 h1:fqTvyMIIj+HRzMmnzr9NtpHP6uVpvB5fkHcgPDC4nu8= +golang.org/x/sys v0.0.0-20220817070843-5a390386f1f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/example/example-utls/main.go b/example/example-utls/main.go index 1b94eb54..5a778371 100644 --- a/example/example-utls/main.go +++ b/example/example-utls/main.go @@ -18,10 +18,9 @@ func newClient(txp http.RoundTripper) *http.Client { } func main() { - // The default URL we use should return us the JA3 fingerprint - // we're using to communicate with the server. We expect such a - // fingerprint to change when we use the `-utls` flag. - url := flag.String("url", "https://ja3er.com/json", "the URL to get") + // Unfortunately ja3er.com is down. So we're now using as the default + // destination a google website. Not as useful as ja3er.com. + url := flag.String("url", "https://google.com/robots.txt", "the URL to get") utls := flag.Bool("utls", false, "try using uTLS") flag.Parse() var ffun func(conn net.Conn, config *tls.Config) oohttp.TLSConn diff --git a/example/example-utls/tls.go b/example/example-utls/tls.go index 755e0ad6..6fba4a75 100644 --- a/example/example-utls/tls.go +++ b/example/example-utls/tls.go @@ -11,7 +11,11 @@ import ( // utlsConnAdapter adapts utls.UConn to the oohttp.TLSConn interface. type utlsConnAdapter struct { + // UConn is the underlying utls.UConn *utls.UConn + + // conn is here to implement NetConn + conn net.Conn } var _ oohttp.TLSConn = &utlsConnAdapter{} @@ -49,6 +53,11 @@ func (c *utlsConnAdapter) HandshakeContext(ctx context.Context) error { } } +// NetConn implements TLSConn's NetConn +func (c *utlsConnAdapter) NetConn() net.Conn { + return c.conn +} + // utlsFactory creates a new uTLS connection. func utlsFactory(conn net.Conn, config *tls.Config) oohttp.TLSConn { uConfig := &utls.Config{ @@ -58,5 +67,8 @@ func utlsFactory(conn net.Conn, config *tls.Config) oohttp.TLSConn { InsecureSkipVerify: config.InsecureSkipVerify, DynamicRecordSizingDisabled: config.DynamicRecordSizingDisabled, } - return &utlsConnAdapter{utls.UClient(conn, uConfig, utls.HelloFirefox_55)} + return &utlsConnAdapter{ + UConn: utls.UClient(conn, uConfig, utls.HelloFirefox_55), + conn: conn, + } } diff --git a/go.mod b/go.mod index ab77f5bb..308ddfb1 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,6 @@ module github.com/ooni/oohttp go 1.18 -require golang.org/x/net v0.0.0-20220412020605-290c469a71a5 +require golang.org/x/net v0.0.0-20220812174116-3211cb980234 require golang.org/x/text v0.3.7 // indirect diff --git a/go.sum b/go.sum index 35c38588..b77dcc0f 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,4 @@ -golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/net v0.0.0-20220812174116-3211cb980234 h1:RDqmgfe7SvlMWoqC3xwQ2blLO3fcWcxMa3eBLRdRW7E= +golang.org/x/net v0.0.0-20220812174116-3211cb980234/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=