使用 c# 的 TOR 新身份

New identity for TOR using c#

我正在使用我的 TOR 浏览器连接到 .onion 网站并使用 C# 下载数据。我想做的是添加一个允许用户获得新身份的按钮,但到目前为止我尝试的一切都没有奏效。

我试过使用 telnet,向端口 9151 发送网络请求,运行 一个本应执行此操作的 vbs,但没有任何效果。

我试过使用 TorSharp,但虽然它有效,但它只适用于异步,我无法正确使用它。我目前正在使用 com.LandonKey.SocksWebProxy.

我该怎么做?


我知道需要什么的时候会添加相关代码,尽管问。


编辑:

@Ralph Wiggum

遗憾的是,我不记得我尝试创建新身份的所有方式,正如我所说,我尝试了 运行 和 VBS 使用 Diagnostic.Process.Start(),但我没有那个剧本了。

我也尝试过使用 WebRequest,但我什至不确定该怎么做。

这就是我记忆中的样子:

com.LandonKey.SocksWebProxy.Proxy.ProxyConfig pc = new com.LandonKey.SocksWebProxy.Proxy.ProxyConfig();
pc.SocksAddress = IPAddress.Parse(tb_Location.Text);
pc.SocksPort = 9151;
SocksWebProxy sw = new SocksWebProxy(pc);
HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create("http://127.0.0.1");
wreq.Headers.Add("SIGNAL", "AUTHENTICATE \"\"");
wreq.Headers.Add("SIGNAL", "NEWNYM");
using (var wres = wreq.GetResponse())
{
    using (var s = new StreamReader(wres.GetResponseStream()))
    {
        MessageBox.Show(s.ReadToEnd());
    }
}

我也尝试过使用 telnet(使用 PrimS.Telnet),但也没有用。看起来像这样:

CancellationToken ct = new CancellationToken(); 
PrimS.Telnet.Client c = new PrimS.Telnet.Client("127.0.0.1", 9151, ct);
c.WriteLine("AUTHENTICATE \"\"\n");
c.WriteLine("SIGNAL NEWNYM"); 

@drew010

正如我所说,我确实使用了 TorSharp 但我停止了。在那里创建一个新身份非常容易,但它 运行 完全是异步的,我无法设法修复它以将其与我的其余代码一起使用。

要通过代码获得新身份,您需要打开到控制端口的连接(通常为 9051,默认情况下禁用 [编辑您的 torrc 以添加 ControlPort 9051])并发出 NEWNYM 信号以建立一个新的电路。

要做到这一点,您可以使用 TorSharp 中的 TorControlClient class。

using Knapcode.TorSharp.Tools.Tor;

TorControlClient tc = new TorControlClient();
tc.ConnectAsync("localhost", 9051);
tc.AuthenticateAsync(null); // you should password protect your control connection
tc.SendCommandAsync("SIGNAL NEWNYM");

您也可以使用此 batch file 来请求新身份,但 C# 可能更适合您的应用程序。参考该代码以查看控制连接上用于获取新身份的序列。

请参阅 ControlPort and HashedControlPassword 配置选项。

希望对您有所帮助。