diff --git a/Dockerfile b/Dockerfile index 84d902b73..8dfbf8f5e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,15 +13,6 @@ ENV CGO_ENABLED=1 GOOS=linux GOARCH=amd64 RUN apk add libpcap-dev gcc g++ make -# Move to tapper working directory (/tap-build). -WORKDIR /tap-build - -COPY tap/go.mod tap/go.sum ./ -RUN go mod download -# Copy and build tapper code -COPY tap/src ./ -RUN go build -ldflags="-s -w" -o passivetapper . - # Move to api working directory (/api-build). WORKDIR /api-build @@ -29,31 +20,19 @@ COPY api/go.mod api/go.sum ./ RUN go mod download # Copy and build api code COPY api . -RUN go build -ldflags="-s -w" -o apiserver . - - -FROM alpine:3.13.5 -RUN apk add parallel libpcap-dev tcpdump - -# Copy binary and config files from /build to root folder of scratch container. -COPY --from=builder ["/api-build/apiserver", "/"] -COPY --from=builder ["/tap-build/passivetapper", "/"] -COPY --from=site-build ["/ui-build/build", "/site"] +RUN go build -ldflags="-s -w" -o mizuagent . FROM alpine:3.13.5 RUN apk add bash libpcap-dev tcpdump - WORKDIR /app # Copy binary and config files from /build to root folder of scratch container. -COPY --from=builder ["/api-build/apiserver", "."] -COPY --from=builder ["/tap-build/passivetapper", "."] +COPY --from=builder ["/api-build/mizuagent", "."] COPY --from=site-build ["/ui-build/build", "site"] - -COPY api/scripts/multi-runner.sh ./ +COPY api/start.sh . # this script runs both apiserver and passivetapper and exits either if one of them exits, preventing a scenario where the container runs without one process -CMD "./multi-runner.sh" \ No newline at end of file +CMD "./start.sh" diff --git a/api/go.mod b/api/go.mod index 7b0075d02..d4b9f33c1 100644 --- a/api/go.mod +++ b/api/go.mod @@ -7,8 +7,13 @@ require ( github.com/djherbis/atime v1.0.0 github.com/fasthttp/websocket v1.4.3-beta.1 // indirect github.com/gofiber/fiber/v2 v2.8.0 + github.com/google/gopacket v1.1.19 github.com/google/martian v2.1.0+incompatible + github.com/gorilla/websocket v1.4.2 + github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231 + github.com/patrickmn/go-cache v2.1.0+incompatible go.mongodb.org/mongo-driver v1.5.1 + golang.org/x/net v0.0.0-20210421230115-4e50805a0758 gorm.io/driver/sqlite v1.1.4 gorm.io/gorm v1.21.8 ) diff --git a/api/go.sum b/api/go.sum index 070e59a2b..c208c6d23 100644 --- a/api/go.sum +++ b/api/go.sum @@ -48,8 +48,12 @@ github.com/gofiber/websocket/v2 v2.0.3/go.mod h1:/OTEImCxORKE5unw0dWqJYovid6vZF+ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +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/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= @@ -78,6 +82,12 @@ github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kN github.com/mattn/go-sqlite3 v1.14.5 h1:1IdxlwTNazvbKJQSxoJ5/9ECbEeaTTyeU7sEAZ5KKTQ= github.com/mattn/go-sqlite3 v1.14.5/go.mod h1:WVKg1VTActs4Qso6iwGbiFih2UIHo0ENGwNd0Lj+XmI= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231 h1:fa50YL1pzKW+1SsBnJDOHppJN9stOEwS+CRWyUtyYGU= +github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= +github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc h1:Ak86L+yDSOzKFa7WM5bf5itSOo1e3Xh8bm5YCMUXIjQ= +github.com/orcaman/concurrent-map v0.0.0-20210501183033-44dafcb38ecc/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= +github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= +github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -123,16 +133,23 @@ go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +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/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201016165138-7b1cca2348c0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226101413-39120d07d75e h1:jIQURUJ9mlLvYwTBtRHm9h58rYhSonLvRvgAnP8Nr7I= golang.org/x/net v0.0.0-20210226101413-39120d07d75e/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758 h1:aEpZnXcAmXkd6AvLb2OPt+EN1Zu/8Ne3pCqPjja5PXY= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -153,16 +170,23 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201210223839-7e3030f88018/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073 h1:8qxJSnu+7dRq6upnbntrmriWByIakBuct5OM/MdQC1M= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe h1:WdX7u8s3yOigWAhHEaDl8r9G+4XwFQEQFtBMYyN+kXQ= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +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= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/api/main.go b/api/main.go index 9342d14d5..24cdbbd05 100644 --- a/api/main.go +++ b/api/main.go @@ -1,24 +1,21 @@ package main import ( - "flag" "github.com/gofiber/fiber/v2" "mizuserver/pkg/inserter" "mizuserver/pkg/middleware" "mizuserver/pkg/routes" + "mizuserver/pkg/tap" "mizuserver/pkg/utils" ) - - func main() { + go tap.StartPassiveTapper() + app := fiber.New() - var harDir = flag.String("hardir", "input", "Directory in which we read har files from") - flag.Parse() - - go inserter.StartReadingFiles(*harDir) // process to read files and insert to DB + go inserter.StartReadingFiles(*tap.HarOutputDir) // process to read files and insert to DB middleware.FiberMiddleware(app) // Register Fiber's middleware for app. diff --git a/tap/src/cleaner.go b/api/pkg/tap/cleaner.go similarity index 98% rename from tap/src/cleaner.go rename to api/pkg/tap/cleaner.go index 5ee45a961..157a74eb0 100644 --- a/tap/src/cleaner.go +++ b/api/pkg/tap/cleaner.go @@ -1,4 +1,4 @@ -package main +package tap import ( "sync" diff --git a/tap/src/grpc_assembler.go b/api/pkg/tap/grpc_assembler.go similarity index 99% rename from tap/src/grpc_assembler.go rename to api/pkg/tap/grpc_assembler.go index 04d246b82..a63d93be0 100644 --- a/tap/src/grpc_assembler.go +++ b/api/pkg/tap/grpc_assembler.go @@ -1,4 +1,4 @@ -package main +package tap import ( "bufio" diff --git a/tap/src/har_writer.go b/api/pkg/tap/har_writer.go similarity index 99% rename from tap/src/har_writer.go rename to api/pkg/tap/har_writer.go index 108ee18c9..69c3c3b60 100644 --- a/tap/src/har_writer.go +++ b/api/pkg/tap/har_writer.go @@ -1,4 +1,4 @@ -package main +package tap import ( "encoding/json" diff --git a/tap/src/http_matcher.go b/api/pkg/tap/http_matcher.go similarity index 99% rename from tap/src/http_matcher.go rename to api/pkg/tap/http_matcher.go index ee734a9cf..359be3fee 100644 --- a/tap/src/http_matcher.go +++ b/api/pkg/tap/http_matcher.go @@ -1,4 +1,4 @@ -package main +package tap import ( "fmt" diff --git a/tap/src/http_reader.go b/api/pkg/tap/http_reader.go similarity index 99% rename from tap/src/http_reader.go rename to api/pkg/tap/http_reader.go index c3dca8f68..d302b1a0b 100644 --- a/tap/src/http_reader.go +++ b/api/pkg/tap/http_reader.go @@ -1,4 +1,4 @@ -package main +package tap import ( "bufio" diff --git a/tap/src/net_utils.go b/api/pkg/tap/net_utils.go similarity index 99% rename from tap/src/net_utils.go rename to api/pkg/tap/net_utils.go index 7219fe90b..deafdc910 100644 --- a/tap/src/net_utils.go +++ b/api/pkg/tap/net_utils.go @@ -1,4 +1,4 @@ -package main +package tap import ( "net" diff --git a/tap/src/passive_tapper.go b/api/pkg/tap/passive_tapper.go similarity index 98% rename from tap/src/passive_tapper.go rename to api/pkg/tap/passive_tapper.go index f821a9c68..6127277c5 100644 --- a/tap/src/passive_tapper.go +++ b/api/pkg/tap/passive_tapper.go @@ -6,7 +6,7 @@ // The pcapdump binary implements a tcpdump-like command line tool with gopacket // using pcap as a backend data collection mechanism. -package main +package tap import ( "encoding/hex" @@ -96,7 +96,7 @@ var memprofile = flag.String("memprofile", "", "Write memory profile") // output var dumpToHar = flag.Bool("hardump", false, "Dump traffic to har files") -var harOutputDir = flag.String("hardir", "output", "Directory in which to store output har files") +var HarOutputDir = flag.String("hardir", "output", "Directory in which to store output har files") var harEntriesPerFile = flag.Int("harentriesperfile", 200, "Number of max number of har entries to store in each file") var reqResMatcher = createResponseRequestMatcher() // global @@ -198,7 +198,7 @@ func (c *Context) GetCaptureInfo() gopacket.CaptureInfo { return c.CaptureInfo } -func main() { +func StartPassiveTapper() { defer util.Run()() if *debug { outputLevel = 2 @@ -313,7 +313,7 @@ func main() { var harWriter *HarWriter if *dumpToHar { - harWriter = NewHarWriter(*harOutputDir, *harEntriesPerFile) + harWriter = NewHarWriter(*HarOutputDir, *harEntriesPerFile) harWriter.Start() defer harWriter.Stop() } diff --git a/tap/src/stats_tracker.go b/api/pkg/tap/stats_tracker.go similarity index 97% rename from tap/src/stats_tracker.go rename to api/pkg/tap/stats_tracker.go index b362b4bb4..ecee29202 100644 --- a/tap/src/stats_tracker.go +++ b/api/pkg/tap/stats_tracker.go @@ -1,4 +1,4 @@ -package main +package tap import ( "sync" diff --git a/tap/src/tap_output.go b/api/pkg/tap/tap_output.go similarity index 99% rename from tap/src/tap_output.go rename to api/pkg/tap/tap_output.go index f96a44330..efbe874c6 100644 --- a/tap/src/tap_output.go +++ b/api/pkg/tap/tap_output.go @@ -1,4 +1,4 @@ -package main +package tap import ( "bytes" diff --git a/tap/src/tcp_stream.go b/api/pkg/tap/tcp_stream.go similarity index 99% rename from tap/src/tcp_stream.go rename to api/pkg/tap/tcp_stream.go index 2150f2b9e..7e96e9ed5 100644 --- a/tap/src/tcp_stream.go +++ b/api/pkg/tap/tcp_stream.go @@ -1,4 +1,4 @@ -package main +package tap import ( "encoding/binary" diff --git a/tap/src/tcp_stream_factory.go b/api/pkg/tap/tcp_stream_factory.go similarity index 99% rename from tap/src/tcp_stream_factory.go rename to api/pkg/tap/tcp_stream_factory.go index ec981722f..3cb7bfd2d 100644 --- a/tap/src/tcp_stream_factory.go +++ b/api/pkg/tap/tcp_stream_factory.go @@ -1,4 +1,4 @@ -package main +package tap import ( "fmt" diff --git a/api/scripts/multi-runner.sh b/api/scripts/multi-runner.sh deleted file mode 100755 index 41d5697bc..000000000 --- a/api/scripts/multi-runner.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# this script runs both executables and exits everything if one fails -./apiserver -hardir /tmp/mizuhars & -./passivetapper -i any -hardump -hardir /tmp/mizuhars -harentriesperfile 5 -targets "${TAPPED_ADDRESSES}" & -wait -n -pkill -P $$ diff --git a/api/start.sh b/api/start.sh new file mode 100755 index 000000000..f231f23c2 --- /dev/null +++ b/api/start.sh @@ -0,0 +1,2 @@ +#!/bin/bash +./mizuagent -i any -hardump -hardir /tmp/mizuhars -harentriesperfile 5 -targets ${TAPPED_ADDRESSES} \ No newline at end of file diff --git a/tap/README.md b/tap/README.md deleted file mode 100644 index 450495ce2..000000000 --- a/tap/README.md +++ /dev/null @@ -1 +0,0 @@ -# mizu TAP module diff --git a/tap/go.mod b/tap/go.mod deleted file mode 100644 index d6ca4aff3..000000000 --- a/tap/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module passive-tapper - -go 1.13 - -require ( - github.com/google/gopacket v1.1.19 - github.com/google/martian v2.1.0+incompatible - github.com/gorilla/websocket v1.4.2 - github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231 - github.com/patrickmn/go-cache v2.1.0+incompatible - golang.org/x/net v0.0.0-20210421230115-4e50805a0758 -) diff --git a/tap/go.sum b/tap/go.sum deleted file mode 100644 index 1b9b47ecc..000000000 --- a/tap/go.sum +++ /dev/null @@ -1,31 +0,0 @@ -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/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231 h1:fa50YL1pzKW+1SsBnJDOHppJN9stOEwS+CRWyUtyYGU= -github.com/orcaman/concurrent-map v0.0.0-20210106121528-16402b402231/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= -github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -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/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/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-20210421230115-4e50805a0758 h1:aEpZnXcAmXkd6AvLb2OPt+EN1Zu/8Ne3pCqPjja5PXY= -golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/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-20210420072515-93ed5bcd2bfe h1:WdX7u8s3yOigWAhHEaDl8r9G+4XwFQEQFtBMYyN+kXQ= -golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=