summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2020-05-27 04:18:50 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2020-05-27 04:33:56 +0300
commita29c4614431c0f7b705ee793f0a98348cdd29595 (patch)
treee97f8a90f36efd7db76cff4069d856e841fe4fa0
parente43c60b56401be7515d7fbfdfe3e4e56d1886a23 (diff)
add time option for tee hook
-rw-r--r--TODO1
-rw-r--r--USAGE14
-rw-r--r--pkg/config/config.go1
-rw-r--r--pkg/server/hook/tee.go21
-rw-r--r--pkg/server/socket/sys.go2
5 files changed, 27 insertions, 12 deletions
diff --git a/TODO b/TODO
index 8bbac2e..2191e8f 100644
--- a/TODO
+++ b/TODO
@@ -12,4 +12,3 @@
- docs
- tproxy usage
-- tee with timestamps
diff --git a/USAGE b/USAGE
index ceea62d..bd9a8a4 100644
--- a/USAGE
+++ b/USAGE
@@ -1,9 +1,15 @@
-1. Transparent redirect proxy
+1. Transparent proxy using redirect
iptables -t nat -A OUTPUT -p tcp -d 198.145.29.83 -j REDIRECT --to-port 4000
tunnel add 4000,listen,redirect :proxy,addr=@original.addr @proxyaddr
-BUG:
- Using ipv4 redirection if direct connection established
- original.addr will be equal to listen address
+- check forward usage
+
+BUGS:
+ Direct connection also possible. In this case original.addr will be equal to listen address.
+ This happens when ipv4 is used.
+
+2. Transparent proxy using tproxy
+
+- todo
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 0e58553..5d2759e 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -7,6 +7,7 @@ import (
)
const TimeFormat = "2006-01-02/15:04:05"
+const TimeMsFormat = "2006-01-02/15:04:05.000"
const IoTimeout = 5 * time.Second
diff --git a/pkg/server/hook/tee.go b/pkg/server/hook/tee.go
index 3f61b50..34b2eca 100644
--- a/pkg/server/hook/tee.go
+++ b/pkg/server/hook/tee.go
@@ -6,6 +6,8 @@ import (
"fmt"
"os"
"path"
+ "time"
+ "tunnel/pkg/config"
"tunnel/pkg/server/env"
"tunnel/pkg/server/opts"
"tunnel/pkg/server/queue"
@@ -15,16 +17,23 @@ const teeDefaultFile = "/tmp/tunnel/dump"
type tee struct {
f *os.File
+ h *teeHook
}
type teeHook struct {
file string
+ time bool
}
func (t *tee) dump(s string, p []byte) error {
var out bytes.Buffer
- fmt.Fprintln(&out, s, len(p))
+ if t.h.time {
+ now := time.Now().Format(config.TimeMsFormat)
+ fmt.Fprintln(&out, now, s, len(p))
+ } else {
+ fmt.Fprintln(&out, s, len(p))
+ }
w := hex.Dumper(&out)
w.Write(p)
@@ -82,7 +91,7 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) {
tid, sid := env.Get("tunnel"), env.Get("stream")
name := fmt.Sprintf("%s.%s.%s", file, tid, sid)
- var t tee
+ t := &tee{h: h}
if f, err := os.Create(name); err != nil {
return nil, err
@@ -90,13 +99,13 @@ func (h *teeHook) Open(env env.Env) (interface{}, error) {
t.f = f
}
- return &t, nil
+ return t, nil
}
func newTeeHook(opts opts.Opts) (hook, error) {
- h := &teeHook{}
- if file, ok := opts["file"]; ok {
- h.file = file
+ h := &teeHook{
+ file: opts["file"],
+ time: opts.Bool("time"),
}
return h, nil
}
diff --git a/pkg/server/socket/sys.go b/pkg/server/socket/sys.go
index 70b59a6..03ab6f3 100644
--- a/pkg/server/socket/sys.go
+++ b/pkg/server/socket/sys.go
@@ -158,7 +158,7 @@ func setSocketTransparent(fd int) error {
func setConnTransparent(conn interface{}) error {
f := func(fd int) error {
- return setSocketTransparent(fd)
+ return setSocketTransparent(fd)
}
if err := withConnControl(conn, f); err != nil {