Пример #1
0
        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);
            }
        }
Пример #2
0
        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();
        }
Пример #3
0
        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"));
                    }
        }
Пример #4
0
        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();
        }
Пример #5
0
        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();
        }
Пример #6
0
        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();
        }
Пример #7
0
        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();
            }
        }
Пример #8
0
        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());
                }
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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();
            }
        }
Пример #11
0
        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));
            }
        }