Files
GoTunnel/pkg/proxy/server.go
Flik f1038a132b
All checks were successful
Build Multi-Platform Binaries / build (push) Successful in 12m12s
1
2025-12-25 23:09:49 +08:00

63 lines
1.0 KiB
Go

package proxy
import (
"log"
"net"
)
// Server 代理服务器
type Server struct {
socks5 *SOCKS5Server
http *HTTPServer
listener net.Listener
typ string
}
// NewServer 创建代理服务器
func NewServer(typ string, dialer Dialer) *Server {
return &Server{
socks5: NewSOCKS5Server(dialer),
http: NewHTTPServer(dialer),
typ: typ,
}
}
// Run 启动代理服务
func (s *Server) Run(addr string) error {
ln, err := net.Listen("tcp", addr)
if err != nil {
return err
}
s.listener = ln
log.Printf("[Proxy] %s listening on %s", s.typ, addr)
for {
conn, err := ln.Accept()
if err != nil {
return err
}
go s.HandleConn(conn)
}
}
func (s *Server) HandleConn(conn net.Conn) {
var err error
switch s.typ {
case "socks5":
err = s.socks5.HandleConn(conn)
case "http":
err = s.http.HandleConn(conn)
}
if err != nil {
log.Printf("[Proxy] Error: %v", err)
}
}
// Close 关闭服务
func (s *Server) Close() error {
if s.listener != nil {
return s.listener.Close()
}
return nil
}