Use Tor for your C# HTTP clients. Tor + Privoxy = ❤️
All you need is client code that can use a simple HTTP proxy.
CI | OS | Status |
---|---|---|
AppVeyor | Windows | |
Travis CI | Linux |
This product is produced independently from the Tor® anonymity software and carries no guarantee from The Tor Project about quality, suitability or anything else.
- Supports:
- .NET Core (.NET Standard 2.0 and later)
- .NET Framework (.NET Framework 4.5 and later)
- Windows (Windows 10 is tested, some older Windows should work too)
- Linux (Ubuntu 16.04 and 18.04 is tested)
- Mac OS X support is not planned.
- Uses Privoxy to redirect HTTP proxy traffic to Tor.
- Uses virtual desktops to manage Tor and Privoxy processes.
- Optionally downloads the latest version of Tor and Privoxy.
Install-Package Knapcode.TorSharp
// configure
var settings = new TorSharpSettings
{
ZippedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorZipped"),
ExtractedToolsDirectory = Path.Combine(Path.GetTempPath(), "TorExtracted"),
PrivoxyPort = 1337,
TorSocksPort = 1338,
TorControlPort = 1339,
TorControlPassword = "foobar"
};
// 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://api.ipify.org"));
await proxy.GetNewIdentityAsync();
Console.WriteLine(await httpClient.GetStringAsync("http://api.ipify.org"));
proxy.Stop();
This most likely is happening because the URLs where we fetch Tor or Privoxy from are down or have changed. I would recommend:
-
Open an issue so I can look into it.
-
Work around the issue by setting up the tools manually and not using
TorSharpToolFetcher
. See below. -
Investigate the issue yourself. The TorSharp.Sandbox project is helpful for this. Pull requests accepted 🏆.
If you don't want to use the TorSharpToolFetcher
to download the latest version of the tools for you or if you want
to use a specific version of Tor and Privoxy, follow these steps.
- Make a directory that will hold the zipped Tor and Privoxy binaries.
- Put a Tor Win32 ZIP in that folder with the file name like:
tor-win32-{version}.zip
{version}
must be parsable as aSystem.Version
meaning it ismajor.minor[.build[.revision]]
.- Example:
tor-win32-0.3.5.8.zip
- The ZIP is expected to have
Tor\tor.exe
.
- Put a Privoxy Win32 ZIP in that folder with a file name like:
privoxy-win32-{version}.zip
- Again,
{version}
must be parsable as aSystem.Version
. - Example:
privoxy-win32-3.0.26.zip
- The ZIP is expected to have
privoxy.exe
.
- Again,
- Initialize a
TorSharpSettings
instance whereZippedToolsDirectory
is the directory created above. - Pass this settings instance to the
TorSharpProxy
constructor.