mirror of
https://github.com/2dust/v2rayN.git
synced 2025-10-13 11:59:13 +00:00

* Multi Profile * VM and wpf * avalonia * Fix right click not working * Exclude specific profile types from selection * Rename * Add Policy Group support * Add generate policy group * Adjust UI * Add Proxy Chain support * Fix * Add fallback support * Add PolicyGroup include other Group support * Add group in traffic splitting support * Avoid duplicate tags * Refactor * Adjust chained proxy, actual outbound is at the top Based on actual network flow instead of data packets * Add helper function * Refactor * Add chain selection control to group outbounds * Avoid self-reference * Fix * Improves Tun2Socks address handling * Avoids circular dependency in profile groups Adds cycle detection to prevent infinite loops when evaluating profile groups. This ensures that profile group configurations don't result in stack overflow errors when groups reference each other, directly or indirectly. * Fix * Fix * Update ProfileGroupItem.cs * Refactor * Remove unnecessary checks --------- Co-authored-by: 2dust <31833384+2dust@users.noreply.github.com>
628 lines
21 KiB
C#
628 lines
21 KiB
C#
namespace ServiceLib;
|
|
|
|
public class Global
|
|
{
|
|
#region const
|
|
|
|
public const string AppName = "v2rayN";
|
|
public const string GithubUrl = "https://github.com";
|
|
public const string GithubApiUrl = "https://api.github.com/repos";
|
|
public const string GeoUrl = "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/{0}.dat";
|
|
public const string SingboxRulesetUrl = @"https://raw.githubusercontent.com/2dust/sing-box-rules/rule-set-{0}/{1}.srs";
|
|
|
|
public const string PromotionUrl = @"aHR0cHM6Ly85LjIzNDQ1Ni54eXovYWJjLmh0bWw=";
|
|
public const string ConfigFileName = "guiNConfig.json";
|
|
public const string CoreConfigFileName = "config.json";
|
|
public const string CorePreConfigFileName = "configPre.json";
|
|
public const string CoreSpeedtestConfigFileName = "configTest{0}.json";
|
|
public const string CoreMultipleLoadConfigFileName = "configMultipleLoad.json";
|
|
public const string ClashMixinConfigFileName = "Mixin.yaml";
|
|
|
|
public const string NamespaceSample = "ServiceLib.Sample.";
|
|
public const string V2raySampleClient = NamespaceSample + "SampleClientConfig";
|
|
public const string SingboxSampleClient = NamespaceSample + "SingboxSampleClientConfig";
|
|
public const string V2raySampleHttpRequestFileName = NamespaceSample + "SampleHttpRequest";
|
|
public const string V2raySampleHttpResponseFileName = NamespaceSample + "SampleHttpResponse";
|
|
public const string V2raySampleInbound = NamespaceSample + "SampleInbound";
|
|
public const string V2raySampleOutbound = NamespaceSample + "SampleOutbound";
|
|
public const string SingboxSampleOutbound = NamespaceSample + "SingboxSampleOutbound";
|
|
public const string CustomRoutingFileName = NamespaceSample + "custom_routing_";
|
|
public const string TunSingboxDNSFileName = NamespaceSample + "tun_singbox_dns";
|
|
public const string TunSingboxInboundFileName = NamespaceSample + "tun_singbox_inbound";
|
|
public const string TunSingboxRulesFileName = NamespaceSample + "tun_singbox_rules";
|
|
public const string DNSV2rayNormalFileName = NamespaceSample + "dns_v2ray_normal";
|
|
public const string DNSSingboxNormalFileName = NamespaceSample + "dns_singbox_normal";
|
|
public const string ClashMixinYaml = NamespaceSample + "clash_mixin_yaml";
|
|
public const string ClashTunYaml = NamespaceSample + "clash_tun_yaml";
|
|
public const string LinuxAutostartConfig = NamespaceSample + "linux_autostart_config";
|
|
public const string PacFileName = NamespaceSample + "pac";
|
|
public const string ProxySetOSXShellFileName = NamespaceSample + "proxy_set_osx_sh";
|
|
public const string ProxySetLinuxShellFileName = NamespaceSample + "proxy_set_linux_sh";
|
|
public const string KillAsSudoOSXShellFileName = NamespaceSample + "kill_as_sudo_osx_sh";
|
|
public const string KillAsSudoLinuxShellFileName = NamespaceSample + "kill_as_sudo_linux_sh";
|
|
public const string SingboxFakeIPFilterFileName = NamespaceSample + "singbox_fakeip_filter";
|
|
|
|
public const string DefaultSecurity = "auto";
|
|
public const string DefaultNetwork = "tcp";
|
|
public const string TcpHeaderHttp = "http";
|
|
public const string None = "none";
|
|
public const string ProxyTag = "proxy";
|
|
public const string DirectTag = "direct";
|
|
public const string BlockTag = "block";
|
|
public const string DnsTag = "dns-module";
|
|
public const string BalancerTagSuffix = "-round";
|
|
public const string StreamSecurity = "tls";
|
|
public const string StreamSecurityReality = "reality";
|
|
public const string Loopback = "127.0.0.1";
|
|
public const string InboundAPIProtocol = "dokodemo-door";
|
|
public const string HttpProtocol = "http://";
|
|
public const string HttpsProtocol = "https://";
|
|
public const string SocksProtocol = "socks://";
|
|
public const string Socks5Protocol = "socks5://";
|
|
public const string AsIs = "AsIs";
|
|
public const string IPIfNonMatch = "IPIfNonMatch";
|
|
public const string IPOnDemand = "IPOnDemand";
|
|
|
|
public const string UserEMail = "t@t.tt";
|
|
public const string AutoRunRegPath = @"Software\Microsoft\Windows\CurrentVersion\Run";
|
|
public const string AutoRunName = "v2rayNAutoRun";
|
|
public const string SystemProxyExceptionsWindows = "localhost;127.*;10.*;172.16.*;172.17.*;172.18.*;172.19.*;172.20.*;172.21.*;172.22.*;172.23.*;172.24.*;172.25.*;172.26.*;172.27.*;172.28.*;172.29.*;172.30.*;172.31.*;192.168.*";
|
|
public const string SystemProxyExceptionsLinux = "localhost,127.0.0.0/8,::1";
|
|
public const string RoutingRuleComma = "<COMMA>";
|
|
public const string GrpcGunMode = "gun";
|
|
public const string GrpcMultiMode = "multi";
|
|
public const int MaxPort = 65536;
|
|
public const int MinFontSize = 8;
|
|
public const string RebootAs = "rebootas";
|
|
public const string AvaAssets = "avares://v2rayN/Assets/";
|
|
public const string LocalAppData = "V2RAYN_LOCAL_APPLICATION_DATA_V2";
|
|
public const string V2RayLocalAsset = "V2RAY_LOCATION_ASSET";
|
|
public const string XrayLocalAsset = "XRAY_LOCATION_ASSET";
|
|
public const string XrayLocalCert = "XRAY_LOCATION_CERT";
|
|
public const int SpeedTestPageSize = 1000;
|
|
public const string LinuxBash = "/bin/bash";
|
|
|
|
public const string SingboxDirectDNSTag = "direct_dns";
|
|
public const string SingboxRemoteDNSTag = "remote_dns";
|
|
public const string SingboxOutboundResolverTag = "outbound_resolver";
|
|
public const string SingboxFinalResolverTag = "final_resolver";
|
|
public const string SingboxHostsDNSTag = "hosts_dns";
|
|
public const string SingboxFakeDNSTag = "fake_dns";
|
|
|
|
public static readonly List<string> IEProxyProtocols =
|
|
[
|
|
"{ip}:{http_port}",
|
|
"socks={ip}:{socks_port}",
|
|
"http={ip}:{http_port};https={ip}:{http_port};ftp={ip}:{http_port};socks={ip}:{socks_port}",
|
|
"http=http://{ip}:{http_port};https=http://{ip}:{http_port}",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> SubConvertUrls =
|
|
[
|
|
@"https://sub.xeton.dev/sub?url={0}",
|
|
@"https://api.dler.io/sub?url={0}",
|
|
@"http://127.0.0.1:25500/sub?url={0}",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> SubConvertConfig =
|
|
[@"https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini"];
|
|
|
|
public static readonly List<string> SubConvertTargets =
|
|
[
|
|
"",
|
|
"mixed",
|
|
"v2ray",
|
|
"clash",
|
|
"ss"
|
|
];
|
|
|
|
public static readonly List<string> SpeedTestUrls =
|
|
[
|
|
@"https://cachefly.cachefly.net/50mb.test",
|
|
@"https://speed.cloudflare.com/__down?bytes=10000000",
|
|
@"https://speed.cloudflare.com/__down?bytes=50000000",
|
|
@"https://speed.cloudflare.com/__down?bytes=100000000",
|
|
];
|
|
|
|
public static readonly List<string> SpeedPingTestUrls =
|
|
[
|
|
@"https://www.google.com/generate_204",
|
|
@"https://www.gstatic.com/generate_204",
|
|
@"https://www.apple.com/library/test/success.html",
|
|
@"http://www.msftconnecttest.com/connecttest.txt"
|
|
];
|
|
|
|
public static readonly List<string> GeoFilesSources =
|
|
[
|
|
"",
|
|
@"https://github.com/runetfreedom/russia-v2ray-rules-dat/releases/latest/download/{0}.dat",
|
|
@"https://github.com/Chocolate4U/Iran-v2ray-rules/releases/latest/download/{0}.dat"
|
|
];
|
|
|
|
public static readonly List<string> SingboxRulesetSources =
|
|
[
|
|
"",
|
|
@"https://raw.githubusercontent.com/runetfreedom/russia-v2ray-rules-dat/release/sing-box/rule-set-{0}/{1}.srs",
|
|
@"https://raw.githubusercontent.com/chocolate4u/Iran-sing-box-rules/rule-set/{1}.srs"
|
|
];
|
|
|
|
public static readonly List<string> RoutingRulesSources =
|
|
[
|
|
"",
|
|
@"https://raw.githubusercontent.com/runetfreedom/russia-v2ray-custom-routing-list/main/v2rayN/template.json",
|
|
@"https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/main/v2rayN/template.json"
|
|
];
|
|
|
|
public static readonly List<string> DNSTemplateSources =
|
|
[
|
|
"",
|
|
@"https://raw.githubusercontent.com/runetfreedom/russia-v2ray-custom-routing-list/main/v2rayN/",
|
|
@"https://raw.githubusercontent.com/Chocolate4U/Iran-v2ray-rules/main/v2rayN/"
|
|
];
|
|
|
|
public static readonly Dictionary<string, string> UserAgentTexts = new()
|
|
{
|
|
{"chrome","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" },
|
|
{"firefox","Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0" },
|
|
{"safari","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15" },
|
|
{"edge","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.70" },
|
|
{"none",""}
|
|
};
|
|
|
|
public const string Hysteria2ProtocolShare = "hy2://";
|
|
|
|
public static readonly Dictionary<EConfigType, string> ProtocolShares = new()
|
|
{
|
|
{ EConfigType.VMess, "vmess://" },
|
|
{ EConfigType.Shadowsocks, "ss://" },
|
|
{ EConfigType.SOCKS, "socks://" },
|
|
{ EConfigType.VLESS, "vless://" },
|
|
{ EConfigType.Trojan, "trojan://" },
|
|
{ EConfigType.Hysteria2, "hysteria2://" },
|
|
{ EConfigType.TUIC, "tuic://" },
|
|
{ EConfigType.WireGuard, "wireguard://" },
|
|
{ EConfigType.Anytls, "anytls://" }
|
|
};
|
|
|
|
public static readonly Dictionary<EConfigType, string> ProtocolTypes = new()
|
|
{
|
|
{ EConfigType.VMess, "vmess" },
|
|
{ EConfigType.Shadowsocks, "shadowsocks" },
|
|
{ EConfigType.SOCKS, "socks" },
|
|
{ EConfigType.HTTP, "http" },
|
|
{ EConfigType.VLESS, "vless" },
|
|
{ EConfigType.Trojan, "trojan" },
|
|
{ EConfigType.Hysteria2, "hysteria2" },
|
|
{ EConfigType.TUIC, "tuic" },
|
|
{ EConfigType.WireGuard, "wireguard" },
|
|
{ EConfigType.Anytls, "anytls" }
|
|
};
|
|
|
|
public static readonly List<string> VmessSecurities =
|
|
[
|
|
"aes-128-gcm",
|
|
"chacha20-poly1305",
|
|
"auto",
|
|
"none",
|
|
"zero"
|
|
];
|
|
|
|
public static readonly List<string> SsSecurities =
|
|
[
|
|
"aes-256-gcm",
|
|
"aes-128-gcm",
|
|
"chacha20-poly1305",
|
|
"chacha20-ietf-poly1305",
|
|
"none",
|
|
"plain"
|
|
];
|
|
|
|
public static readonly List<string> SsSecuritiesInXray =
|
|
[
|
|
"aes-256-gcm",
|
|
"aes-128-gcm",
|
|
"chacha20-poly1305",
|
|
"chacha20-ietf-poly1305",
|
|
"xchacha20-poly1305",
|
|
"xchacha20-ietf-poly1305",
|
|
"none",
|
|
"plain",
|
|
"2022-blake3-aes-128-gcm",
|
|
"2022-blake3-aes-256-gcm",
|
|
"2022-blake3-chacha20-poly1305"
|
|
];
|
|
|
|
public static readonly List<string> SsSecuritiesInSingbox =
|
|
[
|
|
"aes-256-gcm",
|
|
"aes-192-gcm",
|
|
"aes-128-gcm",
|
|
"chacha20-ietf-poly1305",
|
|
"xchacha20-ietf-poly1305",
|
|
"none",
|
|
"2022-blake3-aes-128-gcm",
|
|
"2022-blake3-aes-256-gcm",
|
|
"2022-blake3-chacha20-poly1305",
|
|
"aes-128-ctr",
|
|
"aes-192-ctr",
|
|
"aes-256-ctr",
|
|
"aes-128-cfb",
|
|
"aes-192-cfb",
|
|
"aes-256-cfb",
|
|
"rc4-md5",
|
|
"chacha20-ietf",
|
|
"xchacha20"
|
|
];
|
|
|
|
public static readonly List<string> Flows =
|
|
[
|
|
"",
|
|
"xtls-rprx-vision",
|
|
"xtls-rprx-vision-udp443"
|
|
];
|
|
|
|
public static readonly List<string> Networks =
|
|
[
|
|
"tcp",
|
|
"kcp",
|
|
"ws",
|
|
"httpupgrade",
|
|
"xhttp",
|
|
"h2",
|
|
"quic",
|
|
"grpc"
|
|
];
|
|
|
|
public static readonly List<string> KcpHeaderTypes =
|
|
[
|
|
"srtp",
|
|
"utp",
|
|
"wechat-video",
|
|
"dtls",
|
|
"wireguard",
|
|
"dns"
|
|
];
|
|
|
|
public static readonly List<string> CoreTypes =
|
|
[
|
|
"Xray",
|
|
"sing_box"
|
|
];
|
|
|
|
public static readonly HashSet<EConfigType> XraySupportConfigType =
|
|
[
|
|
EConfigType.VMess,
|
|
EConfigType.VLESS,
|
|
EConfigType.Shadowsocks,
|
|
EConfigType.Trojan,
|
|
EConfigType.WireGuard,
|
|
EConfigType.SOCKS,
|
|
EConfigType.HTTP,
|
|
];
|
|
|
|
public static readonly HashSet<EConfigType> SingboxSupportConfigType =
|
|
[
|
|
EConfigType.VMess,
|
|
EConfigType.VLESS,
|
|
EConfigType.Shadowsocks,
|
|
EConfigType.Trojan,
|
|
EConfigType.Hysteria2,
|
|
EConfigType.TUIC,
|
|
EConfigType.Anytls,
|
|
EConfigType.WireGuard,
|
|
EConfigType.SOCKS,
|
|
EConfigType.HTTP,
|
|
];
|
|
|
|
public static readonly List<string> DomainStrategies =
|
|
[
|
|
AsIs,
|
|
IPIfNonMatch,
|
|
IPOnDemand
|
|
];
|
|
|
|
public static readonly List<string> DomainStrategies4Singbox =
|
|
[
|
|
"ipv4_only",
|
|
"ipv6_only",
|
|
"prefer_ipv4",
|
|
"prefer_ipv6",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> Fingerprints =
|
|
[
|
|
"chrome",
|
|
"firefox",
|
|
"safari",
|
|
"ios",
|
|
"android",
|
|
"edge",
|
|
"360",
|
|
"qq",
|
|
"random",
|
|
"randomized",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> UserAgent =
|
|
[
|
|
"chrome",
|
|
"firefox",
|
|
"safari",
|
|
"edge",
|
|
"none"
|
|
];
|
|
|
|
public static readonly List<string> XhttpMode =
|
|
[
|
|
"auto",
|
|
"packet-up",
|
|
"stream-up",
|
|
"stream-one"
|
|
];
|
|
|
|
public static readonly List<string> AllowInsecure =
|
|
[
|
|
"true",
|
|
"false",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> DomainStrategy4Freedoms =
|
|
[
|
|
"AsIs",
|
|
"UseIP",
|
|
"UseIPv4",
|
|
"UseIPv6",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> SingboxDomainStrategy4Out =
|
|
[
|
|
"",
|
|
"ipv4_only",
|
|
"prefer_ipv4",
|
|
"prefer_ipv6",
|
|
"ipv6_only"
|
|
];
|
|
|
|
public static readonly List<string> DomainDirectDNSAddress =
|
|
[
|
|
"https://dns.alidns.com/dns-query",
|
|
"https://doh.pub/dns-query",
|
|
"223.5.5.5",
|
|
"119.29.29.29",
|
|
"localhost"
|
|
];
|
|
|
|
public static readonly List<string> DomainRemoteDNSAddress =
|
|
[
|
|
"https://cloudflare-dns.com/dns-query",
|
|
"https://dns.cloudflare.com/dns-query",
|
|
"https://dns.google/dns-query",
|
|
"https://doh.dns.sb/dns-query",
|
|
"https://doh.opendns.com/dns-query",
|
|
"https://common.dot.dns.yandex.net",
|
|
"8.8.8.8",
|
|
"1.1.1.1",
|
|
"185.222.222.222",
|
|
"208.67.222.222",
|
|
"77.88.8.8"
|
|
];
|
|
|
|
public static readonly List<string> DomainPureIPDNSAddress =
|
|
[
|
|
"223.5.5.5",
|
|
"119.29.29.29",
|
|
"localhost"
|
|
];
|
|
|
|
public static readonly List<string> Languages =
|
|
[
|
|
"zh-Hans",
|
|
"zh-Hant",
|
|
"en",
|
|
"fa-Ir",
|
|
"ru",
|
|
"hu"
|
|
];
|
|
|
|
public static readonly List<string> Alpns =
|
|
[
|
|
"h3",
|
|
"h2",
|
|
"http/1.1",
|
|
"h3,h2",
|
|
"h2,http/1.1",
|
|
"h3,h2,http/1.1",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> LogLevels =
|
|
[
|
|
"debug",
|
|
"info",
|
|
"warning",
|
|
"error",
|
|
"none"
|
|
];
|
|
|
|
public static readonly Dictionary<string, string> LogLevelColors = new()
|
|
{
|
|
{ "debug", "#6C757D" },
|
|
{ "info", "#2ECC71" },
|
|
{ "warning", "#FFA500" },
|
|
{ "error", "#E74C3C" },
|
|
};
|
|
|
|
public static readonly List<string> InboundTags =
|
|
[
|
|
"socks",
|
|
"socks2",
|
|
"socks3"
|
|
];
|
|
|
|
public static readonly List<string> RuleProtocols =
|
|
[
|
|
"http",
|
|
"tls",
|
|
"bittorrent"
|
|
];
|
|
|
|
public static readonly List<string> RuleNetworks =
|
|
[
|
|
"",
|
|
"tcp",
|
|
"udp",
|
|
"tcp,udp"
|
|
];
|
|
|
|
public static readonly List<string> destOverrideProtocols =
|
|
[
|
|
"http",
|
|
"tls",
|
|
"quic",
|
|
"fakedns",
|
|
"fakedns+others"
|
|
];
|
|
|
|
public static readonly List<int> TunMtus =
|
|
[
|
|
1280,
|
|
1408,
|
|
1500,
|
|
4064,
|
|
9000,
|
|
65535
|
|
];
|
|
|
|
public static readonly List<string> TunStacks =
|
|
[
|
|
"gvisor",
|
|
"system",
|
|
"mixed"
|
|
];
|
|
|
|
public static readonly List<string> PresetMsgFilters =
|
|
[
|
|
"proxy",
|
|
"direct",
|
|
"block",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> SingboxMuxs =
|
|
[
|
|
"h2mux",
|
|
"smux",
|
|
"yamux",
|
|
""
|
|
];
|
|
|
|
public static readonly List<string> TuicCongestionControls =
|
|
[
|
|
"cubic",
|
|
"new_reno",
|
|
"bbr"
|
|
];
|
|
|
|
public static readonly List<string> allowSelectType =
|
|
[
|
|
"selector",
|
|
"urltest",
|
|
"loadbalance",
|
|
"fallback"
|
|
];
|
|
|
|
public static readonly List<string> notAllowTestType =
|
|
[
|
|
"selector",
|
|
"urltest",
|
|
"direct",
|
|
"reject",
|
|
"compatible",
|
|
"pass",
|
|
"loadbalance",
|
|
"fallback"
|
|
];
|
|
|
|
public static readonly List<string> proxyVehicleType =
|
|
[
|
|
"file",
|
|
"http"
|
|
];
|
|
|
|
public static readonly Dictionary<ECoreType, string> CoreUrls = new()
|
|
{
|
|
{ ECoreType.v2fly, "v2fly/v2ray-core" },
|
|
{ ECoreType.v2fly_v5, "v2fly/v2ray-core" },
|
|
{ ECoreType.Xray, "XTLS/Xray-core" },
|
|
{ ECoreType.sing_box, "SagerNet/sing-box" },
|
|
{ ECoreType.mihomo, "MetaCubeX/mihomo" },
|
|
{ ECoreType.hysteria, "apernet/hysteria" },
|
|
{ ECoreType.hysteria2, "apernet/hysteria" },
|
|
{ ECoreType.naiveproxy, "klzgrad/naiveproxy" },
|
|
{ ECoreType.tuic, "EAimTY/tuic" },
|
|
{ ECoreType.juicity, "juicity/juicity" },
|
|
{ ECoreType.brook, "txthinking/brook" },
|
|
{ ECoreType.overtls, "ShadowsocksR-Live/overtls" },
|
|
{ ECoreType.shadowquic, "spongebob888/shadowquic" },
|
|
{ ECoreType.mieru, "enfein/mieru" },
|
|
{ ECoreType.v2rayN, "2dust/v2rayN" },
|
|
};
|
|
|
|
public static readonly List<string> OtherGeoUrls =
|
|
[
|
|
@"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/geoip-only-cn-private.dat",
|
|
@"https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb",
|
|
@"https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb"
|
|
];
|
|
|
|
public static readonly List<string> IPAPIUrls =
|
|
[
|
|
@"https://speed.cloudflare.com/meta",
|
|
@"https://api.ip.sb/geoip",
|
|
@"https://api-ipv4.ip.sb/geoip",
|
|
@"https://api-ipv6.ip.sb/geoip",
|
|
@"https://api.ipapi.is",
|
|
@""
|
|
];
|
|
|
|
public static readonly List<string> OutboundTags =
|
|
[
|
|
ProxyTag,
|
|
DirectTag,
|
|
BlockTag
|
|
];
|
|
|
|
public static readonly Dictionary<string, List<string>> PredefinedHosts = new()
|
|
{
|
|
{ "dns.google", new List<string> { "8.8.8.8", "8.8.4.4", "2001:4860:4860::8888", "2001:4860:4860::8844" } },
|
|
{ "dns.alidns.com", new List<string> { "223.5.5.5", "223.6.6.6", "2400:3200::1", "2400:3200:baba::1" } },
|
|
{ "one.one.one.one", new List<string> { "1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001" } },
|
|
{ "1dot1dot1dot1.cloudflare-dns.com", new List<string> { "1.1.1.1", "1.0.0.1", "2606:4700:4700::1111", "2606:4700:4700::1001" } },
|
|
{ "cloudflare-dns.com", new List<string> { "104.16.249.249", "104.16.248.249", "2606:4700::6810:f8f9", "2606:4700::6810:f9f9" } },
|
|
{ "dns.cloudflare.com", new List<string> { "104.16.132.229", "104.16.133.229", "2606:4700::6810:84e5", "2606:4700::6810:85e5" } },
|
|
{ "dot.pub", new List<string> { "1.12.12.12", "120.53.53.53" } },
|
|
{ "doh.pub", new List<string> { "1.12.12.12", "120.53.53.53" } },
|
|
{ "dns.quad9.net", new List<string> { "9.9.9.9", "149.112.112.112", "2620:fe::fe", "2620:fe::9" } },
|
|
{ "dns.yandex.net", new List<string> { "77.88.8.8", "77.88.8.1", "2a02:6b8::feed:0ff", "2a02:6b8:0:1::feed:0ff" } },
|
|
{ "dns.sb", new List<string> { "185.222.222.222", "2a09::" } },
|
|
{ "dns.umbrella.com", new List<string> { "208.67.220.220", "208.67.222.222", "2620:119:35::35", "2620:119:53::53" } },
|
|
{ "dns.sse.cisco.com", new List<string> { "208.67.220.220", "208.67.222.222", "2620:119:35::35", "2620:119:53::53" } },
|
|
{ "engage.cloudflareclient.com", new List<string> { "162.159.192.1", "2606:4700:d0::a29f:c001" } }
|
|
};
|
|
|
|
public static readonly List<string> ExpectedIPs =
|
|
[
|
|
"geoip:cn",
|
|
"geoip:ir",
|
|
"geoip:ru",
|
|
""
|
|
];
|
|
|
|
#endregion const
|
|
}
|