我想使用Tor下载文件。我发现的大多数解决方案都需要安装和运行其他软件(例如privoxy),但即使我不使用我的程序,我也不想让其他软件一直运行。
所以我尝试了Tor.NET库,但我无法使用Tor获取它。这个例子不应该返回我的IP地址,但确实如此:
ClientCreateParams createParams = new ClientCreateParams(@"D:\tor.exe", 9051);
Client client = Client.Create(createParams);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.icanhazip.com/");
request.Proxy = client.Proxy.WebProxy;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var reader = new StreamReader(response.GetResponseStream());
Console.WriteLine(reader.ReadToEnd());
}
Console.WriteLine("Press enter to exit...");
Console.ReadLine();
关于此已有多条评论,但不幸的是图书馆的作者不再活跃。
也许你知道我做错了什么(是否需要更多配置?)或者想知道使用tor下载文件的替代方法。
答案 0 :(得分:0)
最后,我使用https://github.com/Ogglas/SocksWebProxy @Ogglas来使用Tor下载文件。
该项目有一个不起作用的例子(第一次启动它等待Tor无限次退出,但是当你再次启动程序时它可以通过你的第一次尝试使用Tor进程startet),所以我改了它
我创建了一个Start()方法来启动Tor:
public async void Start(IProgress<int> progress)
{
torProcess = new Process();
torProcess.StartInfo.FileName = @"D:\...\tor.exe";
torProcess.StartInfo.Arguments = @"-f ""D:\...\torrc""";
torProcess.StartInfo.UseShellExecute = false;
torProcess.StartInfo.RedirectStandardOutput = true;
torProcess.StartInfo.CreateNoWindow = true;
torProcess.Start();
var reader = torProcess.StandardOutput;
while (true)
{
var line = await reader.ReadLineAsync();
if (line == null)
{
// EOF
Environment.Exit(0);
}
// Get loading status
foreach (Match m in Regex.Matches(line, @"Bootstrapped (\d+)%"))
{
progress.Report(Convert.ToInt32(m.Groups[1].Value));
}
if (line.Contains("100%: Done"))
{
// Tor loaded
break;
}
if (line.Contains("Is Tor already running?"))
{
// Tor already running
break;
}
}
proxy = new SocksWebProxy(new ProxyConfig(
//This is an internal http->socks proxy that runs in process
IPAddress.Parse("127.0.0.1"),
//This is the port your in process http->socks proxy will run on
12345,
//This could be an address to a local socks proxy (ex: Tor / Tor Browser, If Tor is running it will be on 127.0.0.1)
IPAddress.Parse("127.0.0.1"),
//This is the port that the socks proxy lives on (ex: Tor / Tor Browser, Tor is 9150)
9150,
//This Can be Socks4 or Socks5
ProxyConfig.SocksVersion.Five
));
progress.Report(100);
}
之后你可以使用这样的东西来下载东西:
public static string DownloadString(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Proxy = proxy;
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
return new StreamReader(response.GetResponseStream()).ReadToEnd();
}
}
当你退出程序时,你也应该杀死Tor进程。
答案 1 :(得分:0)
您遵循 Tor项目手册,在命令行 HTTPTunnelPort 中发现here:首先,必须使用以下命令启动HTTP隧道
Tor.exe --HTTPTunnelPort 4711
它在127.0.0.1:4711为您提供了HTTP隧道(另请参见here)。现在您可以连接到该代理了:
WebProxy oWebProxy = new WebProxy (IPAddress.Loopback.ToString (), 4711);
WebClient oWebClient = new WebClient ();
oWebClient.Proxy = oWebProxy;
oWebClient.DownloadFile ("http://myUri", "myFilename");
在使用 Tor.exe 时请注意以下几点:
至少,您可能要检查您的代理是否具有与本地Internet连接不同的IP地址。