diff --git a/README.md b/README.md index d8519c4..f7b917f 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,6 @@ ## todo -认证失败应当是 Warn 级别而非 Error 级别,需要修改 - -考虑再修改逻辑,等待子协程退出不应当级联,而是放在包全局管理,否则流程可能有问题 +客户端断开后端口未释放问题 ProxyConn 直接实现 Conn 相同的接口,不再取出 Conn 使用 diff --git a/config/test/docker-compose.yaml b/config/test/docker-compose.yaml index 33d0618..fe9e9ce 100644 --- a/config/test/docker-compose.yaml +++ b/config/test/docker-compose.yaml @@ -41,10 +41,27 @@ services: - postgres restart: always + vector: + container_name: proxy-server-dev-vector + build: + context: ./vector + dockerfile: Dockerfile + ports: + - "8686:8686" + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /var/log/vector:/temp/vector + networks: + - proxy-server-test + depends_on: + - service + restart: always + networks: proxy-server-test: driver: bridge volumes: postgres-data: - name: proxy-server-test-postgres-data \ No newline at end of file + name: proxy-server-test-postgres-data diff --git a/config/test/vector/Dockerfile b/config/test/vector/Dockerfile new file mode 100644 index 0000000..70ff899 --- /dev/null +++ b/config/test/vector/Dockerfile @@ -0,0 +1,6 @@ +FROM timberio/vector:0.45.0-debian + +# Copy the configuration file +COPY ./vector.toml /etc/vector/vector.toml + +CMD ["-c", "/etc/vector/vector.toml"] \ No newline at end of file diff --git a/config/test/vector/vector.toml b/config/test/vector/vector.toml new file mode 100644 index 0000000..c071bb8 --- /dev/null +++ b/config/test/vector/vector.toml @@ -0,0 +1,28 @@ +[sources.docker] +type = "docker_logs" +include_containers = ["proxy-server-dev-service"] + +[transforms.parse] +type = "remap" +inputs = ["docker"] +source = ". = parse_json!(.message)" + +[transforms.destinations] +type = "filter" +inputs = ["parse"] +condition = ".msg == \"用户访问记录\"" + +[sinks.file_out] +type = "file" +inputs = ["destinations"] +path = "/temp/vector/service-destinations/%Y-%m-%d.log" +encoding.codec = "csv" +encoding.csv.fields = ["time", "uid", "user", "proxy", "node", "proto", "dest", "domain"] + +[sinks.file_out.buffer] +type = "disk" +max_size = 268435488 + +[api] +enabled = true +address = "0.0.0.0:8686" \ No newline at end of file diff --git a/server/fwd/analysis.go b/server/fwd/analysis.go index ba9bc4a..a380f8e 100644 --- a/server/fwd/analysis.go +++ b/server/fwd/analysis.go @@ -122,7 +122,7 @@ func isTls(bytes []byte) (string, string, bool) { } func analysisHttp(reader *bufio.Reader) (string, error) { - slog.Debug("analysis http") + // reade top top, err := httpReadLine(reader) if err != nil { @@ -164,7 +164,6 @@ func httpReadLine(reader *bufio.Reader) (line string, err error) { } func analysisTls(reader *bufio.Reader) (string, error) { - slog.Debug("analysis https") // tls record _, err := utils.ReadBuffer(reader, 5) diff --git a/server/fwd/dispatcher/dispatch.go b/server/fwd/dispatcher/dispatch.go index 5d5274e..9045ced 100644 --- a/server/fwd/dispatcher/dispatch.go +++ b/server/fwd/dispatcher/dispatch.go @@ -48,9 +48,11 @@ func (s *Server) Run() error { if err != nil { return errors.Wrap(err, "dispatcher 监听失败") } + defer utils.Close(ls) m := cmux.New(ls) m.SetReadTimeout(5 * time.Second) + defer m.Close() go func() { <-s.ctx.Done() diff --git a/server/fwd/http/http.go b/server/fwd/http/http.go index 1f8d8a6..8bf4df3 100644 --- a/server/fwd/http/http.go +++ b/server/fwd/http/http.go @@ -125,7 +125,7 @@ func processHttps(ctx context.Context, req *Request) (*core.Conn, error) { Conn: req.conn, Reader: req.reader, Tag: req.conn.RemoteAddr().String() + "_" + req.conn.LocalAddr().String(), - Protocol: "https", + Protocol: "http", Dest: req.dest, Auth: req.auth, }, nil diff --git a/server/server.go b/server/server.go index a0bf6b9..260076d 100644 --- a/server/server.go +++ b/server/server.go @@ -12,9 +12,6 @@ import ( "sync" "syscall" "time" - - "github.com/lmittmann/tint" - "github.com/mattn/go-colorable" ) type Context struct { @@ -78,19 +75,23 @@ func Start() { } func initLog() { - writer := colorable.NewColorable(os.Stdout) - logger := slog.New(tint.NewHandler(writer, &tint.Options{ - Level: slog.LevelDebug, - TimeFormat: time.RFC3339, - ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr { - err, ok := attr.Value.Any().(error) - if !ok { - return attr - } - return tint.Err(err) - }, - })) - slog.SetDefault(logger) + // writer := colorable.NewColorable(os.Stdout) + // logger := slog.New(tint.NewHandler(writer, &tint.Options{ + // Level: slog.LevelDebug, + // TimeFormat: time.RFC3339, + // ReplaceAttr: func(_ []string, attr slog.Attr) slog.Attr { + // err, ok := attr.Value.Any().(error) + // if !ok { + // return attr + // } + // return tint.Err(err) + // }, + // })) + // slog.SetDefault(logger) + handler := slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ + Level: slog.LevelDebug, + }) + slog.SetDefault(slog.New(handler)) } func startFwdServer(ctx context.Context) error {