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

View File

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

View File

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