mirror of https://github.com/2dust/v2rayN
Adding checks for subscription url
parent
3fafc6de93
commit
34f5c0f910
|
@ -427,6 +427,30 @@ namespace ServiceLib.Common
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Uri? TryUri(string url)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return new Uri(url);
|
||||||
|
}
|
||||||
|
catch (UriFormatException)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsPrivateNetwork(string ip)
|
||||||
|
{
|
||||||
|
if (IPAddress.TryParse(ip, out var address))
|
||||||
|
{
|
||||||
|
var ipBytes = address.GetAddressBytes();
|
||||||
|
if (ipBytes[0] == 10) return true;
|
||||||
|
if (ipBytes[0] == 172 && ipBytes[1] >= 16 && ipBytes[1] <= 31) return true;
|
||||||
|
if (ipBytes[0] == 192 && ipBytes[1] == 168) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion 数据检查
|
#endregion 数据检查
|
||||||
|
|
||||||
#region 测速
|
#region 测速
|
||||||
|
@ -632,7 +656,7 @@ namespace ServiceLib.Common
|
||||||
}
|
}
|
||||||
return Path.Combine(startupPath, fileName);
|
return Path.Combine(startupPath, fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetExePath()
|
public static string GetExePath()
|
||||||
{
|
{
|
||||||
return Environment.ProcessPath ?? Process.GetCurrentProcess().MainModule?.FileName ?? string.Empty;
|
return Environment.ProcessPath ?? Process.GetCurrentProcess().MainModule?.FileName ?? string.Empty;
|
||||||
|
|
|
@ -1335,17 +1335,17 @@ namespace ServiceLib.Handler
|
||||||
Url = url
|
Url = url
|
||||||
};
|
};
|
||||||
|
|
||||||
try
|
var uri = Utils.TryUri(url);
|
||||||
|
if (uri == null) return -1;
|
||||||
|
//Do not allow http protocol
|
||||||
|
if (url.StartsWith(Global.HttpProtocol) && !Utils.IsPrivateNetwork(uri.IdnHost))
|
||||||
{
|
{
|
||||||
var uri = new Uri(url);
|
return -1;
|
||||||
var queryVars = Utils.ParseQueryString(uri.Query);
|
|
||||||
subItem.Remarks = queryVars["remarks"] ?? "import_sub";
|
|
||||||
}
|
|
||||||
catch (UriFormatException)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var queryVars = Utils.ParseQueryString(uri.Query);
|
||||||
|
subItem.Remarks = queryVars["remarks"] ?? "import_sub";
|
||||||
|
|
||||||
return await AddSubItem(config, subItem);
|
return await AddSubItem(config, subItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,8 @@
|
||||||
ConfigType = EConfigType.Hysteria2
|
ConfigType = EConfigType.Hysteria2
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -81,15 +81,9 @@ namespace ServiceLib.Handler.Fmt
|
||||||
|
|
||||||
private static ProfileItem? ResolveSip002(string result)
|
private static ProfileItem? ResolveSip002(string result)
|
||||||
{
|
{
|
||||||
Uri parsedUrl;
|
var parsedUrl = Utils.TryUri(result);
|
||||||
try
|
if (parsedUrl == null) return null;
|
||||||
{
|
|
||||||
parsedUrl = new Uri(result);
|
|
||||||
}
|
|
||||||
catch (UriFormatException)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ProfileItem item = new()
|
ProfileItem item = new()
|
||||||
{
|
{
|
||||||
Remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
Remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||||
|
|
|
@ -93,15 +93,9 @@
|
||||||
|
|
||||||
private static ProfileItem? ResolveSocksNew(string result)
|
private static ProfileItem? ResolveSocksNew(string result)
|
||||||
{
|
{
|
||||||
Uri parsedUrl;
|
var parsedUrl = Utils.TryUri(result);
|
||||||
try
|
if (parsedUrl == null) return null;
|
||||||
{
|
|
||||||
parsedUrl = new Uri(result);
|
|
||||||
}
|
|
||||||
catch (UriFormatException)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
ProfileItem item = new()
|
ProfileItem item = new()
|
||||||
{
|
{
|
||||||
Remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
Remarks = parsedUrl.GetComponents(UriComponents.Fragment, UriFormat.Unescaped),
|
||||||
|
|
|
@ -10,8 +10,9 @@
|
||||||
{
|
{
|
||||||
ConfigType = EConfigType.Trojan
|
ConfigType = EConfigType.Trojan
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
ConfigType = EConfigType.TUIC
|
ConfigType = EConfigType.TUIC
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -12,7 +12,8 @@
|
||||||
Security = Global.None
|
Security = Global.None
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -105,7 +105,8 @@
|
||||||
Security = "auto"
|
Security = "auto"
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
ConfigType = EConfigType.WireGuard
|
ConfigType = EConfigType.WireGuard
|
||||||
};
|
};
|
||||||
|
|
||||||
Uri url = new(str);
|
var url = Utils.TryUri(str);
|
||||||
|
if (url == null) return null;
|
||||||
|
|
||||||
item.Address = url.IdnHost;
|
item.Address = url.IdnHost;
|
||||||
item.Port = url.Port;
|
item.Port = url.Port;
|
||||||
|
|
|
@ -33,6 +33,23 @@ namespace ServiceLib.ViewModels
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var url = SelectedSource.Url;
|
||||||
|
if (url.IsNotEmpty())
|
||||||
|
{
|
||||||
|
var uri = Utils.TryUri(url);
|
||||||
|
if (uri == null)
|
||||||
|
{
|
||||||
|
NoticeHandler.Instance.Enqueue(ResUI.LvUrl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//Do not allow http protocol
|
||||||
|
if (url.StartsWith(Global.HttpProtocol) && !Utils.IsPrivateNetwork(uri.IdnHost))
|
||||||
|
{
|
||||||
|
NoticeHandler.Instance.Enqueue(ResUI.LvUrl);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (await ConfigHandler.AddSubItem(_config, SelectedSource) == 0)
|
if (await ConfigHandler.AddSubItem(_config, SelectedSource) == 0)
|
||||||
{
|
{
|
||||||
NoticeHandler.Instance.Enqueue(ResUI.OperationSuccess);
|
NoticeHandler.Instance.Enqueue(ResUI.OperationSuccess);
|
||||||
|
|
Loading…
Reference in New Issue