我正在尝试以编程方式向 Tor 控制端口发送命令以使其刷新链。我无法在 C# 中找到任何示例,并且我的解决方案不起作用。请求超时。我的服务正在运行,我可以看到它正在侦听控制端口。
public string Refresh()
{
TcpClient client = new TcpClient("localhost", 9051);
string response = string.Empty;
string authenticate = MakeTcpRequest("AUTHENTICATE\r\n", client);
if (authenticate.Equals("250"))
{
response = MakeTcpRequest("SIGNAL NEWNYM\r\n", client);
}
client.Close();
return response;
}
public string MakeTcpRequest(string message, TcpClient client)
{
client.ReceiveTimeout = 20000;
client.SendTimeout = 20000;
string proxyResponse = string.Empty;
try
{
// Send message
StreamWriter streamWriter = new StreamWriter(client.GetStream());
streamWriter.Write(message);
streamWriter.Flush();
// Read response
StreamReader streamReader = new StreamReader(client.GetStream());
proxyResponse = streamReader.ReadToEnd();
}
catch (Exception ex)
{
// Ignore
}
return proxyResponse;
}
谁能发现我做错了什么?
编辑:
按照 Hans 的建议(由于某种原因他现在已将其删除),我尝试发送“AUTHENTICATE\n”而不仅仅是“AUTHENTICATE”。现在我从 Tor 收到一个错误:“551 无效的引号字符串。您需要将密码放在双引号中。” 至少有一些进展。
然后我尝试发送“AUTHENTICATE \”\“\n”,就像它想要的那样,但它在等待响应时超时。
编辑:
该命令在 Windows Telnet 客户端中运行良好。我什至不必添加引号。无法弄清楚出了什么问题。也许双引号在发送时没有正确编码?