2010-12-15 3 views
6

मैं यूनिकोड वर्णों की पूरी श्रृंखला पर फिर से नहीं जा सकता।रूबी: सभी यूनिकोड वर्णों (यूटीएफ 8/एन्कोडिंग/स्ट्रिंग मैनिपुलेशन) के माध्यम से फ़ज़िंग

मैं हर जगह खोजा गया ...

मैं एक fuzzer निर्माण कर रहा हूँ और एक यूआरएल में एम्बेड करना चाहते हैं, सभी यूनिकोड वर्ण (एक समय में एक)।

उदाहरण के लिए: http://www.example.com?a=\uff1c

मैं जानता हूँ कि वहाँ कुछ बनाया उपकरण हैं, लेकिन मैं और अधिक लचीलेपन की जरूरत है कि।

यदि मैं निम्नलिखित की तरह कुछ कर सकता हूं: "\u" + "ff1c" यह बहुत अच्छा होगा।

char = "\u0000" 
... 

#within iteration 

char.succ! 

... 

लेकिन चरित्र "\u0039", जो संख्या 9 के बाद, मैं "10" के बजाय मिल जाएगा ":"

यह निकटतम मुझे मिल गया है

+0

क्या यह केवल वैध यूनिकोड कोड बिंदु उत्पन्न करने का प्रयास करने के लिए फ़ज़िंग के पूरे बिंदु को हराने नहीं देता है? –

उत्तर

2

आप को पैक इस्तेमाल कर सकते हैं संख्याओं को यूटीएफ 8 अक्षरों में परिवर्तित करें लेकिन मुझे यकीन नहीं है कि यह आपकी समस्या हल करता है या नहीं।

आप या तो सभी पात्रों के संख्यात्मक मानों के साथ एक सरणी बना सकते हैं और यूटीएफ 8 स्ट्रिंग प्राप्त करने के लिए पैक का उपयोग कर सकते हैं या आप जो भी चाहते हैं उसे 0 से लूप कर सकते हैं और लूप के भीतर पैक का उपयोग कर सकते हैं।

मैंने खुद को समझाने के लिए एक छोटा सा उदाहरण लिखा है। नीचे दिया गया कोड चरित्र के बाद प्रत्येक चरित्र के हेक्स मान को प्रिंट करता है।

0.upto(100) do |i| 
    puts "%04x" % i + ": " + [i].pack("U*") 
end 
1

यहाँ कुछ सरल कोड यद्यपि थोड़ा समझ से परे, तथ्य यह है कि रूबी एक कोडपॉइंट को < < ऑपरेटर के दाहिने हाथ की ओर एक पूर्णांक में परिवर्तित कर देंगे का लाभ लेता है कि है,। यह केवल पूर्णांक मान < = 255 के लिए रुबी 1.8 के साथ काम करता है। यह 1.9 में 255 से अधिक मानों के लिए काम करेगा।

0.upto(100) do |i| 
    puts "" << i 
end 
संबंधित मुद्दे