Esempio n. 1
0
        public static string BuildCaddyConfig(XraySettings parameters, bool useCustomWeb = false)
        {
            var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile"));

            caddyStr = caddyStr.Replace("##domain##", parameters.Domain);
            caddyStr = caddyStr.Replace("##port##", FullbackPort.ToString());

            if (!useCustomWeb && !string.IsNullOrEmpty(parameters.MaskDomain))
            {
                var prefix = "http://";
                if (parameters.MaskDomain.StartsWith("https://"))
                {
                    prefix = "https://";
                }
                var domain = parameters.MaskDomain
                             .TrimStart("http://".ToCharArray())
                             .TrimStart("https://".ToCharArray());

                caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy {prefix}{domain} {{ \n        header_up Host {domain} \n    }}");
            }
            else
            {
                caddyStr = caddyStr.Replace("##reverse_proxy##", "");
            }

            return(caddyStr);
        }
Esempio n. 2
0
        public override void Prepare(Record parameter)
        {
            var record = Utils.DeepClone(parameter);

            Host     = record.Host;
            Settings = record.XraySettings;
        }
Esempio n. 3
0
        private static string BuildShadowSocksShareLink(XraySettings settings)
        {
            var _method   = settings.ShadowSocksMethod;
            var _password = settings.ShadowSocksPassword;
            var _server   = settings.Domain;
            var _port     = settings.ShadowSocksPort;

            var base64URL = Utils.Base64Encode($"{_method}:{_password}@{_server}:{_port}");

            return("ss://" + base64URL + "#ShadowSocks");
        }
Esempio n. 4
0
        private static string BuildVmessShareLink(XrayType xrayType, XraySettings settings)
        {
            var vmess = new Vmess
            {
                v    = "2",
                add  = settings.Domain,
                port = settings.Port.ToString(),
                id   = settings.UUID,
                aid  = "0",
                net  = "",
                type = "none",
                host = "",
                path = "",
                tls  = "tls",
                ps   = "",
            };

            switch (xrayType)
            {
            case XrayType.VMESS_TCP:
                vmess.ps   = "vmess-tcp-tls";
                vmess.net  = "tcp";
                vmess.type = "http";
                vmess.path = settings.VMESS_TCP_Path;
                break;

            case XrayType.VMESS_WS:
                vmess.ps   = "vmess-ws-tls";
                vmess.net  = "ws";
                vmess.type = "none";
                vmess.path = settings.VMESS_WS_Path;
                break;

            case XrayType.VMESS_KCP:
                vmess.ps   = "vmess-mKCP";
                vmess.port = settings.VMESS_KCP_Port.ToString();
                vmess.net  = "kcp";
                vmess.type = settings.VMESS_KCP_Type;
                vmess.path = settings.VMESS_KCP_Seed;
                vmess.tls  = "";
                break;

            default:
                return(string.Empty);
            }

            var base64Url = Utils.Base64Encode(JsonConvert.SerializeObject(vmess));

            return($"vmess://" + base64Url);
        }
Esempio n. 5
0
        public static string BuildCaddyConfig(XraySettings parameters)
        {
            var caddyStr = File.ReadAllText(Path.Combine(CaddyFileDir, "base.caddyfile"));

            caddyStr = caddyStr.Replace("##domain##", parameters.Domain);
            if (!string.IsNullOrEmpty(parameters.MaskDomain))
            {
                caddyStr = caddyStr.Replace("##reverse_proxy##", $"reverse_proxy http://{parameters.MaskDomain} {{ header_up Host {parameters.MaskDomain} }}");
            }
            else
            {
                caddyStr = caddyStr.Replace("##reverse_proxy##", "");
            }

            return(caddyStr);
        }
Esempio n. 6
0
        public static string Build(XrayType xrayType, XraySettings settings)
        {
            switch (xrayType)
            {
            case XrayType.VLESS_TCP:
            case XrayType.VLESS_TCP_XTLS:
            case XrayType.VLESS_WS:
            case XrayType.VLESS_KCP:
            case XrayType.VLESS_gRPC:
            case XrayType.Trojan_TCP:
                return(BuildVlessShareLink(xrayType, settings));

            case XrayType.VMESS_TCP:
            case XrayType.VMESS_WS:
            case XrayType.VMESS_KCP:
                return(BuildVmessShareLink(xrayType, settings));

            case XrayType.ShadowsocksAEAD:
                return(BuildShadowSocksShareLink(settings));

            default:
                return(string.Empty);
            }
        }
Esempio n. 7
0
        public static string BuildXrayConfig(XraySettings parameters)
        {
            var xrayConfig = LoadXrayConfig();
            var baseBound  = GetBound("VLESS_TCP_XTLS.json");

            baseBound.port = parameters.Port;
            baseBound.settings.fallbacks.Add(JToken.FromObject(new
            {
                dest = FullbackPort
            }));
            xrayConfig.inbounds.Add(baseBound);
            baseBound.settings.clients[0].id = parameters.UUID;

            if (parameters.Types.Contains(XrayType.VLESS_WS))
            {
                var wsInbound = GetBound("VLESS_WS.json");
                wsInbound.port = VLESS_WS_Port;
                wsInbound.settings.clients[0].id         = parameters.UUID;
                wsInbound.streamSettings.wsSettings.path = parameters.VLESS_WS_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VLESS_WS_Port,
                    path = parameters.VLESS_WS_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(wsInbound));
            }

            if (parameters.Types.Contains(XrayType.VLESS_gRPC))
            {
                var gRPCInBound = GetBound("VLESS_gRPC.json");
                gRPCInBound.port = parameters.VLESS_gRPC_Port;
                gRPCInBound.settings.clients[0].id = parameters.UUID;
                gRPCInBound.streamSettings.grpcSettings.serviceName = parameters.VLESS_gRPC_ServiceName;
                xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
            }

            if (parameters.Types.Contains(XrayType.VLESS_KCP))
            {
                var kcpBound = GetBound("VLESS_KCP.json");
                kcpBound.port = parameters.VLESS_KCP_Port;
                kcpBound.settings.clients[0].id = parameters.UUID;
                kcpBound.streamSettings.kcpSettings.header.type = parameters.VLESS_KCP_Type;
                kcpBound.streamSettings.kcpSettings.seed        = parameters.VLESS_KCP_Seed;
                xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
            }

            if (parameters.Types.Contains(XrayType.VMESS_TCP))
            {
                var mtcpBound = GetBound("VMESS_TCP.json");
                mtcpBound.port = VMESS_TCP_Port;
                mtcpBound.settings.clients[0].id = parameters.UUID;
                mtcpBound.streamSettings.tcpSettings.header.request.path = parameters.VMESS_TCP_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VMESS_TCP_Port,
                    path = parameters.VMESS_TCP_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(mtcpBound));
            }

            if (parameters.Types.Contains(XrayType.VMESS_WS))
            {
                var mwsBound = GetBound("VMESS_WS.json");
                mwsBound.port = VMESS_WS_Port;
                mwsBound.settings.clients[0].id         = parameters.UUID;
                mwsBound.streamSettings.wsSettings.path = parameters.VMESS_WS_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VMESS_WS_Port,
                    path = parameters.VMESS_WS_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(mwsBound));
            }

            if (parameters.Types.Contains(XrayType.VMESS_KCP))
            {
                var kcpBound = GetBound("VMESS_KCP.json");
                kcpBound.port = parameters.VMESS_KCP_Port;
                kcpBound.settings.clients[0].id = parameters.UUID;
                kcpBound.streamSettings.kcpSettings.header.type = parameters.VMESS_KCP_Type;
                kcpBound.streamSettings.kcpSettings.seed        = parameters.VMESS_KCP_Seed;
                xrayConfig.inbounds.Add(JToken.FromObject(kcpBound));
            }

            if (parameters.Types.Contains(XrayType.Trojan_TCP))
            {
                var trojanTcpBound = GetBound("Trojan_TCP.json");
                trojanTcpBound.port = Trojan_TCP_Port;
                trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword;
                trojanTcpBound.settings.fallbacks[0].dest   = FullbackPort;
                baseBound.settings.fallbacks[0]             = JToken.FromObject(new
                {
                    dest = Trojan_TCP_Port,
                    xver = 1,
                });
                xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound));
            }


            if (parameters.Types.Contains(XrayType.ShadowsocksAEAD))
            {
                var ssBound = GetBound("Shadowsocks-AEAD.json");
                ssBound.port = parameters.ShadowsocksPort;
                ssBound.settings.clients[0].password = parameters.ShadowsocksPassword;
                ssBound.settings.clients[0].method   = parameters.ShadowsocksMethod;
                xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
            }

            return(JsonConvert.SerializeObject(
                       xrayConfig,
                       Formatting.Indented,
                       new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            }));
        }
Esempio n. 8
0
        public static string BuildXrayConfig(XraySettings parameters)
        {
            var xrayConfig = LoadXrayConfig();
            var baseBound  = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_TCP_XTLS.json"));

            baseBound.port = parameters.Port;
            baseBound.settings.fallbacks.Add(JToken.FromObject(new
            {
                dest = 80,
                xver = 1,
            }));
            xrayConfig.inbounds.Add(baseBound);

            if (parameters.Types.Contains(XrayType.VLESS_TCP_XTLS))
            {
                baseBound.settings.clients[0].id = parameters.UUID;
            }

            if (parameters.Types.Contains(XrayType.VLESS_WS_TLS))
            {
                baseBound.settings.clients[0].id = parameters.UUID;

                var wsInbound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_WS_TLS.json"));
                wsInbound.port = VLESS_WS_Port;
                wsInbound.settings.clients[0].id         = parameters.UUID;
                wsInbound.streamSettings.wsSettings.path = parameters.VLESS_WS_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VLESS_WS_Port,
                    path = parameters.VLESS_WS_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(wsInbound));
            }

            if (parameters.Types.Contains(XrayType.VMESS_TCP_TLS))
            {
                var mtcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_TCP_TLS.json"));
                mtcpBound.port = VMESS_TCP_Port;
                mtcpBound.settings.clients[0].id = parameters.UUID;
                mtcpBound.streamSettings.tcpSettings.header.request.path = parameters.VMESS_TCP_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VMESS_TCP_Port,
                    path = parameters.VMESS_TCP_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(mtcpBound));
            }

            if (parameters.Types.Contains(XrayType.VMESS_WS_TLS))
            {
                var mwsBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_WS_TLS.json"));
                mwsBound.port = VMESS_WS_Port;
                mwsBound.settings.clients[0].id         = parameters.UUID;
                mwsBound.streamSettings.wsSettings.path = parameters.VMESS_WS_Path;
                baseBound.settings.fallbacks.Add(JToken.FromObject(new
                {
                    dest = VMESS_WS_Port,
                    path = parameters.VMESS_WS_Path,
                    xver = 1,
                }));
                xrayConfig.inbounds.Add(JToken.FromObject(mwsBound));
            }

            if (parameters.Types.Contains(XrayType.Trojan_TCP_TLS))
            {
                var trojanTcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "Trojan_TCP_TLS.json"));
                trojanTcpBound.port = Trojan_TCP_Port;
                trojanTcpBound.settings.clients[0].password = parameters.TrojanPassword;
                baseBound.settings.fallbacks[0]             = JToken.FromObject(new
                {
                    dest = Trojan_TCP_Port,
                    xver = 1,
                });
                xrayConfig.inbounds.Add(JToken.FromObject(trojanTcpBound));
            }

            return(JsonConvert.SerializeObject(
                       xrayConfig,
                       Formatting.Indented,
                       new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            }));
        }
Esempio n. 9
0
 public XraySettingsViewModel(XraySettings parameters)
 {
     this.settings = parameters;
 }
Esempio n. 10
0
 public XraySettingsViewModel(XraySettings parameters)
 {
     _randomUuid   = new BaseCommand((obj) => GetUuid());
     this.settings = parameters;
     Notify("VMESS_KCP_Type");
 }
Esempio n. 11
0
        private static string BuildVlessShareLink(XrayType xrayType, XraySettings settings)
        {
            var _protocol        = string.Empty;
            var _uuid            = settings.UUID;
            var _domain          = settings.Domain;
            var _port            = settings.Port;
            var _type            = string.Empty;
            var _encryption      = "none";
            var _security        = "tls";
            var _path            = "/";
            var _host            = settings.Domain;
            var _descriptiveText = string.Empty;
            var _headerType      = "none";
            var _seed            = string.Empty;

            switch (xrayType)
            {
            case XrayType.VLESS_TCP:
                _protocol        = "vless";
                _type            = "tcp";
                _descriptiveText = "vless-tcp-tls";
                break;

            case XrayType.VLESS_TCP_XTLS:
                _protocol        = "vless";
                _type            = "tcp";
                _security        = "xtls";
                _descriptiveText = "vless-tcp-xtls";
                break;

            case XrayType.VLESS_WS:
                _protocol        = "vless";
                _type            = "ws";
                _path            = settings.VLESS_WS_Path;
                _descriptiveText = "vless-ws-tls";
                break;

            case XrayType.VLESS_KCP:
                _protocol        = "vless";
                _type            = "kcp";
                _headerType      = settings.VLESS_KCP_Type;
                _seed            = settings.VLESS_KCP_Seed;
                _port            = settings.VLESS_KCP_Port;
                _security        = "none";
                _descriptiveText = "vless-mKCP";
                break;

            case XrayType.VLESS_gRPC:
                _protocol        = "vless";
                _type            = "grpc";
                _port            = settings.VLESS_gRPC_Port;
                _descriptiveText = "vless-gRPC";
                break;

            case XrayType.Trojan_TCP:
                _protocol        = "trojan";
                _uuid            = settings.TrojanPassword;
                _descriptiveText = "trojan-tcp";
                break;

            default:
                throw new Exception("暂未实现的协议");
            }


            string parametersURL = string.Empty;

            if (xrayType != XrayType.Trojan_TCP)
            {
                // 4.3 传输层相关段
                parametersURL = $"?type={_type}&encryption={_encryption}&security={_security}&path={HttpUtility.UrlEncode(_path)}&headerType={_headerType}";

                // kcp
                if (xrayType == XrayType.VLESS_KCP)
                {
                    parametersURL += $"&seed={_seed}";
                }

                // 4.4 TLS 相关段
                if (xrayType == XrayType.VLESS_TCP_XTLS)
                {
                    parametersURL += "&flow=xtls-rprx-direct";
                }


                if (xrayType == XrayType.VLESS_gRPC)
                {
                    parametersURL += $"&serviceName={settings.VLESS_gRPC_ServiceName}&mode=gun";
                }
            }


            return($"{_protocol}://{HttpUtility.UrlEncode(_uuid)}@{_domain}:{_port}{parametersURL}#{HttpUtility.UrlEncode(_descriptiveText)}");
        }
Esempio n. 12
0
        public static string BuildXrayConfig(XraySettings parameters)
        {
            var xrayConfig = LoadXrayConfig();
            var baseBound  = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_TCP_XTLS.json"));

            baseBound["port"] = parameters.Port;
            baseBound["settings"]["fallbacks"].Add(new
            {
                dest = 80,
                xver = 1,
            });
            xrayConfig["inbounds"].Add(baseBound);

            if (parameters.Types.Contains(XrayType.VLESS_TCP_XTLS))
            {
                baseBound["settings"]["clients"][0]["id"] = parameters.UUID;
            }

            if (parameters.Types.Contains(XrayType.VLESS_WS_TLS))
            {
                baseBound["settings"]["clients"][0]["id"] = parameters.UUID;

                var wsInbound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VLESS_WS_TLS.json"));
                wsInbound["port"] = VLESS_WS_Port;
                wsInbound["settings"]["clients"][0]["id"]         = parameters.UUID;
                wsInbound["streamSettings"]["wsSettings"]["path"] = parameters.VLESS_WS_Path;
                baseBound["settings"]["fallbacks"].Add(new
                {
                    dest = VLESS_WS_Port,
                    path = parameters.VLESS_WS_Path,
                    xver = 1,
                });
                xrayConfig["inbounds"].Add(wsInbound);
            }

            if (parameters.Types.Contains(XrayType.VMESS_TCP_TLS))
            {
                var mtcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_TCP_TLS.json"));
                mtcpBound["port"] = VMESS_TCP_Port;
                mtcpBound["settings"]["clients"][0]["id"] = parameters.UUID;
                mtcpBound["streamSettings"]["tcpSettings"]["header"]["request"]["path"] = parameters.VMESS_TCP_Path;
                baseBound["settings"]["fallbacks"].Add(new
                {
                    dest = VMESS_TCP_Port,
                    path = parameters.VMESS_TCP_Path,
                    xver = 1,
                });
                xrayConfig["inbounds"].Add(mtcpBound);
            }

            if (parameters.Types.Contains(XrayType.VMESS_WS_TLS))
            {
                var mwsBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "VMESS_WS_TLS.json"));
                mwsBound["port"] = VMESS_WS_Port;
                mwsBound["settings"]["clients"][0]["id"]         = parameters.UUID;
                mwsBound["streamSettings"]["wsSettings"]["path"] = parameters.VMESS_WS_Path;
                baseBound["settings"]["fallbacks"].Add(new
                {
                    dest = VMESS_WS_Port,
                    path = parameters.VMESS_WS_Path,
                    xver = 1,
                });
                xrayConfig["inbounds"].Add(mwsBound);
            }

            if (parameters.Types.Contains(XrayType.Trojan_TCP_TLS))
            {
                var trojanTcpBound = LoadJsonObj(Path.Combine(ServerInboundsDir, "Trojan_TCP_TLS.json"));
                trojanTcpBound["port"] = Trojan_TCP_Port;
                trojanTcpBound["settings"]["clients"][0]["password"] = parameters.TrojanPassword;
                baseBound["settings"]["fallbacks"][0] = new
                {
                    dest = Trojan_TCP_Port,
                    xver = 1,
                };
                xrayConfig["inbounds"].Add(trojanTcpBound);
            }

            return(JsonConvert.SerializeObject(xrayConfig, Formatting.Indented));
        }
Esempio n. 13
0
 public override void Prepare(Record parameter)
 {
     this._host     = parameter.Host;
     this._settings = parameter.XraySettings;
 }
 public XraySettingsViewModel(XraySettings parameters)
 {
     this.settings = parameters;
     Notify("VMESS_KCP_Type");
 }
Esempio n. 15
0
 public override void Prepare(Record parameter)
 {
     Host     = parameter.Host;
     Settings = parameter.Settings as XraySettings;
 }