mirror of
				https://github.com/nadoo/glider.git
				synced 2025-11-04 15:52:38 +08:00 
			
		
		
		
	forawrder: change localip to interface
This commit is contained in:
		
							parent
							
								
									59e7b17200
								
							
						
					
					
						commit
						c21a7d8c4d
					
				@ -217,7 +217,7 @@ Available forward strategies:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Forwarder option scheme: FORWARD_URL#OPTIONS
 | 
					Forwarder option scheme: FORWARD_URL#OPTIONS
 | 
				
			||||||
  priority: set the priority of that forwarder, default:0
 | 
					  priority: set the priority of that forwarder, default:0
 | 
				
			||||||
  localip: set local ip address which will be used to connect remote forwarder
 | 
					  interface: set local interface or ip address used to connect remote forwarder
 | 
				
			||||||
  -
 | 
					  -
 | 
				
			||||||
  Examples:
 | 
					  Examples:
 | 
				
			||||||
    socks5://1.1.1.1:1080#priority=100
 | 
					    socks5://1.1.1.1:1080#priority=100
 | 
				
			||||||
 | 
				
			|||||||
@ -9,18 +9,38 @@ import (
 | 
				
			|||||||
// Direct proxy
 | 
					// Direct proxy
 | 
				
			||||||
type Direct struct {
 | 
					type Direct struct {
 | 
				
			||||||
	*net.Dialer
 | 
						*net.Dialer
 | 
				
			||||||
 | 
						addr net.Addr
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Default dialer
 | 
					// Default dialer
 | 
				
			||||||
var Default = &Direct{Dialer: &net.Dialer{}}
 | 
					var Default = &Direct{Dialer: &net.Dialer{}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewDirect returns a Direct dialer
 | 
					// NewDirect returns a Direct dialer
 | 
				
			||||||
func NewDirect(localip string) *Direct {
 | 
					func NewDirect(intface string) *Direct {
 | 
				
			||||||
	d := &net.Dialer{LocalAddr: &net.TCPAddr{
 | 
						d := &Direct{}
 | 
				
			||||||
		IP:   net.ParseIP(localip),
 | 
						dialer := &net.Dialer{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ip := net.ParseIP(intface)
 | 
				
			||||||
 | 
						if ip == nil {
 | 
				
			||||||
 | 
							iface, err := net.InterfaceByName(intface)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							addrs, err := iface.Addrs()
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								d.addr = addrs[0]
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						d.addr = &net.TCPAddr{
 | 
				
			||||||
 | 
							IP:   ip,
 | 
				
			||||||
		Port: 0,
 | 
							Port: 0,
 | 
				
			||||||
	}}
 | 
						}
 | 
				
			||||||
	return &Direct{Dialer: d}
 | 
					
 | 
				
			||||||
 | 
						dialer.LocalAddr = d.addr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return d
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Addr returns forwarder's address
 | 
					// Addr returns forwarder's address
 | 
				
			||||||
 | 
				
			|||||||
@ -19,7 +19,7 @@ type Forwarder struct {
 | 
				
			|||||||
	failures    uint32
 | 
						failures    uint32
 | 
				
			||||||
	MaxFailures uint32 //maxfailures to set to Disabled
 | 
						MaxFailures uint32 //maxfailures to set to Disabled
 | 
				
			||||||
	latency     int64
 | 
						latency     int64
 | 
				
			||||||
	localip     string // local ip address
 | 
						intface     string // local interface or ip address
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ForwarderFromURL parses `forward=` command value and returns a new forwarder
 | 
					// ForwarderFromURL parses `forward=` command value and returns a new forwarder
 | 
				
			||||||
@ -31,7 +31,7 @@ func ForwarderFromURL(s string) (f *Forwarder, err error) {
 | 
				
			|||||||
		err = f.parseOption(ss[1])
 | 
							err = f.parseOption(ss[1])
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var d Dialer = NewDirect(f.localip)
 | 
						var d Dialer = NewDirect(f.intface)
 | 
				
			||||||
	for _, url := range strings.Split(ss[0], ",") {
 | 
						for _, url := range strings.Split(ss[0], ",") {
 | 
				
			||||||
		d, err = DialerFromURL(url, d)
 | 
							d, err = DialerFromURL(url, d)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -58,7 +58,7 @@ func (f *Forwarder) parseOption(option string) error {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	f.Priority = int(priority)
 | 
						f.Priority = int(priority)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	f.localip = query.Get("localip")
 | 
						f.intface = query.Get("interface")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return err
 | 
						return err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user