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)); }
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); }
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); }
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); }
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); }
private static string TrojanConfigEncoder(TrojanConfig config) { return($"trojan://{Uri.EscapeDataString(config.Password)}@{config.ServerHost}:{config.ServerPort}"); }
public TrojanFactory(TrojanConfig config) { this.config = config; }