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); }
public override void Prepare(Record parameter) { var record = Utils.DeepClone(parameter); Host = record.Host; Settings = record.XraySettings; }
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"); }
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); }
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); }
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); } }
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 })); }
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 })); }
public XraySettingsViewModel(XraySettings parameters) { this.settings = parameters; }
public XraySettingsViewModel(XraySettings parameters) { _randomUuid = new BaseCommand((obj) => GetUuid()); this.settings = parameters; Notify("VMESS_KCP_Type"); }
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)}"); }
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)); }
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"); }
public override void Prepare(Record parameter) { Host = parameter.Host; Settings = parameter.Settings as XraySettings; }