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()
// 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...))
}
}

View File

@ -6,6 +6,7 @@ import (
"io"
"net"
"net/textproto"
"strings"
"time"
"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())
if err = conn.Relay(c, rc); err != nil {
log.F("[http] relay error: %v", err)
s.proxy.Record(dialer, false)
log.F("[http] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), r.uri, dialer.Addr(), err)
// 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"
"net"
"net/url"
"strings"
"syscall"
"unsafe"
@ -114,8 +115,11 @@ func (s *RedirProxy) Serve(c net.Conn) {
log.F("[redir] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
if err = conn.Relay(c, rc); err != nil {
log.F("[redir] relay error: %v", err)
s.proxy.Record(dialer, false)
log.F("[redir] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
// 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/url"
"strconv"
"strings"
"sync"
"time"
@ -142,8 +143,11 @@ func (s *Socks5) Serve(c net.Conn) {
log.F("[socks5] %s <-> %s via %s", c.RemoteAddr(), tgt, dialer.Addr())
if err = conn.Relay(c, rc); err != nil {
log.F("[socks5] relay error: %v", err)
s.proxy.Record(dialer, false)
log.F("[socks5] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
// 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())
if err = conn.Relay(c, rc); err != nil {
log.F("[ss] relay error: %v", err)
s.proxy.Record(dialer, false)
log.F("[ss] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), tgt, dialer.Addr(), err)
// 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())
if err = conn.Relay(c, rc); err != nil {
log.F("[tcptun] relay error: %v", err)
s.proxy.Record(dialer, false)
log.F("[tcptun] %s <-> %s via %s, relay error: %v", c.RemoteAddr(), s.raddr, dialer.Addr(), err)
// 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 {
io.Writer
buf []byte
maskKey []byte
maskKey [maskKeyLen]byte
}
// FrameWriter returns a frame writer.
@ -51,7 +51,7 @@ func FrameWriter(w io.Writer) io.Writer {
return &frameWriter{
Writer: w,
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
_, ew = w.Writer.Write(w.maskKey)
_, ew = w.Writer.Write(w.maskKey[:])
if ew != nil {
err = ew
break