diff --git a/common/stats/session/session.go b/common/stats/session/session.go
index 10fb514..3c11967 100644
--- a/common/stats/session/session.go
+++ b/common/stats/session/session.go
@@ -56,17 +56,18 @@ func (s *simpleSessionStater) Start() error {
})
_, _ = fmt.Fprintf(w, "
")
- _, _ = fmt.Fprintf(w, "| Process Name | Network | Duration | Local Addr | Remote Addr | Upload Bytes | Download Bytes |
")
+ _, _ = fmt.Fprintf(w, "| Process Name | Network | Duration | Dialer Addr | Client Addr | Target Addr | Upload Bytes | Download Bytes |
")
sort.Slice(sessions, func(i, j int) bool {
return sessions[i].SessionStart.After(sessions[j].SessionStart)
})
for _, sess := range sessions {
- _, _ = fmt.Fprintf(w, "| %v | %v | %v | %v | %v | %v | %v |
",
+ _, _ = fmt.Fprintf(w, "| %v | %v | %v | %v | %v | %v | %v | %v |
",
sess.ProcessName,
sess.Network,
time.Now().Sub(sess.SessionStart).Round(time.Second),
- sess.LocalAddr,
- sess.RemoteAddr,
+ sess.DialerAddr,
+ sess.ClientAddr,
+ sess.TargetAddr,
p.Sprintf("%d", atomic.LoadInt64(&sess.UploadBytes)),
p.Sprintf("%d", atomic.LoadInt64(&sess.DownloadBytes)),
)
diff --git a/common/stats/stats.go b/common/stats/stats.go
index a7d1ac3..e2c44a1 100644
--- a/common/stats/stats.go
+++ b/common/stats/stats.go
@@ -16,8 +16,9 @@ type SessionStater interface {
type Session struct {
ProcessName string
Network string
- LocalAddr string
- RemoteAddr string
+ DialerAddr string
+ ClientAddr string
+ TargetAddr string
UploadBytes int64
DownloadBytes int64
SessionStart time.Time
diff --git a/proxy/socks/tcp.go b/proxy/socks/tcp.go
index 5256c98..2cb4e56 100644
--- a/proxy/socks/tcp.go
+++ b/proxy/socks/tcp.go
@@ -86,7 +86,7 @@ func (h *tcpHandler) relay(localConn, remoteConn net.Conn, sess *stats.Session)
remoteConn.Close()
}()
- // Uplink
+ // UpLink
go func() {
var err error
if h.sessionStater != nil && sess != nil {
@@ -98,7 +98,7 @@ func (h *tcpHandler) relay(localConn, remoteConn net.Conn, sess *stats.Session)
upCh <- err
}()
- // Downlink
+ // DownLink
if h.sessionStater != nil && sess != nil {
statsCopy(localConn, remoteConn, sess, dirDownlink)
} else {
@@ -147,8 +147,9 @@ func (h *tcpHandler) Handle(localConn net.Conn, target *net.TCPAddr) error {
sess = &stats.Session{
ProcessName: process,
Network: target.Network(),
- LocalAddr: localConn.LocalAddr().String(),
- RemoteAddr: targetAddr,
+ DialerAddr: remoteConn.LocalAddr().String(),
+ ClientAddr: localConn.LocalAddr().String(),
+ TargetAddr: targetAddr,
UploadBytes: 0,
DownloadBytes: 0,
SessionStart: time.Now(),
diff --git a/proxy/socks/udp.go b/proxy/socks/udp.go
index f454f71..8cdb30d 100644
--- a/proxy/socks/udp.go
+++ b/proxy/socks/udp.go
@@ -118,31 +118,31 @@ func (h *udpHandler) Connect(conn core.UDPConn, target *net.UDPAddr) error {
}
func (h *udpHandler) connectInternal(conn core.UDPConn, targetAddr string) error {
- c, err := net.DialTimeout("tcp", core.ParseTCPAddr(h.proxyHost, h.proxyPort).String(), 4*time.Second)
+ remoteConn, err := net.DialTimeout("tcp", core.ParseTCPAddr(h.proxyHost, h.proxyPort).String(), 4*time.Second)
if err != nil {
return err
}
- _ = c.SetDeadline(time.Now().Add(4 * time.Second))
+ _ = remoteConn.SetDeadline(time.Now().Add(4 * time.Second))
// send VER, NMETHODS, METHODS
- _, _ = c.Write([]byte{5, 1, 0})
+ _, _ = remoteConn.Write([]byte{5, 1, 0})
buf := make([]byte, MaxAddrLen)
// read VER METHOD
- if _, err := io.ReadFull(c, buf[:2]); err != nil {
+ if _, err := io.ReadFull(remoteConn, buf[:2]); err != nil {
return err
}
if len(targetAddr) != 0 {
targetAddr := ParseAddr(targetAddr)
// write VER CMD RSV ATYP DST.ADDR DST.PORT
- _, _ = c.Write(append([]byte{5, socks5UDPAssociate, 0}, targetAddr...))
+ _, _ = remoteConn.Write(append([]byte{5, socks5UDPAssociate, 0}, targetAddr...))
} else {
- _, _ = c.Write(append([]byte{5, socks5UDPAssociate, 0}, []byte{1, 0, 0, 0, 0, 0, 0}...))
+ _, _ = remoteConn.Write(append([]byte{5, socks5UDPAssociate, 0}, []byte{1, 0, 0, 0, 0, 0, 0}...))
}
// read VER REP RSV ATYP BND.ADDR BND.PORT
- if _, err := io.ReadFull(c, buf[:3]); err != nil {
+ if _, err := io.ReadFull(remoteConn, buf[:3]); err != nil {
return err
}
@@ -151,7 +151,7 @@ func (h *udpHandler) connectInternal(conn core.UDPConn, targetAddr string) error
return errors.New("SOCKS handshake failed")
}
- remoteAddr, err := readAddr(c, buf)
+ remoteAddr, err := readAddr(remoteConn, buf)
if err != nil {
return err
}
@@ -161,20 +161,20 @@ func (h *udpHandler) connectInternal(conn core.UDPConn, targetAddr string) error
return errors.New("failed to resolve remote address")
}
- go h.handleTCP(conn, c)
+ go h.handleTCP(conn, remoteConn)
- pc, err := net.ListenPacket("udp", "")
+ remoteUDPConn, err := net.ListenPacket("udp", "")
if err != nil {
return err
}
h.Lock()
- h.tcpConns[conn] = c
- h.udpConns[conn] = pc
+ h.tcpConns[conn] = remoteConn
+ h.udpConns[conn] = remoteUDPConn
h.remoteAddrs[conn] = resolvedRemoteAddr
h.Unlock()
- go h.fetchUDPInput(conn, pc)
+ go h.fetchUDPInput(conn, remoteUDPConn)
if len(targetAddr) != 0 {
var process string
@@ -190,8 +190,9 @@ func (h *udpHandler) connectInternal(conn core.UDPConn, targetAddr string) error
sess := &stats.Session{
ProcessName: process,
Network: conn.LocalAddr().Network(),
- LocalAddr: conn.LocalAddr().String(),
- RemoteAddr: targetAddr,
+ DialerAddr: remoteConn.LocalAddr().String(),
+ ClientAddr: conn.LocalAddr().String(),
+ TargetAddr: targetAddr,
UploadBytes: 0,
DownloadBytes: 0,
SessionStart: time.Now(),