mirror of
https://github.com/nadoo/glider.git
synced 2025-04-21 19:52:07 +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
|
||||
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:
|
||||
socks5://1.1.1.1:1080#priority=100
|
||||
|
@ -9,18 +9,38 @@ import (
|
||||
// Direct proxy
|
||||
type Direct struct {
|
||||
*net.Dialer
|
||||
addr net.Addr
|
||||
}
|
||||
|
||||
// Default dialer
|
||||
var Default = &Direct{Dialer: &net.Dialer{}}
|
||||
|
||||
// NewDirect returns a Direct dialer
|
||||
func NewDirect(localip string) *Direct {
|
||||
d := &net.Dialer{LocalAddr: &net.TCPAddr{
|
||||
IP: net.ParseIP(localip),
|
||||
func NewDirect(intface string) *Direct {
|
||||
d := &Direct{}
|
||||
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,
|
||||
}}
|
||||
return &Direct{Dialer: d}
|
||||
}
|
||||
|
||||
dialer.LocalAddr = d.addr
|
||||
|
||||
return d
|
||||
}
|
||||
|
||||
// Addr returns forwarder's address
|
||||
|
@ -19,7 +19,7 @@ type Forwarder struct {
|
||||
failures uint32
|
||||
MaxFailures uint32 //maxfailures to set to Disabled
|
||||
latency int64
|
||||
localip string // local ip address
|
||||
intface string // local interface or ip address
|
||||
}
|
||||
|
||||
// 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])
|
||||
}
|
||||
|
||||
var d Dialer = NewDirect(f.localip)
|
||||
var d Dialer = NewDirect(f.intface)
|
||||
for _, url := range strings.Split(ss[0], ",") {
|
||||
d, err = DialerFromURL(url, d)
|
||||
if err != nil {
|
||||
@ -58,7 +58,7 @@ func (f *Forwarder) parseOption(option string) error {
|
||||
}
|
||||
f.Priority = int(priority)
|
||||
|
||||
f.localip = query.Get("localip")
|
||||
f.intface = query.Get("interface")
|
||||
|
||||
return err
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user