This repository has been archived by the owner on Aug 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6a54c4b
commit 65a7752
Showing
4 changed files
with
40 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,14 +4,16 @@ | |
* @Email: [email protected] | ||
* @Github: https://github.com/eaglexiang | ||
* @Date: 2019-03-24 22:35:45 | ||
* @LastEditTime: 2019-03-24 23:36:30 | ||
* @LastEditTime: 2019-03-27 22:48:21 | ||
*/ | ||
package comm | ||
|
||
import ( | ||
"errors" | ||
"strings" | ||
"time" | ||
|
||
"github.com/eaglexiang/go-trie" | ||
) | ||
|
||
// ET子协议的类型 | ||
|
@@ -73,10 +75,10 @@ var EtProxyStatusText map[int]string | |
var HostsCache = make(map[string]string) | ||
|
||
// ProxyDomains 强制代理的域名列表 | ||
var ProxyDomains []string | ||
var ProxyDomains trie.StringTrie | ||
|
||
// DirectDomains 强制直连的域名列表 | ||
var DirectDomains []string | ||
var DirectDomains trie.StringTrie | ||
|
||
// Timeout 超时长度 | ||
var Timeout time.Duration | ||
|
@@ -151,23 +153,11 @@ func FormatEtType(src int) string { | |
|
||
// TypeOfDomain 域名的类型(强制代理/强制直连/不确定) | ||
func TypeOfDomain(domain string) (status int) { | ||
if ProxyDomains == nil { | ||
panic("proxy domains is nil") | ||
} | ||
if DirectDomains == nil { | ||
panic("direct domains is nil") | ||
} | ||
|
||
for _, d := range ProxyDomains { | ||
if strings.HasSuffix(domain, d) { | ||
return ProxyDomain | ||
} | ||
|
||
if ProxyDomains.MatchSuffix(domain) { | ||
return ProxyDomain | ||
} | ||
for _, d := range DirectDomains { | ||
if strings.HasSuffix(domain, d) { | ||
return DirectDomain | ||
} | ||
if DirectDomains.MatchSuffix(domain) { | ||
return DirectDomain | ||
} | ||
return UncertainDomain | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,7 @@ | |
* @Email: [email protected] | ||
* @Github: https://github.com/eaglexiang | ||
* @Date: 2019-03-19 20:08:35 | ||
* @LastEditTime: 2019-03-19 20:08:35 | ||
* @LastEditTime: 2019-03-27 19:13:07 | ||
*/ | ||
|
||
package et | ||
|
@@ -17,29 +17,30 @@ import ( | |
"github.com/eaglexiang/eagle.tunnel.go/src/logger" | ||
mycipher "github.com/eaglexiang/go-cipher" | ||
mynet "github.com/eaglexiang/go-net" | ||
mytunnel "github.com/eaglexiang/go-tunnel" | ||
"github.com/eaglexiang/go-tunnel" | ||
myuser "github.com/eaglexiang/go-user" | ||
"go.uber.org/ratelimit" | ||
) | ||
|
||
// Handle 处理ET请求 | ||
func (et *ET) Handle(e *mynet.Arg) (err error) { | ||
err = et.checkHeaderOfReq(string(e.Msg), e.Tunnel) | ||
tunnel := e.Tunnel | ||
err = et.checkHeaderOfReq(string(e.Msg), tunnel) | ||
if err != nil { | ||
return err | ||
} | ||
createCipher(e.Tunnel) | ||
err = et.checkUserOfReq(e.Tunnel) | ||
createCipher(tunnel) | ||
err = et.checkUserOfReq(tunnel) | ||
if err != nil { | ||
return err | ||
} | ||
// 选择子协议handler | ||
subReq, h, err := et.subShake(e.Tunnel) | ||
subReq, h, err := et.subShake(tunnel) | ||
if err != nil { | ||
return err | ||
} | ||
// 进入子协议业务 | ||
err = h.Handle(subReq, e.Tunnel) | ||
err = h.Handle(subReq, tunnel) | ||
if err != nil { | ||
return err | ||
} | ||
|
@@ -50,7 +51,7 @@ func (et *ET) Handle(e *mynet.Arg) (err error) { | |
return nil | ||
} | ||
|
||
func (et *ET) subShake(tunnel *mytunnel.Tunnel) (subReq string, | ||
func (et *ET) subShake(tunnel *tunnel.Tunnel) (subReq string, | ||
h comm.Handler, err error) { | ||
subReq, err = tunnel.ReadLeftStr() | ||
if err != nil { | ||
|
@@ -63,7 +64,7 @@ func (et *ET) subShake(tunnel *mytunnel.Tunnel) (subReq string, | |
return subReq, h, err | ||
} | ||
|
||
func createCipher(tunnel *mytunnel.Tunnel) { | ||
func createCipher(tunnel *tunnel.Tunnel) { | ||
c := mycipher.DefaultCipher() | ||
if c == nil { | ||
panic("ET.Handle -> cipher is nil") | ||
|
@@ -74,7 +75,7 @@ func createCipher(tunnel *mytunnel.Tunnel) { | |
|
||
func (et *ET) checkHeaderOfReq( | ||
header string, | ||
tunnel *mytunnel.Tunnel) error { | ||
tunnel *tunnel.Tunnel) error { | ||
headers := strings.Split(header, " ") | ||
switch { | ||
case len(headers) < 1: | ||
|
@@ -89,7 +90,7 @@ func (et *ET) checkHeaderOfReq( | |
} | ||
} | ||
|
||
func (et *ET) checkUserOfReq(tunnel *mytunnel.Tunnel) (err error) { | ||
func (et *ET) checkUserOfReq(tunnel *tunnel.Tunnel) (err error) { | ||
if comm.ETArg.ValidUsers == nil { | ||
// 未启用用户校验 | ||
return nil | ||
|
@@ -105,7 +106,7 @@ func (et *ET) checkUserOfReq(tunnel *mytunnel.Tunnel) (err error) { | |
return err | ||
} | ||
|
||
func findReqUser(tunnel *mytunnel.Tunnel) (*myuser.ReqUser, error) { | ||
func findReqUser(tunnel *tunnel.Tunnel) (*myuser.ReqUser, error) { | ||
userStr, err := tunnel.ReadLeftStr() | ||
if err != nil { | ||
return nil, err | ||
|