コード例 #1
0
ファイル: TrojanController.cs プロジェクト: utenkekkou/Netch
    public async Task <Socks5Server> StartAsync(Server s)
    {
        var server       = (TrojanServer)s;
        var trojanConfig = new TrojanConfig
        {
            local_addr  = this.LocalAddress(),
            local_port  = this.Socks5LocalPort(),
            remote_addr = await server.AutoResolveHostnameAsync(),
            remote_port = server.Port,
            password    = new List <string>
            {
                server.Password
            },
            ssl = new TrojanSSL
            {
                sni = server.Host.ValueOrDefault() ?? server.Hostname
            }
        };

        await using (var fileStream = new FileStream(Constants.TempConfig, FileMode.Create, FileAccess.Write, FileShare.Read))
        {
            await JsonSerializer.SerializeAsync(fileStream, trojanConfig, Global.NewCustomJsonSerializerOptions());
        }

        await StartGuardAsync("-config ..\\data\\last.json");

        return(new Socks5Server(IPAddress.Loopback.ToString(), this.Socks5LocalPort(), server.Hostname));
    }
コード例 #2
0
        public override IList <IAdapterConfig> ReadJson(JsonReader reader, Type objectType, IList <IAdapterConfig> existingValue, bool hasExistingValue, JsonSerializer serializer)
        {
            var jsonList = JArray.Load(reader);
            var objList  = new List <IAdapterConfig>(jsonList.Count);

            foreach (var json in jsonList)
            {
                var jsonReader  = json.CreateReader();
                var adapterType = json[nameof(IAdapterConfig.AdapterType)].Value <string>();
                switch (adapterType)
                {
                case "shadowsocks":
                    var ss = new ShadowsocksConfig();
                    serializer.Populate(jsonReader, ss);
                    objList.Add(ss);
                    break;

                case "http":
                    var http = new HttpConfig();
                    serializer.Populate(jsonReader, http);
                    objList.Add(http);
                    break;

                case "trojan":
                    var trojan = new TrojanConfig();
                    serializer.Populate(jsonReader, trojan);
                    objList.Add(trojan);
                    break;
                }
            }
            return(objList);
        }
コード例 #3
0
        public IAdapterConfig Decode(string data)
        {
            Uri uri;

            try
            {
                uri = new Uri(data);
            }
            catch (FormatException)
            {
                return(null);
            }
            if (!uri.IsAbsoluteUri)
            {
                return(null);
            }

            var scheme = uri.Scheme;

            if (scheme != "trojan")
            {
                return(null);
            }
            var trojanConfig = new TrojanConfig
            {
                ServerHost = uri.Host,
                ServerPort = uri.Port == -1 ? 443 : uri.Port,
                Password   = uri.UserInfo
            };

            return(trojanConfig);
        }
コード例 #4
0
        private TrojanConfig DecodeUriToConfig(string data)
        {
            Uri uri;

            try
            {
                uri = new Uri(data);
            }
            catch (UriFormatException)
            {
                return(null);
            }
            var scheme = uri.Scheme;

            if (scheme != "trojan")
            {
                return(null);
            }
            var trojanConfig = new TrojanConfig
            {
                ServerHost = uri.Host,
                ServerPort = uri.Port,
                Password   = uri.UserInfo
            };

            return(trojanConfig);
        }
コード例 #5
0
        public TrojanFactory(TrojanConfig config)
        {
            host          = new HostName(config.ServerHost);
            serviceName   = config.ServerPort.ToString();
            allowInsecure = config.AllowInsecure;
            var keyBuf = new byte[32];

            YtCrypto.Util.Sha224(Encoding.UTF8.GetBytes(config.Password), keyBuf);
            hashedKey = Encoding.ASCII.GetBytes(BitConverter.ToString(keyBuf).Replace("-", string.Empty).ToLower()).AsMemory(0, 56);
        }
コード例 #6
0
 private static string TrojanConfigEncoder(TrojanConfig config)
 {
     return($"trojan://{Uri.EscapeDataString(config.Password)}@{config.ServerHost}:{config.ServerPort}");
 }
コード例 #7
0
 public TrojanFactory(TrojanConfig config)
 {
     this.config = config;
 }