mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 07:42:38 +08:00 
			
		
		
		
	udptun: support direct mode
This commit is contained in:
		
							parent
							
								
									5b2518fac0
								
							
						
					
					
						commit
						b33127fba5
					
				@ -12,9 +12,6 @@ var Direct = &direct{}
 | 
				
			|||||||
func (d *direct) Addr() string { return "DIRECT" }
 | 
					func (d *direct) Addr() string { return "DIRECT" }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (d *direct) Dial(network, addr string) (net.Conn, error) {
 | 
					func (d *direct) Dial(network, addr string) (net.Conn, error) {
 | 
				
			||||||
	if network == "uot" {
 | 
					 | 
				
			||||||
		network = "udp"
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	c, err := net.Dial(network, addr)
 | 
						c, err := net.Dial(network, addr)
 | 
				
			||||||
	if c, ok := c.(*net.TCPConn); ok {
 | 
						if c, ok := c.(*net.TCPConn); ok {
 | 
				
			||||||
		c.SetKeepAlive(true)
 | 
							c.SetKeepAlive(true)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										2
									
								
								ss.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								ss.go
									
									
									
									
									
								
							@ -217,7 +217,7 @@ func (s *SS) Dial(network, addr string) (net.Conn, error) {
 | 
				
			|||||||
	switch network {
 | 
						switch network {
 | 
				
			||||||
	case "tcp":
 | 
						case "tcp":
 | 
				
			||||||
		return s.DialTCP(target)
 | 
							return s.DialTCP(target)
 | 
				
			||||||
	case "uot":
 | 
						case "udp":
 | 
				
			||||||
		target[0] = target[0] | 0x8
 | 
							target[0] = target[0] | 0x8
 | 
				
			||||||
		return s.DialTCP(target)
 | 
							return s.DialTCP(target)
 | 
				
			||||||
	// case "udp":
 | 
						// case "udp":
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										39
									
								
								udptun.go
									
									
									
									
									
								
							
							
						
						
									
										39
									
								
								udptun.go
									
									
									
									
									
								
							@ -35,6 +35,45 @@ func (s *UDPTun) ListenAndServe() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	logf("proxy-udptun listening UDP on %s", s.addr)
 | 
						logf("proxy-udptun listening UDP on %s", s.addr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if s.sDialer.Addr() == "DIRECT" {
 | 
				
			||||||
 | 
							s.ServeDirect(c)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							s.ServeSS(c)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ServeDirect .
 | 
				
			||||||
 | 
					func (s *UDPTun) ServeDirect(c net.PacketConn) {
 | 
				
			||||||
 | 
						buf := make([]byte, udpBufSize)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for {
 | 
				
			||||||
 | 
							n, clientAddr, err := c.ReadFrom(buf)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								logf("proxy-udptun read error: %v", err)
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rc, err := s.sDialer.Dial("udp", s.raddr)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								logf("proxy-udptun failed to connect to server %v: %v", s.raddr, err)
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if urc, ok := rc.(*net.UDPConn); ok {
 | 
				
			||||||
 | 
								urc.Write(buf[:n])
 | 
				
			||||||
 | 
								go func() {
 | 
				
			||||||
 | 
									timedCopy(c, clientAddr, urc, 5*time.Minute, false)
 | 
				
			||||||
 | 
									urc.Close()
 | 
				
			||||||
 | 
								}()
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							logf("proxy-udptun %s <-> %s", clientAddr, s.raddr)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ServeSS .
 | 
				
			||||||
 | 
					func (s *UDPTun) ServeSS(c net.PacketConn) {
 | 
				
			||||||
	// var nm sync.Map
 | 
						// var nm sync.Map
 | 
				
			||||||
	buf := make([]byte, udpBufSize)
 | 
						buf := make([]byte, udpBufSize)
 | 
				
			||||||
	tgt := ParseAddr(s.raddr)
 | 
						tgt := ParseAddr(s.raddr)
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@ func (s *UoTTun) ListenAndServe() {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		go func() {
 | 
							go func() {
 | 
				
			||||||
			rc, err := s.sDialer.Dial("uot", s.raddr)
 | 
								rc, err := s.sDialer.Dial("udp", s.raddr)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				logf("proxy-uottun failed to connect to server %v: %v", s.raddr, err)
 | 
									logf("proxy-uottun failed to connect to server %v: %v", s.raddr, err)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user