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