diff --git a/cmd/client/main.go b/cmd/client/main.go index d49c848..21590e4 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -15,10 +15,10 @@ func main() { cli := client.NewClient("localhost", 7000) // 添加 TCP 代理示例 - cli.AddProxy("ssh", pb.ProxyType_TCP, "127.0.0.1", 22, 2222) + // cli.AddProxy("ssh", pb.ProxyType_TCP, "127.0.0.1", 22, 2222) // 添加 UDP 代理示例 - // cli.AddProxy("dns", pb.ProxyType_UDP, "8.8.8.8", 53, 5353) + cli.AddProxy("dns", pb.ProxyType_UDP, "127.0.0.1", 9999, 10000) // 启动客户端 if err := cli.Start(); err != nil { diff --git a/internal/client/client.go b/internal/client/client.go index 7772187..2b773cd 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -6,7 +6,6 @@ import ( "log" "net" "os" - "strings" "sync" "time" @@ -18,28 +17,30 @@ import ( // Client 客户端 type Client struct { - serverAddr string - serverPort int - conn *grpc.ClientConn - client pb.TunnelServiceClient - stream pb.TunnelService_ConnectClient - ctx context.Context - cancel context.CancelFunc - proxies *pb.ProxyConfigs - mu sync.Mutex - connections sync.Map // map[connID]*ConnectionState + serverAddr string + serverPort int + conn *grpc.ClientConn + client pb.TunnelServiceClient + stream pb.TunnelService_ConnectClient + ctx context.Context + cancel context.CancelFunc + proxies *pb.ProxyConfigs + mu sync.Mutex + tcpConnections sync.Map // map[connID]*TCPConnectionState + udpConnections sync.Map // map[connID]*net.UDPConn } // NewClient 创建一个新的客户端 func NewClient(serverAddr string, serverPort int) *Client { ctx, cancel := context.WithCancel(context.Background()) return &Client{ - serverAddr: serverAddr, - serverPort: serverPort, - ctx: ctx, - cancel: cancel, - proxies: &pb.ProxyConfigs{}, - connections: sync.Map{}, + serverAddr: serverAddr, + serverPort: serverPort, + ctx: ctx, + cancel: cancel, + proxies: &pb.ProxyConfigs{}, + tcpConnections: sync.Map{}, + udpConnections: sync.Map{}, } } @@ -72,7 +73,7 @@ func (c *Client) Start() error { c.client = pb.NewTunnelServiceClient(conn) // 建立控制连接 - if err := c.establishControlConnection(); err != nil { + if err := c.connect(); err != nil { return err } @@ -82,10 +83,16 @@ func (c *Client) Start() error { // Stop 停止客户端 func (c *Client) Stop() { // 关闭所有连接 - c.connections.Range(func(key, value interface{}) bool { + c.tcpConnections.Range(func(key, value any) bool { connState := value.(*TCPConnectionState) connState.Close() - c.connections.Delete(key) + c.tcpConnections.Delete(key) + return true + }) + c.udpConnections.Range(func(key, value any) bool { + connState := value.(*net.UDPConn) + connState.Close() + c.udpConnections.Delete(key) return true }) @@ -96,8 +103,8 @@ func (c *Client) Stop() { } } -// establishControlConnection 建立控制连接 -func (c *Client) establishControlConnection() error { +// connect 建立控制连接 +func (c *Client) connect() error { stream, err := c.client.Connect(c.ctx) if err != nil { return fmt.Errorf("failed to establish control connection: %v", err) @@ -127,16 +134,21 @@ func (c *Client) receiveMessages() { log.Printf("Control connection closed: %v", err) // 尝试重连 time.Sleep(5 * time.Second) - if err := c.establishControlConnection(); err != nil { + if err := c.connect(); err != nil { log.Printf("Failed to re-establish control connection: %v", err) return } return } - switch msg.GetContent().(type) { + switch v := msg.GetContent().(type) { case *pb.Message_ProxyData: - c.handleProxyData(msg) + switch v.ProxyData.ProxyConfig.Type { + case pb.ProxyType_TCP: + c.handleTCPData(v) + case pb.ProxyType_UDP: + c.handleUDPData(v) + } case *pb.Message_RegisterProxiesError: c.handleRegisterProxiesError(msg) case *pb.Message_RegisterConfigs: @@ -147,45 +159,6 @@ func (c *Client) receiveMessages() { } } -func (c *Client) handleProxyData(msg *pb.Message) { - proxyData := msg.GetProxyData() - log.Printf("Received proxy data for connection: %v", proxyData.ConnId) - - // 处理代理数据 - hostPort := net.JoinHostPort(proxyData.ProxyConfig.LocalIp, fmt.Sprintf("%d", proxyData.ProxyConfig.LocalPort)) - - existingConn, ok := c.connections.Load(proxyData.ConnId) - var connState *TCPConnectionState - if ok { - connState = existingConn.(*TCPConnectionState) - } else { - conn, err := net.Dial(strings.ToLower(proxyData.ProxyConfig.Type.String()), hostPort) - if err != nil { - log.Printf("Failed to connect to proxy: %v", err) - return - } - switch strings.ToLower(proxyData.ProxyConfig.Type.String()) { - case "tcp": - if tcpConn, ok := conn.(*net.TCPConn); ok { - _ = tcpConn.SetKeepAlive(true) - _ = tcpConn.SetKeepAlivePeriod(30 * time.Second) - _ = tcpConn.SetNoDelay(true) - } - } - connState = NewTCPConnectionState(conn, proxyData.ConnId, proxyData.ProxyConfig, c.stream) - c.connections.Store(proxyData.ConnId, connState) - } - - err := connState.WriteData(proxyData.Data) - if err != nil { - log.Printf("Failed to write data: %v", err) - connState.Close() - c.connections.Delete(proxyData.ConnId) - return - } - connState.StartReading() -} - func (c *Client) handleRegisterProxiesError(msg *pb.Message) { registerProxiesError := msg.GetRegisterProxiesError() log.Printf("Register proxies error: %v", registerProxiesError.ProxyConfig.Name) @@ -201,9 +174,9 @@ func (c *Client) handleRegisterConfigs(msg *pb.Message) { func (c *Client) handleProxyError(msg *pb.Message) { proxyError := msg.GetProxyError() - connState, ok := c.connections.Load(proxyError.ConnId) + connState, ok := c.tcpConnections.Load(proxyError.ConnId) if ok { connState.(*TCPConnectionState).Close() - c.connections.Delete(proxyError.ConnId) + c.tcpConnections.Delete(proxyError.ConnId) } } diff --git a/internal/client/tcp.go b/internal/client/tcp.go new file mode 100644 index 0000000..92717c3 --- /dev/null +++ b/internal/client/tcp.go @@ -0,0 +1,48 @@ +package client + +import ( + "fmt" + "log" + "net" + pb "net-tunnel/pkg/proto" + "strings" + "time" +) + +func (c *Client) handleTCPData(msg *pb.Message_ProxyData) { + log.Printf("Received proxy data for connection: %v", msg.ProxyData.ConnId) + + // 处理代理数据 + hostPort := net.JoinHostPort(msg.ProxyData.ProxyConfig.LocalIp, fmt.Sprintf("%d", msg.ProxyData.ProxyConfig.LocalPort)) + + existingConn, ok := c.tcpConnections.Load(msg.ProxyData.ConnId) + var connState *TCPConnectionState + if ok { + connState = existingConn.(*TCPConnectionState) + } else { + conn, err := net.Dial(strings.ToLower(msg.ProxyData.ProxyConfig.Type.String()), hostPort) + if err != nil { + log.Printf("Failed to connect to proxy: %v", err) + return + } + switch strings.ToLower(msg.ProxyData.ProxyConfig.Type.String()) { + case "tcp": + if tcpConn, ok := conn.(*net.TCPConn); ok { + _ = tcpConn.SetKeepAlive(true) + _ = tcpConn.SetKeepAlivePeriod(30 * time.Second) + _ = tcpConn.SetNoDelay(true) + } + } + connState = NewTCPConnectionState(conn, msg.ProxyData.ConnId, msg.ProxyData.ProxyConfig, c.stream) + c.tcpConnections.Store(msg.ProxyData.ConnId, connState) + } + + err := connState.WriteData(msg.ProxyData.Data) + if err != nil { + log.Printf("Failed to write data: %v", err) + connState.Close() + c.tcpConnections.Delete(msg.ProxyData.ConnId) + return + } + connState.StartReading() +} diff --git a/internal/client/udp.go b/internal/client/udp.go new file mode 100644 index 0000000..03087e9 --- /dev/null +++ b/internal/client/udp.go @@ -0,0 +1,83 @@ +package client + +import ( + "fmt" + "log" + "net" + pb "net-tunnel/pkg/proto" + "time" +) + +func (c *Client) handleUDPData(msg *pb.Message_ProxyData) { + log.Printf("Received UDP proxy data for connection: %v", msg.ProxyData.ConnId) + hostPort := net.JoinHostPort(msg.ProxyData.ProxyConfig.LocalIp, fmt.Sprintf("%d", msg.ProxyData.ProxyConfig.LocalPort)) + + // 获取或创建 UDP 连接 + udpConnKey := msg.ProxyData.ConnId + var conn *net.UDPConn + + existingConn, ok := c.udpConnections.Load(udpConnKey) + if ok { + conn = existingConn.(*net.UDPConn) + } else { + udpAddr, err := net.ResolveUDPAddr("udp", hostPort) + if err != nil { + log.Printf("Failed to resolve UDP address: %v", err) + return + } + conn, err = net.DialUDP("udp", nil, udpAddr) + if err != nil { + log.Printf("Failed to dial UDP address: %v", err) + return + } + c.udpConnections.Store(udpConnKey, conn) + + go c.readFromUDPConn(msg, conn) + } + + _, err := conn.Write(msg.ProxyData.Data) + if err != nil { + log.Printf("Failed to write data to UDP connection: %v", err) + conn.Close() + c.udpConnections.Delete(udpConnKey) + return + } +} + +func (c *Client) readFromUDPConn(msg *pb.Message_ProxyData, conn *net.UDPConn) { + buffer := make([]byte, 4096) + for { + err := conn.SetReadDeadline(time.Now().Add(time.Minute * 10)) + if err != nil { + log.Printf("Failed to set read deadline: %v", err) + return + } + n, _, err := conn.ReadFromUDP(buffer) + if err != nil { + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + continue + } + log.Printf("Failed to read from UDP connection: %v", err) + return + } + if n > 0 { + msg := &pb.Message{ + Content: &pb.Message_ProxyData{ + ProxyData: &pb.ProxyData{ + ConnId: msg.ProxyData.ConnId, + ProxyConfig: msg.ProxyData.ProxyConfig, + Data: buffer[:n], + }, + }, + } + if err := c.stream.Send(msg); err != nil { + log.Printf("Failed to send proxy data: %v", err) + break + } + } + } + + conn.Close() + c.udpConnections.Delete(msg.ProxyData.ConnId) + log.Printf("UDP connection closed: %v", msg.ProxyData.ConnId) +} diff --git a/internal/server/proxy.go b/internal/server/proxy.go index eee5f9c..1befd8c 100644 --- a/internal/server/proxy.go +++ b/internal/server/proxy.go @@ -18,6 +18,7 @@ type ProxyEntry struct { TCPListener net.Listener TCPConns sync.Map UDPConn *net.UDPConn + UDPAddrs sync.Map // map[connID]net.UDPAddr } // ProxyManager 管理所有代理 @@ -148,32 +149,36 @@ func (m *ProxyManager) handleTCPConnections(entry *ProxyEntry) { break } - go m.handleTCPConnection(entry, conn) + connID := fmt.Sprintf("%s_%d", conn.RemoteAddr().String(), time.Now().UnixNano()) + entry.TCPConns.Store(connID, conn) + log.Printf("TCP connection for %s accepted", connID) + go m.handleTCPConnection(entry, connID, conn) } } // handleUDPPackets 处理传入的 UDP 数据包 func (m *ProxyManager) handleUDPPackets(entry *ProxyEntry) { - // buffer := make([]byte, 4096) - // for { - // n, addr, err := entry.UDPConn.ReadFromUDP(buffer) - // if err != nil { - // // 连接可能已关闭 - // log.Printf("UDP connection for %s closed: %v", entry.Config.Name, err) - // break - // } + buffer := make([]byte, 4096) + for { + n, addr, err := entry.UDPConn.ReadFromUDP(buffer) + if err != nil { + // 连接可能已关闭 + log.Printf("UDP connection for %s closed: %v", entry.Config.Name, err) + break + } + entry.UDPAddrs.Store(addr.String(), addr) + log.Printf("UDP connection for %s accepted", addr.String()) - // go m.handleUDPPacket(entry, buffer[:n], addr) - // } + go m.handleUDPPacket(entry, buffer[:n], addr) + } } -func (m *ProxyManager) handleTCPConnection(entry *ProxyEntry, conn net.Conn) { +func (m *ProxyManager) handleTCPConnection(entry *ProxyEntry, connID string, conn net.Conn) { if tcpConn, ok := conn.(*net.TCPConn); ok { _ = tcpConn.SetKeepAlive(true) _ = tcpConn.SetKeepAlivePeriod(30 * time.Second) _ = tcpConn.SetNoDelay(true) } - connID := fmt.Sprintf("%s_%d", conn.RemoteAddr().String(), time.Now().UnixNano()) defer func() { conn.Close() @@ -182,15 +187,12 @@ func (m *ProxyManager) handleTCPConnection(entry *ProxyEntry, conn net.Conn) { }() // 获取客户端的控制连接 - controlConn, ok := m.clientManager.Get(entry.ClientID) + c, ok := m.clientManager.Get(entry.ClientID) if !ok { log.Printf("Control connection not found for client %s", entry.ClientID) return } - entry.TCPConns.Store(connID, conn) - log.Printf("TCP connection for %s accepted", connID) - wg := sync.WaitGroup{} wg.Add(1) // 启动数据转发 @@ -209,7 +211,7 @@ func (m *ProxyManager) handleTCPConnection(entry *ProxyEntry, conn net.Conn) { } // 发送数据到客户端 - err = controlConn.Send(&proto.Message{ + err = c.Send(&proto.Message{ Content: &proto.Message_ProxyData{ ProxyData: &proto.ProxyData{ ConnId: connID, @@ -228,5 +230,23 @@ func (m *ProxyManager) handleTCPConnection(entry *ProxyEntry, conn net.Conn) { } func (m *ProxyManager) handleUDPPacket(entry *ProxyEntry, data []byte, addr *net.UDPAddr) { - // entry.UDPConn.WriteToUDP(data, addr) + c, ok := m.clientManager.Get(entry.ClientID) + if !ok { + log.Printf("Control connection not found for client %s", entry.ClientID) + return + } + + err := c.Send(&proto.Message{ + Content: &proto.Message_ProxyData{ + ProxyData: &proto.ProxyData{ + ConnId: addr.String(), + ProxyConfig: entry.Config, + Data: data, + }, + }, + }) + if err != nil { + log.Printf("Failed to send proxy data: %v", err) + return + } } diff --git a/internal/server/server.go b/internal/server/server.go index 1682daf..8edcb79 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -60,6 +60,7 @@ func (s *Server) Connect(stream pb.TunnelService_ConnectServer) error { clientID := "client_" + fmt.Sprint(time.Now().UnixNano()) conn := NewClientConnection(stream) + // 添加客户端 s.clientManager.Add(clientID, conn) defer s.clientManager.Remove(clientID) @@ -135,7 +136,39 @@ func (s *Server) handleProxyData(clientID string, msg *pb.Message_ProxyData) { } func (s *Server) handleUDPProxyData(clientID string, msg *pb.Message_ProxyData) { - + proxyEntry, ok := s.proxyManager.proxies.Load(msg.ProxyData.ProxyConfig.Name) + if !ok { + log.Printf("Proxy %s not found", msg.ProxyData.ProxyConfig.Name) + return + } + entry := proxyEntry.(*ProxyEntry) + addr, ok := entry.UDPAddrs.Load(msg.ProxyData.ConnId) + if !ok { + log.Printf("UDP connection %s not found", msg.ProxyData.ConnId) + return + } + _, err := entry.UDPConn.WriteToUDP(msg.ProxyData.Data, addr.(*net.UDPAddr)) + if err != nil { + log.Printf("Failed to write data to UDP connection: %v", err) + entry.UDPAddrs.Delete(msg.ProxyData.ConnId) + controlConn, ok := s.clientManager.Get(clientID) + if !ok { + log.Printf("Control connection not found for client %s", clientID) + return + } + if err := controlConn.Send(&pb.Message{ + Content: &pb.Message_ProxyError{ + ProxyError: &pb.ProxyError{ + ProxyConfig: msg.ProxyData.ProxyConfig, + ConnId: msg.ProxyData.ConnId, + Error: "Failed to write data to UDP connection", + }, + }, + }); err != nil { + log.Printf("Failed to send message to client %s: %v", clientID, err) + return + } + } } func (s *Server) handleTCPProxyData(clientID string, msg *pb.Message_ProxyData) { @@ -145,45 +178,42 @@ func (s *Server) handleTCPProxyData(clientID string, msg *pb.Message_ProxyData) return } entry := proxyEntry.(*ProxyEntry) - switch entry.Config.Type { - case pb.ProxyType_TCP: - conn, ok := entry.TCPConns.Load(msg.ProxyData.ConnId) - if !ok { - log.Printf("TCP connection %s not found", msg.ProxyData.ConnId) - controlConn, ok := s.clientManager.Get(clientID) - if ok { - if err := controlConn.Send(&pb.Message{ - Content: &pb.Message_ProxyError{ - ProxyError: &pb.ProxyError{ - ProxyConfig: msg.ProxyData.ProxyConfig, - ConnId: msg.ProxyData.ConnId, - Error: "TCP connection not found", - }, + conn, ok := entry.TCPConns.Load(msg.ProxyData.ConnId) + if !ok { + log.Printf("TCP connection %s not found", msg.ProxyData.ConnId) + controlConn, ok := s.clientManager.Get(clientID) + if ok { + if err := controlConn.Send(&pb.Message{ + Content: &pb.Message_ProxyError{ + ProxyError: &pb.ProxyError{ + ProxyConfig: msg.ProxyData.ProxyConfig, + ConnId: msg.ProxyData.ConnId, + Error: "TCP connection not found", }, - }); err != nil { - log.Printf("Failed to send message to client %s: %v", clientID, err) - } + }, + }); err != nil { + log.Printf("Failed to send message to client %s: %v", clientID, err) } - return } - _, err := conn.(net.Conn).Write(msg.ProxyData.Data) - if err != nil { - log.Printf("Failed to write data to TCP connection: %v", err) - conn.(net.Conn).Close() - entry.TCPConns.Delete(msg.ProxyData.ConnId) - controlConn, ok := s.clientManager.Get(clientID) - if ok { - if err := controlConn.Send(&pb.Message{ - Content: &pb.Message_ProxyError{ - ProxyError: &pb.ProxyError{ - ProxyConfig: msg.ProxyData.ProxyConfig, - ConnId: msg.ProxyData.ConnId, - Error: "Failed to write data to TCP connection", - }, + return + } + _, err := conn.(net.Conn).Write(msg.ProxyData.Data) + if err != nil { + log.Printf("Failed to write data to TCP connection: %v", err) + conn.(net.Conn).Close() + entry.TCPConns.Delete(msg.ProxyData.ConnId) + controlConn, ok := s.clientManager.Get(clientID) + if ok { + if err := controlConn.Send(&pb.Message{ + Content: &pb.Message_ProxyError{ + ProxyError: &pb.ProxyError{ + ProxyConfig: msg.ProxyData.ProxyConfig, + ConnId: msg.ProxyData.ConnId, + Error: "Failed to write data to TCP connection", }, - }); err != nil { - log.Printf("Failed to send message to client %s: %v", clientID, err) - } + }, + }); err != nil { + log.Printf("Failed to send message to client %s: %v", clientID, err) } } } diff --git a/pkg/proto/tunnel.pb.go b/pkg/proto/tunnel.pb.go index d0052ae..7ccdcaf 100644 --- a/pkg/proto/tunnel.pb.go +++ b/pkg/proto/tunnel.pb.go @@ -230,7 +230,7 @@ func (x *ProxyConfigs) GetConfigs() map[string]*ProxyConfig { type ProxyConfig struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Type ProxyType `protobuf:"varint,2,opt,name=type,proto3,enum=nwct.ProxyType" json:"type,omitempty"` + Type ProxyType `protobuf:"varint,2,opt,name=type,proto3,enum=net_tunnel.ProxyType" json:"type,omitempty"` LocalIp string `protobuf:"bytes,3,opt,name=local_ip,json=localIp,proto3" json:"local_ip,omitempty"` LocalPort int32 `protobuf:"varint,4,opt,name=local_port,json=localPort,proto3" json:"local_port,omitempty"` RemotePort int32 `protobuf:"varint,5,opt,name=remote_port,json=remotePort,proto3" json:"remote_port,omitempty"` @@ -480,72 +480,77 @@ var File_pkg_proto_tunnel_proto protoreflect.FileDescriptor var file_pkg_proto_tunnel_proto_rawDesc = string([]byte{ 0x0a, 0x16, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x74, 0x75, 0x6e, 0x6e, - 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x6e, 0x77, 0x63, 0x74, 0x22, 0x90, - 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x10, 0x72, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0a, 0x70, - 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x52, 0x0a, - 0x16, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x78, 0x69, 0x65, - 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, - 0x78, 0x69, 0x65, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x67, + 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, + 0x6e, 0x6e, 0x65, 0x6c, 0x22, 0xa8, 0x02, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x45, 0x0a, 0x10, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6e, 0x65, 0x74, + 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x36, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6e, 0x65, + 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x58, 0x0a, 0x16, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x6f, 0x78, + 0x69, 0x65, 0x73, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x12, 0x33, 0x0a, 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, - 0x6f, 0x78, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x22, 0x98, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x1a, 0x4d, 0x0a, - 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa1, 0x01, 0x0a, - 0x0b, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x23, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, - 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x72, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, + 0x78, 0x69, 0x65, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x39, 0x0a, 0x0b, 0x70, 0x72, 0x6f, + 0x78, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, + 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x45, + 0x72, 0x72, 0x6f, 0x72, 0x42, 0x09, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, + 0xa4, 0x01, 0x0a, 0x0c, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, + 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x1a, 0x53, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, + 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x01, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x78, 0x79, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, + 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x49, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x50, 0x6f, 0x72, 0x74, - 0x22, 0x6e, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, + 0x22, 0x74, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x63, 0x6f, 0x6e, 0x6e, 0x49, 0x64, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, - 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x62, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, - 0x69, 0x65, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, - 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, - 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, - 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x22, 0x71, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x72, 0x72, - 0x6f, 0x72, 0x12, 0x34, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, - 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x70, 0x72, 0x6f, - 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x6e, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x6e, 0x49, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x1d, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x78, 0x79, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, 0x07, 0x0a, - 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x32, 0x3c, 0x0a, 0x0d, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2b, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x12, 0x0d, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x1a, 0x0d, 0x2e, 0x6e, 0x77, 0x63, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x28, 0x01, 0x30, 0x01, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x6f, 0x6e, 0x6e, 0x49, 0x64, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, + 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x68, 0x0a, 0x14, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x50, 0x72, 0x6f, 0x78, 0x69, 0x65, 0x73, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3a, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x22, 0x77, 0x0a, 0x0a, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3a, + 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x78, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x2e, 0x50, 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x70, + 0x72, 0x6f, 0x78, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, + 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2a, 0x1d, 0x0a, 0x09, 0x50, 0x72, 0x6f, + 0x78, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x00, 0x12, + 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x32, 0x48, 0x0a, 0x0d, 0x54, 0x75, 0x6e, 0x6e, + 0x65, 0x6c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x12, 0x13, 0x2e, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x75, 0x6e, 0x6e, 0x65, + 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x13, 0x2e, 0x6e, 0x65, 0x74, 0x5f, + 0x74, 0x75, 0x6e, 0x6e, 0x65, 0x6c, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x28, 0x01, + 0x30, 0x01, 0x42, 0x0d, 0x5a, 0x0b, 0x2e, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( @@ -563,28 +568,28 @@ func file_pkg_proto_tunnel_proto_rawDescGZIP() []byte { var file_pkg_proto_tunnel_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_pkg_proto_tunnel_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_pkg_proto_tunnel_proto_goTypes = []any{ - (ProxyType)(0), // 0: nwct.ProxyType - (*Message)(nil), // 1: nwct.Message - (*ProxyConfigs)(nil), // 2: nwct.ProxyConfigs - (*ProxyConfig)(nil), // 3: nwct.ProxyConfig - (*ProxyData)(nil), // 4: nwct.ProxyData - (*RegisterProxiesError)(nil), // 5: nwct.RegisterProxiesError - (*ProxyError)(nil), // 6: nwct.ProxyError - nil, // 7: nwct.ProxyConfigs.ConfigsEntry + (ProxyType)(0), // 0: net_tunnel.ProxyType + (*Message)(nil), // 1: net_tunnel.Message + (*ProxyConfigs)(nil), // 2: net_tunnel.ProxyConfigs + (*ProxyConfig)(nil), // 3: net_tunnel.ProxyConfig + (*ProxyData)(nil), // 4: net_tunnel.ProxyData + (*RegisterProxiesError)(nil), // 5: net_tunnel.RegisterProxiesError + (*ProxyError)(nil), // 6: net_tunnel.ProxyError + nil, // 7: net_tunnel.ProxyConfigs.ConfigsEntry } var file_pkg_proto_tunnel_proto_depIdxs = []int32{ - 2, // 0: nwct.Message.register_configs:type_name -> nwct.ProxyConfigs - 4, // 1: nwct.Message.proxy_data:type_name -> nwct.ProxyData - 5, // 2: nwct.Message.register_proxies_error:type_name -> nwct.RegisterProxiesError - 6, // 3: nwct.Message.proxy_error:type_name -> nwct.ProxyError - 7, // 4: nwct.ProxyConfigs.configs:type_name -> nwct.ProxyConfigs.ConfigsEntry - 0, // 5: nwct.ProxyConfig.type:type_name -> nwct.ProxyType - 3, // 6: nwct.ProxyData.proxy_config:type_name -> nwct.ProxyConfig - 3, // 7: nwct.RegisterProxiesError.proxy_config:type_name -> nwct.ProxyConfig - 3, // 8: nwct.ProxyError.proxy_config:type_name -> nwct.ProxyConfig - 3, // 9: nwct.ProxyConfigs.ConfigsEntry.value:type_name -> nwct.ProxyConfig - 1, // 10: nwct.TunnelService.Connect:input_type -> nwct.Message - 1, // 11: nwct.TunnelService.Connect:output_type -> nwct.Message + 2, // 0: net_tunnel.Message.register_configs:type_name -> net_tunnel.ProxyConfigs + 4, // 1: net_tunnel.Message.proxy_data:type_name -> net_tunnel.ProxyData + 5, // 2: net_tunnel.Message.register_proxies_error:type_name -> net_tunnel.RegisterProxiesError + 6, // 3: net_tunnel.Message.proxy_error:type_name -> net_tunnel.ProxyError + 7, // 4: net_tunnel.ProxyConfigs.configs:type_name -> net_tunnel.ProxyConfigs.ConfigsEntry + 0, // 5: net_tunnel.ProxyConfig.type:type_name -> net_tunnel.ProxyType + 3, // 6: net_tunnel.ProxyData.proxy_config:type_name -> net_tunnel.ProxyConfig + 3, // 7: net_tunnel.RegisterProxiesError.proxy_config:type_name -> net_tunnel.ProxyConfig + 3, // 8: net_tunnel.ProxyError.proxy_config:type_name -> net_tunnel.ProxyConfig + 3, // 9: net_tunnel.ProxyConfigs.ConfigsEntry.value:type_name -> net_tunnel.ProxyConfig + 1, // 10: net_tunnel.TunnelService.Connect:input_type -> net_tunnel.Message + 1, // 11: net_tunnel.TunnelService.Connect:output_type -> net_tunnel.Message 11, // [11:12] is the sub-list for method output_type 10, // [10:11] is the sub-list for method input_type 10, // [10:10] is the sub-list for extension type_name diff --git a/pkg/proto/tunnel.proto b/pkg/proto/tunnel.proto index 9d9f96f..28d9695 100644 --- a/pkg/proto/tunnel.proto +++ b/pkg/proto/tunnel.proto @@ -1,6 +1,6 @@ syntax = "proto3"; -package nwct; +package net_tunnel; option go_package = "./pkg/proto"; diff --git a/pkg/proto/tunnel_grpc.pb.go b/pkg/proto/tunnel_grpc.pb.go index ee58baa..e1a86a8 100644 --- a/pkg/proto/tunnel_grpc.pb.go +++ b/pkg/proto/tunnel_grpc.pb.go @@ -19,7 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - TunnelService_Connect_FullMethodName = "/nwct.TunnelService/Connect" + TunnelService_Connect_FullMethodName = "/net_tunnel.TunnelService/Connect" ) // TunnelServiceClient is the client API for TunnelService service. @@ -102,7 +102,7 @@ type TunnelService_ConnectServer = grpc.BidiStreamingServer[Message, Message] // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) var TunnelService_ServiceDesc = grpc.ServiceDesc{ - ServiceName: "nwct.TunnelService", + ServiceName: "net_tunnel.TunnelService", HandlerType: (*TunnelServiceServer)(nil), Methods: []grpc.MethodDesc{}, Streams: []grpc.StreamDesc{ diff --git a/test/udp_server.py b/test/udp_server.py new file mode 100644 index 0000000..26ded0b --- /dev/null +++ b/test/udp_server.py @@ -0,0 +1,15 @@ +import socket + +# 绑定 IP 和端口 +UDP_IP = "0.0.0.0" # 监听所有网络接口 +UDP_PORT = 9999 + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +sock.bind((UDP_IP, UDP_PORT)) + +print(f"UDP 服务器已启动,监听端口 {UDP_PORT}...") + +while True: + data, addr = sock.recvfrom(1024) # buffer size 1024 bytes + print(f"Received message from {addr}: {data.decode()}") + sock.sendto(b"Message received", addr) # send response