プログラムで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;
}
誰かが私が間違っていることを見つけることができますか?
編集:
ハンスの提案に続いて、彼は何らかの理由で削除しましたが、私は単に「AUTHENTICATE」ではなく「AUTHENTICATE\n」を送信しようとしました。Torからエラーが返ってきました:「551引用符で囲まれた文字列が無効です。パスワードを二重引用符で囲む必要があります。」少なくともある程度の進歩はあります。
次に、「AUTHENTICATE \ "\" \ n」を送信しようとしましたが、応答を待っている間にタイムアウトになりました。
編集:
このコマンドは、WindowsTelnetクライアントで正常に機能します。引用符を追加する必要もありません。何が悪いのか理解できません。二重引用符は、送信時に正しくエンコードされていない可能性がありますか?