Ich versuche, Befehle an den Tor-Steuerport programmgesteuert zu senden, um die Kette zu aktualisieren. Ich konnte keine Beispiele in C# finden, und meine Lösung funktioniert nicht. Die Anfrage läuft ab. Der Dienst läuft, und ich sehe, dass er auf dem Steuerport 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
{
// Nachricht senden
StreamWriter streamWriter = new StreamWriter(client.GetStream());
streamWriter.Write(message);
streamWriter.Flush();
// Antwort lesen
StreamReader streamReader = new StreamReader(client.GetStream());
proxyResponse = streamReader.ReadToEnd();
}
catch (Exception ex)
{
// Ignorieren
}
return proxyResponse;
}
Kann jemand sehen, was ich falsch mache?
Bearbeitet:
Nach Hans' Vorschlag, den er aus irgendeinem Grund jetzt gelöscht hat, habe ich versucht, "AUTHENTICATE\n" anstatt einfach "AUTHENTICATE" zu senden. Jetzt erhalte ich einen Fehler von Tor zurück: "551 Ungültige Angebotszeichenfolge. Sie müssen das Kennwort in doppelte Anführungszeichen setzen." Zumindest gibt es Fortschritte.
Dann habe ich versucht, "AUTHENTIFIZIEREN \"\"\n" zu senden, so wie es verlangt wird, aber es läuft ab, während es auf eine Antwort wartet.
Bearbeitet:
Der Befehl funktioniert im Windows-Telnet-Client einwandfrei. Ich muss nicht einmal die Anführungszeichen hinzufügen. Kann nicht herausfinden, was falsch ist. Vielleicht sind die doppelten Anführungszeichen nicht korrekt codiert, wenn sie gesendet werden?