Feature: support trojan websocket
This commit is contained in:
@ -31,6 +31,7 @@ const (
|
||||
ImageShadowsocksRust = "ghcr.io/shadowsocks/ssserver-rust:latest"
|
||||
ImageVmess = "v2fly/v2fly-core:latest"
|
||||
ImageTrojan = "trojangfw/trojan:latest"
|
||||
ImageTrojanGo = "p4gefau1t/trojan-go:latest"
|
||||
ImageSnell = "icpz/snell-server:latest"
|
||||
ImageXray = "teddysun/xray:latest"
|
||||
)
|
||||
@ -99,6 +100,7 @@ func init() {
|
||||
ImageShadowsocksRust,
|
||||
ImageVmess,
|
||||
ImageTrojan,
|
||||
ImageTrojanGo,
|
||||
ImageSnell,
|
||||
ImageXray,
|
||||
}
|
||||
|
20
test/config/trojan-ws.json
Normal file
20
test/config/trojan-ws.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"run_type": "server",
|
||||
"local_addr": "0.0.0.0",
|
||||
"local_port": 10002,
|
||||
"disable_http_check": true,
|
||||
"password": [
|
||||
"example"
|
||||
],
|
||||
"websocket": {
|
||||
"enabled": true,
|
||||
"path": "/",
|
||||
"host": "example.org"
|
||||
},
|
||||
"ssl": {
|
||||
"verify": true,
|
||||
"cert": "/fullchain.pem",
|
||||
"key": "/privkey.pem",
|
||||
"sni": "example.org"
|
||||
}
|
||||
}
|
@ -93,6 +93,44 @@ func TestClash_TrojanGrpc(t *testing.T) {
|
||||
testSuit(t, proxy)
|
||||
}
|
||||
|
||||
func TestClash_TrojanWebsocket(t *testing.T) {
|
||||
cfg := &container.Config{
|
||||
Image: ImageTrojanGo,
|
||||
ExposedPorts: defaultExposedPorts,
|
||||
}
|
||||
hostCfg := &container.HostConfig{
|
||||
PortBindings: defaultPortBindings,
|
||||
Binds: []string{
|
||||
fmt.Sprintf("%s:/etc/trojan-go/config.json", C.Path.Resolve("trojan-ws.json")),
|
||||
fmt.Sprintf("%s:/fullchain.pem", C.Path.Resolve("example.org.pem")),
|
||||
fmt.Sprintf("%s:/privkey.pem", C.Path.Resolve("example.org-key.pem")),
|
||||
},
|
||||
}
|
||||
|
||||
id, err := startContainer(cfg, hostCfg, "trojan-ws")
|
||||
if err != nil {
|
||||
assert.FailNow(t, err.Error())
|
||||
}
|
||||
defer cleanContainer(id)
|
||||
|
||||
proxy, err := outbound.NewTrojan(outbound.TrojanOption{
|
||||
Name: "trojan",
|
||||
Server: localIP.String(),
|
||||
Port: 10002,
|
||||
Password: "example",
|
||||
SNI: "example.org",
|
||||
SkipCertVerify: true,
|
||||
UDP: true,
|
||||
Network: "ws",
|
||||
})
|
||||
if err != nil {
|
||||
assert.FailNow(t, err.Error())
|
||||
}
|
||||
|
||||
time.Sleep(waitTime)
|
||||
testSuit(t, proxy)
|
||||
}
|
||||
|
||||
func Benchmark_Trojan(b *testing.B) {
|
||||
cfg := &container.Config{
|
||||
Image: ImageTrojan,
|
||||
|
Reference in New Issue
Block a user