Я пытаюсь отправить команды в порт управления Tor программным образом, чтобы обновить цепочку. Я не смог найти примеры на С#, и мое решение не работает. Запрос истекает. У меня работает служба, и я вижу, как он прослушивает порт управления.
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;
}
Может ли кто-нибудь определить, что я делаю неправильно?
Edit:
Следуя предложению Ганса, которое он по какой-то причине удалил, я попытался отправить "AUTHENTICATE\n" вместо "AUTHENTICATE". Теперь я возвращаю ошибку от Tor: "551 Недопустимая строка с кавычками. Вам нужно ввести пароль в двойные кавычки". По крайней мере, есть некоторый прогресс.
Затем я попытался отправить "AUTHENTICATE \" \ "\n", как он хочет, но он истекает время ожидания ответа.
Edit:
Команда отлично работает в клиенте Windows Telnet. Мне даже не нужно добавлять кавычки. Не могу понять, что случилось. Возможно, двойные кавычки неправильно кодируются при отправке?