private async Task ExecuteEndToEndTestAsync(TorSharpSettings settings) { // Arrange using (var proxy = new TorSharpProxy(settings)) { _output.WriteLine($"Initialized proxy with tool runner type {settings.ToolRunnerType}"); // Act await new TorSharpToolFetcher(settings, new HttpClient()).FetchAsync(); _output.WriteLine("The tools have been fetched"); await proxy.ConfigureAndStartAsync(); _output.WriteLine("The proxy has been started"); // get the first identity var ipA = await GetCurrentIpAddressAsync(settings); await proxy.GetNewIdentityAsync(); _output.WriteLine("Get new identity succeeded"); var ipB = await GetCurrentIpAddressAsync(settings); // Assert Assert.Equal(AddressFamily.InterNetwork, ipA.AddressFamily); Assert.Equal(AddressFamily.InterNetwork, ipB.AddressFamily); } }
private async Task <IPAddress> GetCurrentIpAddressAsync(TorSharpProxy proxy, TorSharpSettings settings) { const int maxAttempts = 3; for (var attempt = 1; attempt <= maxAttempts; attempt++) { try { var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxySettings.Port)) }; using (handler) using (var httpClient = new HttpClient(handler)) { httpClient.Timeout = TimeSpan.FromSeconds(60); var ip = (await httpClient.GetStringAsync("https://api.ipify.org")).Trim(); _output.WriteLine($"Get IP succeeded: {ip}"); return(IPAddress.Parse(ip)); } } catch (Exception ex) when(attempt < maxAttempts) { _output.WriteLine($"[Attempt {attempt}] An exception was thrown while fetching an IP. Retrying." + Environment.NewLine + ex); await proxy.GetNewIdentityAsync(); } } throw new NotImplementedException(); }
private static async Task MainAsync() { // configure var settings = new TorSharpSettings { ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"), ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"), PrivoxyPort = 1337, TorSocksPort = 1338, TorControlPort = 1339, TorControlPassword = "******", ToolRunnerType = ToolRunnerType.VirtualDesktop, WaitForTestEndpoint = true }; // download tools await new TorSharpToolFetcher(settings, new HttpClient()).FetchAsync(); // execute using (var proxy = new TorSharpProxy(settings)) using (var handler = proxy.CreateHttpClientHandler()) using (var httpClient = new HttpClient(handler)) { await proxy.ConfigureAndStartAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); await proxy.GetNewIdentityAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); } }
private static async Task MainAsync() { // configure var settings = new TorSharpSettings { ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"), ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"), PrivoxyPort = 1337, TorSocksPort = 1338, TorControlPort = 1339, TorControlPassword = "******", ToolRunnerType = ToolRunnerType.Simple }; // download tools await new TorSharpToolFetcher(settings, new HttpClient()).FetchAsync(); // execute var proxy = new TorSharpProxy(settings); var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxyPort)) }; var httpClient = new HttpClient(handler); await proxy.ConfigureAndStartAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); await proxy.GetNewIdentityAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); proxy.Stop(); }
private async Task <T> SendProxiedRequestAsync <T>( TorSharpProxy proxy, TorSharpSettings settings, string operation, Func <HttpClient, Task <T> > executeAsync) { const int maxAttempts = 3; for (var attempt = 1; attempt <= maxAttempts; attempt++) { try { var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxySettings.Port)) }; using (handler) using (var httpClient = new HttpClient(handler)) { httpClient.Timeout = TimeSpan.FromSeconds(60); return(await executeAsync(httpClient)); } } catch (Exception ex) when(attempt < maxAttempts) { _output.WriteLine($"[Attempt {attempt}] An exception was thrown while {operation}. Retrying." + Environment.NewLine + ex); await proxy.GetNewIdentityAsync(); } } throw new NotImplementedException(); }
private static async Task MainAsync() { // configure var settings = new TorSharpSettings { ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"), ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"), PrivoxyPort = 1337, TorSocksPort = 1338, TorControlPort = 1339, TorControlPassword = "******", ToolRunnerType = ToolRunnerType.Simple }; // download tools await new TorSharpToolFetcher(settings, new HttpClient()).FetchAsync(); // execute var proxy = new TorSharpProxy(settings); var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxyPort)) }; var httpClient = new HttpClient(handler); await proxy.ConfigureAndStartAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); await proxy.GetNewIdentityAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://icanhazip.com")); proxy.Stop(); }
private static async Task MainAsync() { // configure var settings = new TorSharpSettings { ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"), ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"), PrivoxySettings = { Port = 1337, }, TorSettings = { SocksPort = 1338, ControlPort = 1339, ControlPassword = "******", }, }; // download tools using (var httpClient = new HttpClient()) { var fetcher = new TorSharpToolFetcher(settings, httpClient); var updates = await fetcher.CheckForUpdatesAsync(); Console.WriteLine($"Current Privoxy: {updates.Privoxy.LocalVersion?.ToString() ?? "(none)"}"); Console.WriteLine($" Latest Privoxy: {updates.Privoxy.LatestDownload.Version}"); Console.WriteLine(); Console.WriteLine($"Current Tor: {updates.Tor.LocalVersion?.ToString() ?? "(none)"}"); Console.WriteLine($" Latest Tor: {updates.Tor.LatestDownload.Version}"); Console.WriteLine(); if (updates.HasUpdate) { await fetcher.FetchAsync(updates); } } // execute using (var proxy = new TorSharpProxy(settings)) { var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxySettings.Port)) }; using (handler) using (var httpClient = new HttpClient(handler)) { await proxy.ConfigureAndStartAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://api.ipify.org")); await proxy.GetNewIdentityAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://api.ipify.org")); } proxy.Stop(); } }
private async Task ExecuteEndToEndTestAsync(TorSharpSettings settings) { // Arrange using (var httpClient = new HttpClient()) using (var proxy = new TorSharpProxy(settings)) { _output.WriteLine(settings); // Act var fetcher = _httpFixture.GetTorSharpToolFetcher(settings, httpClient); await fetcher.FetchAsync(); _output.WriteLine("The tools have been fetched"); await proxy.ConfigureAndStartAsync(); _output.WriteLine("The proxy has been started"); // get the first identity var ipA = await GetCurrentIpAddressAsync(proxy, settings); await proxy.GetNewIdentityAsync(); _output.WriteLine("Get new identity succeeded"); var ipB = await GetCurrentIpAddressAsync(proxy, settings); // Assert Assert.Equal(AddressFamily.InterNetwork, ipA.AddressFamily); Assert.Equal(AddressFamily.InterNetwork, ipB.AddressFamily); var zippedDir = new DirectoryInfo(settings.ZippedToolsDirectory); Assert.True(zippedDir.Exists, "The zipped tools directory should exist."); Assert.Empty(zippedDir.EnumerateDirectories()); Assert.Equal(2, zippedDir.EnumerateFiles().Count()); var extractedDir = new DirectoryInfo(settings.ExtractedToolsDirectory); Assert.True(extractedDir.Exists, "The extracted tools directory should exist."); Assert.Equal(2, extractedDir.EnumerateDirectories().Count()); Assert.Empty(extractedDir.EnumerateFiles()); } }
private async Task ExecuteEndToEndTestAsync(TorSharpSettings settings) { // Arrange using (var proxy = new TorSharpProxy(settings)) { _output.WriteLine($"Initialized proxy with tool runner type {settings.ToolRunnerType}"); // Act await new TorSharpToolFetcher(settings, new HttpClient()).FetchAsync(); _output.WriteLine("The tools have been fetched"); await proxy.ConfigureAndStartAsync(); _output.WriteLine("The proxy has been started"); // get the first identity var ipA = await GetCurrentIpAddressAsync(settings); await proxy.GetNewIdentityAsync(); _output.WriteLine("Get new identity succeeded"); var ipB = await GetCurrentIpAddressAsync(settings); // Assert Assert.Equal(AddressFamily.InterNetwork, ipA.AddressFamily); Assert.Equal(AddressFamily.InterNetwork, ipB.AddressFamily); } }
private static async Task MainAsync() { // configure var settings = new TorSharpSettings { ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"), ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"), PrivoxySettings = { Port = 18118, }, TorSettings = { SocksPort = 19050, ControlPort = 19051, ControlPassword = "******", }, }; // output runtime information var message = new StringBuilder(); message.Append($"Running the sample on {settings.OSPlatform} OS and {settings.Architecture} architecture."); #if NETCOREAPP message.Append($" OS description: {RuntimeInformation.OSDescription}."); #endif Console.WriteLine(message.ToString()); Console.WriteLine(); // download tools using (var httpClient = new HttpClient()) { var fetcher = new TorSharpToolFetcher(settings, httpClient); var updates = await fetcher.CheckForUpdatesAsync(); Console.WriteLine($"Current Privoxy: {updates.Privoxy.LocalVersion?.ToString() ?? "(none)"}"); Console.WriteLine($" Latest Privoxy: {updates.Privoxy.LatestDownload.Version}"); Console.WriteLine(); Console.WriteLine($"Current Tor: {updates.Tor.LocalVersion?.ToString() ?? "(none)"}"); Console.WriteLine($" Latest Tor: {updates.Tor.LatestDownload.Version}"); Console.WriteLine(); if (updates.HasUpdate) { await fetcher.FetchAsync(updates); } } // execute using (var proxy = new TorSharpProxy(settings)) { var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxySettings.Port)) }; using (handler) using (var httpClient = new HttpClient(handler)) { await proxy.ConfigureAndStartAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://api.ipify.org")); await proxy.GetNewIdentityAsync(); Console.WriteLine(await httpClient.GetStringAsync("http://api.ipify.org")); using (var controlClient = await proxy.GetControlClientAsync()) { var read = await controlClient.GetTrafficReadAsync(); Console.WriteLine("Bytes read : {0}", read); var written = await controlClient.GetTrafficWrittenAsync(); Console.WriteLine("Bytes written : {0}", written); } } proxy.Stop(); } }
private async Task <IEnumerable <Item> > RequestAndTranslateGINumber(IEnumerable <string> accessions, int exceptTime = 0) { string body = ""; try { var handler = new HttpClientHandler { Proxy = new WebProxy(new Uri("http://localhost:" + settings.PrivoxyPort)) }; using (var client = new HttpClient(handler)) { ConfigureHttpClient(client); var strkeys = accessions.Select(x => x + "[accn]").Aggregate((x1, x2) => x1 + "+OR+" + x2); var url = $"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=nuccore&term={strkeys}&usehistory=y&retmax={ret_max}"; var response = await client.GetAsync(url); var l = response.Content.Headers.ToList(); if (!response.IsSuccessStatusCode) { Console.WriteLine($"Retornou erro {response.StatusCode} - {response.ReasonPhrase}"); Console.ReadLine(); throw new Exception(response.ReasonPhrase); } body = await response.Content.ReadAsStringAsync(); XmlDocument doc = new XmlDocument(); doc.PreserveWhitespace = false; doc.LoadXml(body); var items = new List <Item>(); var elementListaId = doc.GetElementsByTagName("IdList")[0].ChildNodes; for (int g = 0; g < elementListaId.Count; g++) { var id = elementListaId.Item(g).InnerText; items.Add(new Item { Id = id }); } return(items); } } catch (Exception ex) { exceptTime++; Console.WriteLine(); Console.WriteLine($"Falha ao obter numeros GI (Tentativa {exceptTime})"); Console.WriteLine($"Motivo: {ex.GetFullMessage()}"); Console.WriteLine($"Dados retornados: {body}"); if (exceptTime >= 30) { throw ex; } Console.WriteLine($"Tentando novamente"); if (body?.Contains("blocked") == true) { await proxy.GetNewIdentityAsync(); } return(await RequestAndTranslateGINumber(accessions, exceptTime)); } }