HTTP Breakout Proxy
Go में लिखा गया एक हल्का HTTP/HTTPS इंटरसेप्टिंग प्रॉक्सी और ट्रैफ़िक विश्लेषण उपकरण है, जिसमें वेब-आधारित UI है जो लाइव कैप्चर किए गए ट्रैफ़िक का निरीक्षण, फ़िल्टरिंग, रंगीनकरण और एनोटेशन करने की अनुमति देता है।


अवलोकन
HTTP Breakout Proxy एक HTTP और HTTPS MITM प्रॉक्सी और एक लाइव विज़ुअलाइज़ेशन टूल दोनों के रूप में कार्य करता है।
यह दो सॉफ़्टवेयर घटकों के बीच अनुरोधों और प्रतिक्रियाओं को कैप्चर करता है, जिससे डेवलपर्स निम्नलिखित कार्य कर सकते हैं:
- प्रत्येक अनुरोध और प्रतिक्रिया के लिए हेडर, बॉडी और समय विवरण का निरीक्षण करें।
- कैप्चर किए गए डेटा को व्यवस्थित, फ़िल्टर और स्थायी रूप से संग्रहीत करें।
- उपयोगकर्ता-परिभाषित रंग नियमों के आधार पर अनुरोधों को हाइलाइट करें।
- कैप्चर को गतिशील रूप से रोकें या फिर से शुरू करें।
- प्रदर्शन चरणों की कल्पना करने के लिए Gantt चार्ट के रूप में अनुरोध समय देखें।
प्रॉक्सी में एक पूर्ण-विशेषताओं वाला UI एम्बेडेड है जो किसी भी आधुनिक वेब ब्राउज़र से सुलभ है, बाहरी उपकरणों के बिना तत्काल, वास्तविक समय विश्लेषण सक्षम करता है।
विशेषताएँ
🔍 कैप्चर और निरीक्षण
- HTTP और HTTPS दोनों ट्रैफ़िक को इंटरसेप्ट करता है (MITM CA समर्थन के साथ)।
- सभी अनुरोध और प्रतिक्रिया मेटाडेटा, हेडर और बॉडी प्रदर्शित करता है।
- बहुत बड़ी बॉडी के लिए ट्रंकेशन का समर्थन करता है।
💾 स्थायित्व
- कैप्चर और रंग नियम
captures.json (या निर्दिष्ट फ़ाइल) में संग्रहीत होते हैं।
- स्टार्टअप पर स्वचालित रूप से स्थिति पुनः लोड करता है और समय-समय पर डिस्क पर सहेजता है।
- यदि कोई मौजूद नहीं है तो पहले रन पर डिफ़ॉल्ट रंग नियम उत्पन्न होते हैं।
🖥️ वेब UI
- उत्तरदायी एम्बेडेड वेब इंटरफ़ेस (प्रॉक्सी द्वारा स्वयं प्रस्तुत)।
- कैप्चर को रंग-कोडित संकेतकों के साथ स्क्रॉल करने योग्य सूची में प्रदर्शित करता है।
- विवरण पैनल दिखाता है:
- अनुरोध और प्रतिक्रिया हेडर/बॉडी
- समय विवरण
- संपादन योग्य नोट्स
- कनेक्शन चरणों के लिए Gantt-शैली प्रदर्शन चार्ट
🎨 रंग नियम
- लचीली फ़िल्टर सिंटैक्स का उपयोग करके कैप्चर के लिए सशर्त रंग हाइलाइट परिभाषित करें:
- उदाहरण:
status:4 status:5 → HTTP त्रुटियों को हाइलाइट करता है
- उदाहरण:
url:/api/ → API अनुरोधों को हाइलाइट करता है
- उदाहरण:
/\.css$/ → URL पर regex मिलान
- प्रत्येक नियम में शामिल है:
- नाम, रंग, मिलान अभिव्यक्ति, प्राथमिकता और नोट
- सबसे अधिक प्राथमिकता वाला मिलान जीतता है।
- लाइव पूर्वावलोकन के साथ मॉडल UI के माध्यम से इंटरैक्टिव रूप से प्रबंधित।
- सत्रों में स्थायी।
⏸️ कैप्चर नियंत्रण
- Pause/Resume बटन आपको प्रॉक्सी को रोके बिना नए कैप्चर एकत्र करना बंद करने की अनुमति देता है।
- एक निश्चित डेटासेट पर ध्यान केंद्रित करने या विशिष्ट व्यवहार को अलग करने के लिए उपयोगी।
📈 प्रदर्शन विज़ुअलाइज़ेशन
- प्रत्येक कैप्चर में विस्तृत कनेक्शन समय शामिल है:
- DNS लुकअप
- TCP कनेक्ट
- TLS हैंडशेक
- सर्वर प्रोसेसिंग
- प्रतिक्रिया पढ़ना
- विवरण पैनल में Gantt चार्ट के रूप में प्रदर्शित।
- स्केल पठनीयता के लिए स्वचालित रूप से निकटतम सेकंड में गोल होता है।
🧭 फ़िल्टरिंग और खोज
- रीयल-टाइम फ़िल्टर बॉक्स समर्थन करता है:
- फ़ील्ड-आधारित फ़िल्टर (
method:GET, status:404, header:Content-Type=application/json)
- रेगेक्स अभिव्यक्तियाँ (
/login/)
- AND/OR सिमेंटिक्स के साथ संयुक्त शब्द
- केस-असंवेदनशील और आंशिक मिलान समर्थित।
- फ़िल्टर कैप्चर सूची और रंग हाइलाइटिंग दोनों पर लागू होता है।
- खोज इतिहास ब्राउज़र में स्थानीय रूप से संग्रहीत होता है।
🧹 प्रबंधन
- UI के माध्यम से व्यक्तिगत कैप्चर हटाएं या सभी कैप्चर साफ़ करें।
- नियम और नोट कैप्चर के साथ स्थायी रहते हैं।
🧩 निर्यात उपयोगिताएँ
- एक कैप्चर को कॉपी करें इस प्रकार:
curl कमांड (टर्मिनल के लिए स्वरूपित)
python requests कोड स्निपेट (स्वच्छ JSON प्रस्तुति)
- UI से सीधे प्रतिक्रिया बॉडी डाउनलोड करें।
कमांड लाइन उपयोग
httpbreakout -l 127.0.0.1:8080
त्वरित प्रारंभ
बिल्ड (स्रोत से)
git clone https://github.com/jbsouthe/http-breakout-proxy.git
cd http-breakout-proxy
go build -o http-breakout-proxy
यह एक एकल निष्पादन योग्य बनाता है जिसमें संकलित प्रॉक्सी और एम्बेडेड UI संपत्तियाँ शामिल हैं।
रन (डिफ़ॉल्ट)
# डिफ़ॉल्ट के साथ चलाएँ (प्रॉक्सी + UI)
./http-breakout-proxy
डिफ़ॉल्ट रूप से बाइनरी प्रॉक्सी के लिए 127.0.0.1:8080 पर बाइंड होती है (और वैकल्पिक रूप से UI — CLI फ़्लैग देखें)। कैप्चर का निरीक्षण करने के लिए ब्राउज़र में UI खोलें।
उदाहरण: curl के साथ प्रॉक्सी का परीक्षण
# प्रॉक्सी के माध्यम से एक HTTPS अनुरोध भेजें (प्रॉक्सी 127.0.0.1:8080 पर सुनता है)
curl -x http://127.0.0.1:8080 https://example.com
कैप्चर किया गया ट्रैफ़िक वेब UI में दिखाई देगा।
कमांड-लाइन आर्गुमेंट
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|
-l | 127.0.0.1:8080 | प्रॉक्सी के सुनने का पता और साथ ही UI ऐप। |
-mitm | true | HTTPS मैन इन द मिडल मोड (MITM) इंटरसेप्शन सक्षम करें (TLS को इंटरसेप्ट करने के लिए एक स्थानीय CA जनरेट करता है)। |
-ca | ./ca | वह निर्देशिका जिसमें जनरेट किया गया CA प्रमाणपत्र और कुंजी संग्रहीत की जाती है जब MITM सक्षम हो और स्थायित्व चुना गया हो। |
-f | ./captures.json | कैप्चर को डिस्क पर स्थायी रूप से संग्रहीत करने के लिए वैकल्पिक पथ या निर्देशिका (जैसे ./captures.json). |
-max-body | 1048576 | प्रति बॉडी संग्रहीत/प्रदर्शित करने के लिए अधिकतम बाइट्स; बड़ी बॉडी को एक संतरी के साथ छोटा किया जाता है। |
-buffer-size | 1000 | मेमोरी में कैप्चर के लिए सर्कुलर बफर क्षमता। |
-v | false | डिबगिंग के लिए वर्बोज़ लॉगिंग सक्षम करें। |
उपलब्ध फ़्लैग और उपयोग विवरण सूचीबद्ध करने के लिए ./http-breakout-proxy -h का उपयोग करें।
वेब UI अवलोकन
UI जांच कार्यप्रवाहों के लिए अनुकूलित है।
- शीर्ष टूलबार: वैश्विक फ़िल्टर इनपुट (regex और कुंजीयुक्त उपसर्गों का समर्थन करता है), कैप्चर को रोकें/फिर से शुरू करें, साफ़ करें, और फ़िल्टर सहायता (एक नए टैब में खुलता है)।
- बायाँ पैनल: कालानुक्रमिक कैप्चर सूची (नवीनतम पहले)। प्रत्येक आइटम कैप्चर का नाम दिखाता है; डिफ़ॉल्ट रूप से यह
METHOD URL [STATUS] है लेकिन एक कस्टम नाम निर्दिष्ट किया जा सकता है।
- दायाँ पैनल: चयनित कैप्चर के लिए विवरण:
- अवलोकन: मेटाडेटा, हेडर और बॉडी (जहाँ लागू हो स्वरूपित JSON)।
- अनुरोध / प्रतिक्रिया टैब: कच्ची स्वरूपित बॉडी।
- कच्चा टैब: पूर्ण कैप्चर JSON।
- पंक्ति क्रियाएँ: कॉपी करें
curl के रूप में, कॉपी करें Python requests के रूप में, प्रतिक्रिया बॉडी डाउनलोड करें, नाम बदलें, हटाएँ।
फ़िल्टर भाषा (संक्षिप्त संदर्भ)
- सादा टोकन: कहीं भी मेल खाता है (विधि, URL, स्थिति, होस्ट, हेडर, बॉडी)।
- उपसर्ग:
method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:।
- Regex सिंटैक्स:
/pattern/flags (उदाहरण /bearer\\s+\\S+/i)।
- हेडर विशिष्टता:
header:name=value जहाँ name या value regex हो सकते हैं।
- शब्द डिफ़ॉल्ट रूप से तार्किक AND के साथ संयुक्त होते हैं (स्थान द्वारा अलग)। यदि वांछित हो तो OR पर स्विच करें (क्लाइंट लॉजिक बदलकर)।
उदाहरण:
method:POST status:2 host:api.example.com
/token\\s*[:=]\\s*\\S+/i
req.header:authorization=/bearer/i
body:/\\"success\\"\\s*:\\s*true/i
HTTPS इंटरसेप्शन (MITM)
जब मैन इन द मिडल मोड सक्षम हो: