2011-06-09 16 views
8

के साथ टोर क्लाइंट को नियंत्रित करना मैं रूबी स्क्रिप्ट लिख रहा हूं जो स्वचालित रूप से डेटा विश्लेषण के लिए वेबसाइटों को क्रॉल करता है, और अब मेरे पास एक आवश्यकता है जो काफी जटिल है: मुझे विभिन्न देशों से पहुंच अनुकरण करने में सक्षम होना चाहिए, लगभग 20 अलग लोगों को। वेबसाइट में आईपी स्थान के आधार पर अलग-अलग जानकारी होगी, इसलिए इसे करने का एकमात्र तरीका यह है कि वह उस सर्वर से अनुरोध करें जो वास्तव में उस देश में है।रुबी

चूंकि मैं उन 20 देशों में से प्रत्येक में सर्वर नहीं खरीदना चाहता हूं, इसलिए मैंने टोर को एक कोशिश देने का विकल्प चुना - जैसा कि आप में से कई लोग जानते होंगे, torrc कॉन्फ़िगरेशन फ़ाइल को संपादित करके निकास नोड निर्दिष्ट करना संभव है और इसलिए वह देश जिस से वास्तविक अनुरोध शुरू होगा।

जब मैं इसे मैन्युअल रूप से करता हूं, उदा। एक अर्जेंटीना सर्वर का उपयोग करने के लिए torrc फ़ाइल को संपादित करके, फिर विडलिया का उपयोग करके टोर को डिस्कनेक्ट करना, विडलिया को दोबारा जोड़ना, और फिर अनुरोध को दोबारा शुरू करना, यह ठीक काम करता है। हालांकि, मैं इस प्रक्रिया को पूरी तरह से स्वचालित करना चाहता हूं, और जितना संभव हो उतना कुशलतापूर्वक कर सकता हूं। टोर सी में लिखा गया है, और मैं इसके लिए अपना संपूर्ण स्रोत कोड अलग करने से बचना चाहता हूं। केवल रूबी का उपयोग करके पूरी प्रक्रिया को स्वचालित करने का सबसे आसान तरीका क्या है इसका कोई विचार?

इसके अलावा, अगर मुझे कुछ याद आ रहा है और इस पूरे परीक्षा के लिए एक आसान विकल्प है, तो मुझे बताएं।

धन्यवाद!

उत्तर

12

कृपया टोर कंट्रोल प्रोटोकॉल पर एक नज़र डालें। आप टेलनेट का उपयोग कर सर्किट को नियंत्रित कर सकते हैं। http://thesprawl.org/memdump/?entry=8

एक नया अंत बिंदु के लिए एक नया सर्किट जो स्विच करने के लिए स्विच करने के लिए:

require 'net/telnet' 

    def switch_endpoint 
    localhost = Net::Telnet::new("Host" => "localhost", "Port" => "9051", "Timeout" => 10, "Prompt" => /250 OK\n/) 
    localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OK\n" } 
    localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OK\n" } 
    localhost.close 
    end 

देरी के बारे में पता है एक नया सर्किट बनाने के लिए हो सकता है, कुछ सेकंड लग सकते ताकि आप बेहतर एक देरी जोड़ना होगा कोड में, या जांचें कि क्या आपका पता कुछ दूरस्थ आईपी पहचान साइट पर कॉल करके बदल गया है या नहीं।