
Mallet एक इंटरसेप्टिंग प्रॉक्सी है जो किसी भी प्रोटोकॉल के लिए काम करती है।
Mallet एक टूल है जो मनमाने प्रोटोकॉल के लिए प्रॉक्सी बनाने के लिए है, जो परिचित इंटरसेप्टिंग वेब प्रॉक्सी के समान ही है, बस अधिक सामान्य है।
यह Netty फ्रेमवर्क पर बनाया गया है, और Netty पाइपलाइन अवधारणा पर बहुत अधिक निर्भर करता है, जो हैंडलर के ग्राफ के ग्राफिकल असेंबली की अनुमति देता है। (उदाहरण के लिए नीचे स्क्रीनशॉट देखें।) Netty की दुनिया में, हैंडलर इंस्टेंस फ्रेम डिलीमिटेशन (अर्थात संदेश कहाँ शुरू और समाप्त होता है), प्रोटोकॉल डिकोडिंग और एन्कोडिंग (बाइट्स की धारा को जावा ऑब्जेक्ट्स में बदलना, और वापस, या बाइट्स की धारा को एक अलग धारा में बदलना - संपीड़न और विघटन के बारे में सोचें), और उच्च स्तरीय तर्क (वास्तव में उन वस्तुओं के साथ कुछ करना) प्रदान करते हैं।
कोडेक्स को हैंडलर से सावधानीपूर्वक अलग करने के कारण जो वास्तव में संदेशों में हेरफेर करते हैं, Mallet मौजूदा कोडेक्स की बड़ी लाइब्रेरी से लाभ उठा सकता है, और कई प्रोटोकॉल के पुन: कार्यान्वयन से बच सकता है। पहेली का अंतिम टुकड़ा एक हैंडलर द्वारा प्रदान किया जाता है जो एक पाइपलाइन पर प्राप्त संदेशों को दूसरी पाइपलाइन पर कॉपी करता है, उन संदेशों को उनके अंतिम गंतव्य तक प्रॉक्सी करता है।
बेशक, जब संदेश Mallet के भीतर होते हैं, तो उन्हें आसानी से छेड़छाड़ की जा सकती है, या तो जावा या JSR-223 अनुपालन स्क्रिप्टिंग भाषा में लिखे कस्टम हैंडलर के साथ, या मैन्युअल रूप से, प्रदान किए गए संपादकों में से एक का उपयोग करके।
आप GitHub पर Netty स्रोत को देखकर, codec* निर्देशिकाओं के तहत उपलब्ध कोडेक्स का अंदाजा लगा सकते हैं। या बस netty और आपकी रुचि के प्रोटोकॉल के लिए गूगल करके। कई दिलचस्प प्रोटोकॉल कार्यान्वयन मुख्य Netty प्रोजेक्ट के बाहर विकसित किए गए हैं, लेकिन फिर भी Mallet के साथ अच्छी तरह से काम करने चाहिए।
Mallet का लक्ष्य उन लोगों के लिए है जो HTTP संचार पर आधारित नहीं नेटवर्क एप्लिकेशन के साथ काम कर रहे हैं। उदाहरण इंटरनेट ऑफ थिंग्स हो सकते हैं, जो MQTT, COAP आदि का उपयोग कर सकते हैं, एटीएम और पॉइंट ऑफ सेल डिवाइस जो ISO8583 का उपयोग कर सकते हैं, या सच कहूं तो कोई भी अन्य प्रोटोकॉल।
वास्तव में, Mallet HTTP-आधारित एप्लिकेशन के लिए भी उपयोगी हो सकता है, जो HTTP के भीतर अतिरिक्त प्रोटोकॉल का उपयोग करते हैं। उदाहरण के लिए, WebSockets पर Google Protobuf, जो मौजूदा HTTP प्रॉक्सी जैसे Burp, Zap आदि द्वारा अच्छी तरह से समर्थित नहीं हैं, या HTTP2 पर gRPC।
Mallet केवल सुरक्षा समीक्षाओं के लिए ही नहीं है। क्योंकि Mallet Netty Framework के ऊपर बनाया गया है, एक बार आपकी पाइपलाइन Mallet का उपयोग करके प्रोटोटाइप हो जाने के बाद, आप अपने कोड को बहुत कम प्रयास के साथ एक सादे Netty एप्लिकेशन में माइग्रेट कर सकते हैं।
यह एक सरल SOCKS प्रॉक्सी का उदाहरण है, जिसका उपयोग उस नेटवर्क ट्रैफिक को समझने के पहले कदम के रूप में किया जा सकता है जिसे आप देख रहे हैं।

एक बार जब आपको पता चल जाता है कि ट्रैफिक वास्तव में कैसा दिखता है, तो आप पाइपलाइन के साथ उपयुक्त ChannelHandler क्लासेस जोड़ना शुरू कर सकते हैं।
Mallet Maven का उपयोग करता है, इसलिए कोड को संकलित करना इस प्रकार है:
mvn package
इसे चलाने के लिए:
cd target/
java -jar mallet-1.0-SNAPSHOT-spring-boot.jar
examples/ निर्देशिका में कुछ नमूना ग्राफ प्रदान किए गए हैं। JSON ग्राफ एक JSON क्लाइंट से localhost:9998/tcp पर Mallet से कनेक्ट होने की उम्मीद करते हैं, जिसमें वास्तविक सर्वर localhost:9999/tcp पर है। केवल अंतिम JSON ग्राफ (json5.mxe) पारित किए जा रहे JSON संदेशों की संरचना के बारे में कोई धारणा बनाता है, इसलिए वे किसी भी ऐप के लिए लागू होने चाहिए जो JSON संदेश भेजता है।
demo.mxe एक जटिल ग्राफ दिखाता है, जिसमें दो पाइपलाइन हैं, दोनों TCP और UDP। TCP पाइपलाइन क्रमशः पोर्ट 80 और 443 पर HTTP और HTTPS का समर्थन करने के लिए बनाई गई है, साथ ही WebSockets, जबकि किसी भी अन्य ट्रैफिक को सीधे उसके गंतव्य तक रिले करती है। UDP पाइपलाइन localhost:1053/udp पर DNS अनुरोधों को संसाधित करने, google.com के लिए क्वेरी को www.sensepost.com के लिए क्वेरी से बदलने और अनुरोधों को Google DNS सर्वर पर अग्रेषित करने के लिए बनाई गई है।
प्रतिक्रिया और योगदान का स्वागत है। कृपया जहां उपयुक्त हो, issues बनाएं, या ट्विटर @RoganDawes पर लेखक से संपर्क करें।