J'essaye d'envoyer des commandes au port de contrôle de Tor par programme pour le faire actualiser la chaîne. Je n'ai pas pu trouver d'exemples en C#, et ma solution ne fonctionne pas. La requête expire. J'ai le service en cours d'exécution, et je peux le voir en écoutant sur le port de contrôle.Comment utiliser le protocole de contrôle 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;
}
Quelqu'un peut-il repérer ce que je fais mal?
Edit:
la suggestion de Hans, qu'il a supprimé pour une raison quelconque, j'ai essayé d'envoyer « AUTHENTIQUE \ n » au lieu de « AUTHENTIQUE ». Maintenant, je reçois une erreur de Tor: "551 Chaîne entre guillemets non valide.Vous devez mettre le mot de passe entre guillemets." Au moins, il y a des progrès.
J'ai alors essayé d'envoyer "AUTHENTICATE \" \ "\ n", comme il veut, mais il expire en attendant une réponse.
Edit:
La commande fonctionne très bien dans le client Telnet de Windows. Je n'ai même pas besoin d'ajouter les citations. Je n'arrive pas à comprendre ce qui ne va pas. Peut-être que les guillemets doubles ne sont pas encodés correctement quand ils sont envoyés?
Non, je n'utilisais pas Vidalia, et je résolus de toute façon. – Edgar