proxy: record failures of remote connection only

This commit is contained in:
nadoo 2020-09-14 20:56:37 +08:00
parent b3b11b4188
commit 89114e678b
7 changed files with 33 additions and 15 deletions

View File

@ -41,8 +41,8 @@ func main() {
confInit() confInit()
// setup a log func // setup a log func
log.F = func(f string, v ...interface{}) { if conf.Verbose {
if conf.Verbose { log.F = func(f string, v ...interface{}) {
stdlog.Output(2, fmt.Sprintf(f, v...)) stdlog.Output(2, fmt.Sprintf(f, v...))
} }
} }

View File

@ -6,6 +6,7 @@ import (
"io" "io"
"net" "net"
"net/textproto" "net/textproto"
"strings"
"time" "time"
"github.com/nadoo/glider/common/conn" "github.com/nadoo/glider/common/conn"
@ -103,8 +104,11 @@ func (s *HTTP) servHTTPS(r *request, c net.Conn) {
log.F("[http] %s <-> %s [c] via %s", c.RemoteAddr(), r.uri, dialer.Addr()) log.F("[http] %s <-> %s [c] via %s", c.RemoteAddr(), r.uri, dialer.Addr())
if err = conn.Relay(c, rc); err != nil { if err = conn.Relay(c, rc); err != nil {
log.F("[http] relay error: %v", err) log.F("[http] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), r.uri, dialer.Addr(), err)
s.proxy.Record(dialer, false) // record remote conn failure only
if !strings.Contains(err.Error(), s.addr) {
s.proxy.Record(dialer, false)
}
} }
} }

View File

@ -7,6 +7,7 @@ import (
"errors" "errors"
"net" "net"
"net/url" "net/url"
"strings"
"syscall" "syscall"
"unsafe" "unsafe"
@ -114,8 +115,11 @@ func (s *RedirProxy) Serve(c net.Conn) {
log.F("[redir] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) log.F("[redir] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
if err = conn.Relay(c, rc); err != nil { if err = conn.Relay(c, rc); err != nil {
log.F("[redir] relay error: %v", err) log.F("[redir] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
s.proxy.Record(dialer, false) // record remote conn failure only
if !strings.Contains(err.Error(), s.addr) {
s.proxy.Record(dialer, false)
}
} }
} }

View File

@ -15,6 +15,7 @@ import (
"net" "net"
"net/url" "net/url"
"strconv" "strconv"
"strings"
"sync" "sync"
"time" "time"
@ -142,8 +143,11 @@ func (s *Socks5) Serve(c net.Conn) {
log.F("[socks5] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) log.F("[socks5] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
if err = conn.Relay(c, rc); err != nil { if err = conn.Relay(c, rc); err != nil {
log.F("[socks5] relay error: %v", err) log.F("[socks5] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
s.proxy.Record(dialer, false) // record remote conn failure only
if !strings.Contains(err.Error(), s.addr) {
s.proxy.Record(dialer, false)
}
} }
} }

View File

@ -161,8 +161,11 @@ func (s *SS) Serve(c net.Conn) {
log.F("[ss] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr()) log.F("[ss] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
if err = conn.Relay(c, rc); err != nil { if err = conn.Relay(c, rc); err != nil {
log.F("[ss] relay error: %v", err) log.F("[ss] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
s.proxy.Record(dialer, false) // record remote conn failure only
if !strings.Contains(err.Error(), s.addr) {
s.proxy.Record(dialer, false)
}
} }
} }

View File

@ -91,7 +91,10 @@ func (s *TCPTun) Serve(c net.Conn) {
log.F("[tcptun] %s <-> %s via %s", c.RemoteAddr(), s.raddr, dialer.Addr()) log.F("[tcptun] %s <-> %s via %s", c.RemoteAddr(), s.raddr, dialer.Addr())
if err = conn.Relay(c, rc); err != nil { if err = conn.Relay(c, rc); err != nil {
log.F("[tcptun] relay error: %v", err) log.F("[tcptun] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), s.raddr, dialer.Addr(), err)
s.proxy.Record(dialer, false) // record remote conn failure only
if !strings.Contains(err.Error(), s.addr) {
s.proxy.Record(dialer, false)
}
} }
} }

View File

@ -42,7 +42,7 @@ const (
type frameWriter struct { type frameWriter struct {
io.Writer io.Writer
buf []byte buf []byte
maskKey []byte maskKey [maskKeyLen]byte
} }
// FrameWriter returns a frame writer. // FrameWriter returns a frame writer.
@ -51,7 +51,7 @@ func FrameWriter(w io.Writer) io.Writer {
return &frameWriter{ return &frameWriter{
Writer: w, Writer: w,
buf: make([]byte, maxFrameHeaderSize+defaultFrameSize), buf: make([]byte, maxFrameHeaderSize+defaultFrameSize),
maskKey: []byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)}, maskKey: [...]byte{byte(n), byte(n >> 8), byte(n >> 16), byte(n >> 24)},
} }
} }
@ -93,7 +93,7 @@ func (w *frameWriter) ReadFrom(r io.Reader) (n int64, err error) {
} }
// maskkey // maskkey
_, ew = w.Writer.Write(w.maskKey) _, ew = w.Writer.Write(w.maskKey[:])
if ew != nil { if ew != nil {
err = ew err = ew
break break