मैं श्रृंखला को रीफ्रेश करने के लिए प्रोग्रामर रूप से टोर कंट्रोल पोर्ट को कमांड भेजने की कोशिश कर रहा हूं। मैं सी # में कोई उदाहरण नहीं ढूंढ पा रहा हूं, और मेरा समाधान काम नहीं कर रहा है। अनुरोध का समय समाप्त हो गया। मेरे पास सेवा चल रही है, और मैं इसे नियंत्रण बंदरगाह पर सुन सकता हूं।सी # में टोर कंट्रोल प्रोटोकॉल का उपयोग कैसे करें?
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;
}
क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं?
संपादित करें:
हंस के सुझाव, जो वह अब किसी कारण से नष्ट कर दिया गया है के बाद, मैं "को प्रमाणित \ n" बस "प्रमाणित" के बजाय भेजने की कोशिश की। अब मुझे टोर से एक त्रुटि मिल रही है: "551 अमान्य उद्धृत स्ट्रिंग। आपको पासवर्ड को डबल कोट्स में रखना होगा।" कम से कम कुछ प्रगति है।
मैंने फिर "प्रमाणीकरण \" \ "\ n" भेजने की कोशिश की, जैसा कि यह चाहता है, लेकिन प्रतिक्रिया के इंतजार के दौरान यह समय समाप्त हो गया।
संपादित करें:
आदेश विंडोज टेलनेट क्लाइंट में ठीक काम करता है। मुझे उद्धरण भी जोड़ने की ज़रूरत नहीं है। क्या गलत है पता नहीं लगा सकता है। हो सकता है कि डबल कोट्स को भेजे जाने पर सही ढंग से एन्कोड नहीं किया गया हो?
नहीं, मैं Vidalia का उपयोग नहीं किया गया था देखने के लिए सक्षम करने के लिए
getinfo circuit-status
", और मैं वैसे भी इसे हल। – Edgar