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

            caddyStr = caddyStr.Replace("##domain##", parameters.IsIPAddress ? "" : 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);
        }
Exemple #2
0
        private static string BuildShadowSocksShareLink(V2raySettings 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");
        }
Exemple #3
0
        private static string BuildVmessShareLink(RayType xrayType, V2raySettings 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 RayType.VMESS_TCP:
                vmess.ps   = "vmess-tcp-tls";
                vmess.net  = "tcp";
                vmess.type = "http";
                vmess.path = settings.VMESS_TCP_Path;
                break;

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

            case RayType.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);
        }
Exemple #4
0
        public static string Build(RayType xrayType, V2raySettings settings)
        {
            switch (xrayType)
            {
            case RayType.VLESS_TCP:
            case RayType.VLESS_TCP_XTLS:
            case RayType.VLESS_WS:
            case RayType.VLESS_KCP:
            case RayType.VLESS_gRPC:
            case RayType.Trojan_TCP:
                return(BuildVlessShareLink(xrayType, settings));

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

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

            default:
                return(string.Empty);
            }
        }
Exemple #5
0
        public static string BuildV2rayConfig(V2raySettings parameters)
        {
            var uuidList = new List <string>();

            uuidList.Add(parameters.UUID);
            uuidList.AddRange(parameters.MulitUUID);

            var xrayConfig = LoadV2rayConfig();

            var baseBound = GetBound("VLESS_TCP_TLS.json");

            baseBound.port = parameters.Port;
            baseBound.settings.fallbacks.Add(JToken.FromObject(new
            {
                dest = FullbackPort
            }));
            xrayConfig.inbounds.Add(baseBound);
            SetClients(baseBound, uuidList);

            #region Fullbacks

            if (parameters.Types.Contains(RayType.VLESS_WS))
            {
                var wsInbound = GetBound("VLESS_WS.json");
                wsInbound.port = VLESS_WS_Port;
                SetClients(wsInbound, uuidList);
                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(RayType.VMESS_TCP))
            {
                var mtcpBound = GetBound("VMESS_TCP.json");
                mtcpBound.port = VMESS_TCP_Port;
                SetClients(mtcpBound, uuidList);
                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(RayType.VMESS_WS))
            {
                var mwsBound = GetBound("VMESS_WS.json");
                mwsBound.port = VMESS_WS_Port;
                SetClients(mwsBound, uuidList);
                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(RayType.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));
            }
            #endregion

            if (parameters.Types.Contains(RayType.VLESS_gRPC))
            {
                var gRPCInBound = GetBound("VLESS_gRPC.json");
                gRPCInBound.port = parameters.VLESS_gRPC_Port;
                SetClients(gRPCInBound, uuidList);
                gRPCInBound.streamSettings.grpcSettings.serviceName = parameters.VLESS_gRPC_ServiceName;
                gRPCInBound.streamSettings.tlsSettings.serverName   = parameters.Domain;
                xrayConfig.inbounds.Add(JToken.FromObject(gRPCInBound));
            }

            if (parameters.Types.Contains(RayType.VLESS_KCP))
            {
                var kcpBound = GetBound("VLESS_KCP.json");
                kcpBound.port = parameters.VLESS_KCP_Port;
                SetClients(kcpBound, uuidList);
                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(RayType.VMESS_KCP))
            {
                var kcpBound = GetBound("VMESS_KCP.json");
                kcpBound.port = parameters.VMESS_KCP_Port;
                SetClients(kcpBound, uuidList);
                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(RayType.ShadowsocksAEAD))
            {
                var ssBound = GetBound("Shadowsocks-AEAD.json");
                ssBound.port = parameters.ShadowSocksPort;
                ssBound.settings.password = parameters.ShadowSocksPassword;
                ssBound.settings.method   = parameters.ShadowSocksMethod;
                xrayConfig.inbounds.Add(JToken.FromObject(ssBound));
            }

            return(JsonConvert.SerializeObject(
                       xrayConfig,
                       Formatting.Indented,
                       new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore
            }));
        }
Exemple #6
0
 public override void Prepare(Record parameter)
 {
     this._host     = parameter.Host;
     this._settings = parameter.V2raySettings;
 }
Exemple #7
0
        private static string BuildVlessShareLink(RayType xrayType, V2raySettings 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 RayType.VLESS_TCP:
                _protocol        = "vless";
                _type            = "tcp";
                _descriptiveText = "vless-tcp-tls";
                break;

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

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

            case RayType.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 RayType.VLESS_gRPC:
                _protocol        = "vless";
                _type            = "grpc";
                _port            = settings.VLESS_gRPC_Port;
                _descriptiveText = "vless-gRPC";
                break;

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

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


            string parametersURL = string.Empty;

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

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

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


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


            return($"{_protocol}://{HttpUtility.UrlEncode(_uuid)}@{_domain}:{_port}{parametersURL}#{HttpUtility.UrlEncode(_descriptiveText)}");
        }