forawrder: change localip to interface

This commit is contained in:
nadoo 2018-08-18 23:59:21 +08:00
parent 59e7b17200
commit c21a7d8c4d
3 changed files with 29 additions and 9 deletions

View File

@ -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

View File

@ -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

View File

@ -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
}