Ich versuche, programmgesteuert Befehle an den Tor-Kontrollanschluss zu senden, damit dieser die Kette aktualisiert. Ich habe keine Beispiele in C# finden können und meine Lösung funktioniert nicht. Die Anfrage wird abgebrochen. Der Dienst läuft, und ich kann sehen, dass er auf dem Kontrollport lauscht.
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;
}
Kann mir jemand sagen, was ich falsch mache?
Edita:
Dem Vorschlag von Hans folgend, den er jetzt aus irgendeinem Grund gelöscht hat, habe ich versucht, "AUTHENTICATE" zu senden \n " statt nur "AUTHENTICATE". Jetzt bekomme ich eine Fehlermeldung von Tor zurück: "551 Ungültige Zeichenkette. Du musst das Passwort in doppelte Anführungszeichen setzen." Wenigstens gibt es einen kleinen Fortschritt.
Ich habe dann versucht, "AUTHENTICATE \"\" zu senden. \n ", als ob es das wollte, aber es kommt zu einem Timeout, während es auf eine Antwort wartet.
Edita:
Der Befehl funktioniert problemlos im Windows-Telnet-Client. Ich muss nicht einmal die Anführungszeichen hinzufügen. Ich kann nicht herausfinden, was falsch ist. Vielleicht werden die doppelten Anführungszeichen beim Senden nicht richtig kodiert?