Estoy tratando de enviar comandos al puerto de control Tor mediante programación para que actualice la cadena. No he podido encontrar ningún ejemplo en C# y mi solución no funciona. La solicitud expira. Tengo el servicio en funcionamiento, y puedo verlo escuchando en el puerto de control.Cómo usar el protocolo de control Tor en 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;
}
¿Alguien puede detectar lo que estoy haciendo mal?
Editar:
Siguiendo la sugerencia de Hans, que ahora se ha borrado por alguna razón, me trataron de enviar "AUTHENTICATE \ n" en lugar de simplemente "Identificación". Ahora recibo un error de Tor: "551 Cadena entrecomillada no válida. Debe poner la contraseña entre comillas dobles". Al menos hay algún progreso.
Luego intenté enviar "AUTHENTICATE \" \ "\ n", como quiere, pero agota el tiempo mientras esperaba una respuesta.
Editar:
El comando funciona bien en el cliente Telnet de Windows. Ni siquiera tengo que agregar las comillas. No puedo entender lo que está mal. ¿Quizás las comillas dobles no están codificadas correctamente cuando se envían?
No, no estaba usando Vidalia, y me lo resolvieron todos modos. – Edgar