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


HTTP Breakout Proxy एक HTTP और HTTPS MITM प्रॉक्सी और एक लाइव विज़ुअलाइज़ेशन टूल दोनों के रूप में कार्य करता है।
यह दो सॉफ़्टवेयर घटकों के बीच अनुरोधों और प्रतिक्रियाओं को कैप्चर करता है, जिससे डेवलपर्स निम्नलिखित कार्य कर सकते हैं:
प्रॉक्सी में एक पूर्ण-विशेषताओं वाला UI एम्बेडेड है जो किसी भी आधुनिक वेब ब्राउज़र से सुलभ है, बाहरी उपकरणों के बिना तत्काल, वास्तविक समय विश्लेषण सक्षम करता है।
captures.json (या निर्दिष्ट फ़ाइल) में संग्रहीत होते हैं।status:4 status:5 → HTTP त्रुटियों को हाइलाइट करता हैurl:/api/ → API अनुरोधों को हाइलाइट करता है/\.css$/ → URL पर regex मिलानmethod:GET, status:404, header:Content-Type=application/json)/login/)curl कमांड (टर्मिनल के लिए स्वरूपित)python requests कोड स्निपेट (स्वच्छ JSON प्रस्तुति)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 खोलें।
# प्रॉक्सी के माध्यम से एक 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 जांच कार्यप्रवाहों के लिए अनुकूलित है।
METHOD URL [STATUS] है लेकिन एक कस्टम नाम निर्दिष्ट किया जा सकता है।curl के रूप में, कॉपी करें Python requests के रूप में, प्रतिक्रिया बॉडी डाउनलोड करें, नाम बदलें, हटाएँ।method:, status:, host:, url:, body:, req.body:, resp.body:, header:, req.header:, resp.header:।/pattern/flags (उदाहरण /bearer\\s+\\S+/i)।header:name=value जहाँ name या value regex हो सकते हैं।उदाहरण:
method:POST status:2 host:api.example.com/token\\s*[:=]\\s*\\S+/ireq.header:authorization=/bearer/ibody:/\\"success\\"\\s*:\\s*true/iजब मैन इन द मिडल मोड सक्षम हो:
-ca (डिफ़ॉल्ट ./ca) में संग्रहीत करता है।ca.pem या समान) को अनुरोध जारी करने वाले क्लाइंट (या सिस्टम) की ट्रस्ट स्टोर में जोड़ना होगा। कई प्लेटफ़ॉर्म पर इसके लिए प्रशासनिक विशेषाधिकारों की आवश्यकता होती है।सुरक्षा नोट: केवल नियंत्रित वातावरण में CA स्थापित करें। उन प्रणालियों में इस CA पर भरोसा न करें जहाँ आप असंबंधित संवेदनशील ट्रैफ़िक पढ़ते हैं।
यदि स्थायित्व सक्षम है (-f या कॉन्फ़िगर किए गए पथ के माध्यम से):
captures.json)।कैप्चर किए गए आइटम JSON में क्रमबद्ध होते हैं और इनमें निम्नलिखित फ़ील्ड शामिल होते हैं (अनन्य नहीं):
id — अद्वितीय अनुक्रम पहचानकर्ताtime — टाइमस्टैम्प (ISO 8601)method, urlrequest_headers, response_headersrequest_body, response_body — यदि आवश्यक हो तो -max-body तक छोटा किया गयाresponse_status, duration_msname — वैकल्पिक उपयोगकर्ता लेबलnotes, deleted — SSE घटनाओं और UI स्थिति के लिए नियंत्रण मेटाडेटाcurl कमांड बनाता है (हॉप-बाय-हॉप हेडर छोड़ता है)।url, headers, और वैकल्पिक data के साथ एक छोटा requests स्निपेट उत्पन्न करता है।Content-Type से एक्सटेंशन का अनुमान लगाया जाता है।डिज़ाइन संबंधी विचार:
Host, Content-Length, Connection) उत्पन्न रीप्ले कमांड से छोड़े जाते हैं।GET /api/captures — कैप्चर सूचीबद्ध करें (JSON सरणी)।DELETE /api/captures — सभी कैप्चर साफ़ करें।GET /api/captures/{id} — एकल कैप्चर पुनर्प्राप्त करें।DELETE /api/captures/{id} — विशिष्ट कैप्चर हटाएँ।PATCH /api/captures/{id} — कैप्चर मेटाडेटा अपडेट करें; बॉडी उदाहरण: { "name": "My label" }।GET /api/pause — { "paused": true|false } लौटाता है।POST /api/pause — रुकी हुई स्थिति सेट करें; बॉडी उदाहरण: { "paused": true }।GET /events — लाइव कैप्चर सूचनाओं और नियंत्रण घटनाओं के लिए सर्वर-सेंट इवेंट्स (SSE) स्ट्रीम।//go:embed ui/* और fs.Sub का उपयोग करें। यह एक एकल तैनात करने योग्य आर्टिफैक्ट बनाता है।Content-Encoding की जाँच करता है और प्रदर्शन से पहले gzip और deflate बॉडी को डीकम्प्रेस करने का प्रयास करता है। मूल बाइट्स प्रॉक्सी पारदर्शिता के लिए बनाए रखे जाते हैं।io.LimitReader का उपयोग करके पढ़ा जाता है।अनुशंसित वितरण मॉडल:
CGO_ENABLED=0, -trimpath, -ldflags "-s -w")।.tar.gz, Windows के लिए .zip) और README.md और LICENSE शामिल करें।goreleaser का उपयोग करें।बिल्ड कमांड उदाहरण:
# Linux x86_64
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-linux-amd64 .
# macOS (arm64)
GOOS=darwin GOARCH=arm64 CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o dist/http-breakout-proxy-darwin-arm64 .
[Unit]
Description=HTTP Breakout Proxy
After=network.target
[Service]
ExecStart=/opt/http-breakout-proxy/http-breakout-proxy -l 0.0.0.0:8080
Restart=on-failure
User=proxy
Group=proxy
[Install]
WantedBy=multi-user.target
~/Library/LaunchAgents में एक plist बनाएँ और launchctl के साथ लोड करें।
कैप्चर की गई बॉडी बाइनरी बकवास के रूप में दिखाई देती है
बॉडी संपीड़ित है (जैसे, gzip)। सुनिश्चित करें कि आप एक ऐसा बिल्ड चला रहे हैं जिसमें स्वचालित डीकम्प्रेशन शामिल है; UI उपलब्ध होने पर डीकम्प्रेस्ड JSON/टेक्स्ट दिखाता है।
HTTPS ट्रैफ़िक प्रदर्शित नहीं होता / कनेक्शन त्रुटियाँ
क्लाइंट उत्पन्न CA पर भरोसा नहीं करता है। ca/ca.pem को क्लाइंट/सिस्टम ट्रस्ट स्टोर में स्थापित करें और TLS इंटरसेप्शन के लिए विश्वसनीय के रूप में चिह्नित करें।
कैप्चर साफ़ करने के बाद UI पुराना चयन दिखाता है
एक क्लाइंट में अपग्रेड करें जो cleared SSE घटनाओं पर selectedId साफ़ करता है या स्थिति को ताज़ा करने के लिए GET /api/captures एंडपॉइंट का आह्वान करें।
DELETE /api/captures पर 405
सुनिश्चित करें कि सर्वर हैंडलर /api/captures के लिए DELETE स्वीकार करता है और आप ट्रेलिंग-स्लैश बेमेल से नहीं टकरा रहे हैं।
यह उपकरण TLS इंटरसेप्शन करता है जब MITM सक्षम हो। इसका उपयोग केवल नियंत्रित वातावरण में करें जहाँ आपके पास ट्रैफ़िक का निरीक्षण करने का स्पष्ट प्राधिकरण हो। उत्पन्न CA शक्तिशाली है: इसकी निजी कुंजी को किसी भी अन्य रूट CA निजी कुंजी के समान गोपनीयता के साथ व्यवहार करें। CA को साझा या उत्पादन ट्रस्ट स्टोर में स्थापित न करें।
योगदान का स्वागत है। बग या फीचर अनुरोधों के लिए कृपया issues खोलें। कोड योगदान के लिए:
यह प्रोजेक्ट MIT लाइसेंस के तहत वितरित किया गया है। विवरण के लिए LICENSE देखें।
लेखक: John Southerland (GitHub: jbsouthe)
प्रोजेक्ट: http-breakout-proxy — HTTP व्यवहार के बारे में डिबगिंग, विकास और सीखने के लिए अभिप्रेत है।