mirror of
https://github.com/nadoo/glider.git
synced 2025-04-22 04:02: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
|
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