2009-11-20 19 views
7

निम्नलिखित * निक्स कमांड हेक्सडम्प कमांड में आईपी और पोर्ट (127.0.0.1:80) का हेक्स प्रतिनिधित्व पाइप करता है।यूनिक्स हेक्सडम्प में एंडियननेस

printf "\x7F\x00\x00\x01\x00\x50" | hexdump -e '3/1 "%u." /1 "%u:" 1/2 "%u" "\n"' 

-ए ध्वज इनपुट को पार्स करने के लिए एक मनमाने ढंग से प्रारूप की अनुमति देता है। इस मामले में, हम आईपी के पहले तीन ऑक्टेट्स को बिना किसी डॉट के बाद हस्ताक्षरित दशमलव में पार्स कर रहे हैं। अंतिम ऑक्टेट को एक हस्ताक्षरित दशमलव में भी पार्स किया जाता है लेकिन इसके बाद एक कोलन होता है। अंत में - और यह वह जगह है जहां समस्या निहित है - बंदरगाह के लिए 2 बाइट्स को एक नए हस्ताक्षर किए गए दशमलव के रूप में एक नए हस्ताक्षर किए गए दशमलव के रूप में पार्स किया जाता है।

इस आदेश को निष्पादित करने वाली प्रणाली की अंतहीनता के आधार पर, परिणाम अलग-अलग होगा। एक बड़ी एंडियन प्रणाली पोर्ट 80 को ठीक से दिखाएगी; जबकि एक छोटी-एंडियन प्रणाली पोर्ट 20480 दिखाएगी।

क्या हेक्सडम्प को अंतहीनता के बारे में जागरूक करने का कोई तरीका है जबकि अभी भी मनमाने ढंग से प्रारूप विनिर्देश को अनुमति दे रहा है?

+0

मुझे लगता है कि यदि प्लेटफॉर्म थोड़ा-अंतराल है, तो पिछले दो बाइट्स को स्वैप करके इनपुट तैयार करना स्वीकार्य नहीं है, क्योंकि आप सवाल पूछ रहे हैं? –

+0

क्या यह एक बाइट-स्वैप की तरह दिख रहा है? – shrizza

उत्तर

6

मैं नहीं पता है कि यह hexdump साथ किया जा सकता है, लेकिन यह पर्ल में पर्याप्त आसान है:

 
$ printf '\x00\x50' | perl -nE 'say unpack "S>"' 
80 
$ printf '\x00\x50' | perl -nE 'say unpack "S<"' 
20480 

आपको लगता है कि tweak प्रारूप आप इच्छा पाने के लिए कर सकते हैं। ('कहते हैं' पर्ल 5.10 की आवश्यकता है। पर्ल < 5.10 के लिए प्रिंट का उपयोग करें)

(व्यक्ति जो क्योंकि मुझे नहीं । मैं सुझाव दे रहा हूँ कि ओ पी की जगह "सवाल का जवाब" किया downvote करना चाहती है के लिए स्पष्ट करने के लिए पर्ल के साथ हेक्सडम्प। डाउनवोट यदि आपको जरूरी है।)

+0

मैं सी/पर्ल/पायथन से दूर रहना चाहता हूं और बस एक और टूल-आधारित दृष्टिकोण से चिपकना चाहता हूं। शायद एक एक्सएक्सडी विकल्प? – shrizza