
एक खुला परीक्षण प्लेटफ़ॉर्म जो HTTP/1.1 सर्वरों को RFC 9110/9112 आवश्यकताओं, स्मगलिंग वैक्टर और विकृत इनपुट प्रबंधन के विरुद्ध जाँचता है। अपना फ्रेमवर्क जोड़ें, स्वचालित रूप से अनुपालन परिणाम प्राप्त करें।
Http11Probe, HTTP/1.1 सर्वर के लिए एक अनुपालन और सुरक्षा परीक्षक है। यह कच्चे TCP सॉकेट्स पर सर्वर को विकृत, अस्पष्ट और अत्यधिक बड़े अनुरोध भेजता है और जाँचता है कि सर्वर उनका जवाब RFC 9110 और RFC 9112 की वास्तविक आवश्यकताओं के अनुसार कैसे देता है। ये वे मुश्किल मामले हैं जैसे बेयर LF लाइन एंडिंग, अप्रचलित लाइन फोल्डिंग, CL/TE रिक्वेस्ट स्मगलिंग, चंक-फ्रेमिंग ट्रिक्स, अत्यधिक बड़े हेडर, और NUL बाइट्स, जहाँ एक सख्त पार्सर और एक ढीला पार्सर असहमत होने लगते हैं।
वही 215 टेस्ट 12 भाषाओं में लिखे गए 42 संदर्भ सर्वरों के विरुद्ध चलाए जाते हैं, Nginx, Apache, और Envoy से लेकर Kestrel, Gin, Actix, और Node, Bun, और Deno में अंतर्निहित सर्वरों तक। प्रत्येक परिणाम को स्पेक में MUST/SHOULD/MAY शब्दावली के अनुसार स्कोर किया जाता है और Pass, Fail, या Warn के रूप में चिह्नित किया जाता है। Warn का मतलब बस यह है कि RFC सख्त और ढीले दोनों व्यवहार की अनुमति देता है, इसलिए कोई भी गलत नहीं है।
आपको पूरा दस्तावेज़ीकरण, RFC उद्धरणों के साथ प्रति-टेस्ट शब्दावली, और प्रत्येक सर्वर के लिए लाइव परिणाम मैट्रिक्स http-probe.com पर मिलेगा।
प्रोब टारगेट-अज्ञेयवादी है। यह उस HTTP/1.1 सर्वर का परीक्षण करता है जो पहले से --host:--port पर सुन रहा है, और फ्रेमवर्क चुनने के लिए कोई फ्लैग नहीं है। पहले सर्वर शुरू करें (या probe-local.sh को आपके लिए एक शुरू करने दें), फिर प्रोब को उस पर इंगित करें।
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
| Flag | विवरण | डिफ़ॉल्ट |
|---|---|---|
--host | लक्ष्य होस्टनाम या IP पता | localhost |
--port | लक्ष्य पोर्ट नंबर | 8080 |
--category | केवल इस श्रेणी में टेस्ट चलाएँ (Compliance, Smuggling, MalformedInput, Normalization, Cookies, Capabilities) | सभी |
--test | केवल विशिष्ट टेस्ट ID चलाएँ, केस-असंवेदनशील (दोहराने योग्य) | सभी |
--timeout | प्रति टेस्ट कनेक्ट और रीड टाइमआउट सेकंड में | 5 |
--output | JSON परिणाम फ़ाइल में लिखें | कोई नहीं |
--verbose, -v | प्रत्येक टेस्ट के लिए कच्ची सर्वर प्रतिक्रिया प्रिंट करें | बंद |
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080 --output results.json
विशिष्ट टेस्ट चलाएँ:
dotnet run --project src/Http11Probe.Cli -- --test SMUG-CL-TE-BOTH --test SMUG-DUPLICATE-CL
प्रत्येक टेस्ट पूरा होने पर परिणाम कंसोल पर स्ट्रीम होते हैं, अंत में सारांश के साथ:
Score: 97/97 19 warnings (146 tests, 35.5s)
प्रोब केवल अनुरोध भेजता है, यह सर्वर शुरू नहीं करता। src/Servers/ के अंतर्गत बंडल किए गए सर्वरों में से एक को प्रोब करने के लिए, scripts/probe-local.sh का उपयोग करें। यह वही करता है जो CI पाइपलाइन करती है: सर्वर की Docker इमेज बनाएँ, इसे --network host पर चलाएँ, इसके आने का इंतज़ार करें, इसे प्रोब करें, फिर इसे हटा दें।
# Probe one server by its directory name under src/Servers/, e.g. ActixServer
scripts/probe-local.sh --server ActixServer
# Probe every bundled server
scripts/probe-local.sh --all
--server मान डायरेक्टरी नाम (ActixServer) है, डिस्प्ले नाम (Actix) नहीं। यदि आपके Docker डेमॉन को root चाहिए, तो --docker-sudo जोड़ें ताकि आपको पूरी स्क्रिप्ट sudo के साथ न चलानी पड़े:
scripts/probe-local.sh --server ActixServer --docker-sudo
| Flag | विवरण |
|---|---|
--server <Dir> | src/Servers/ के अंतर्गत इसके डायरेक्टरी नाम से एक सर्वर को प्रोब करें (जैसे NginxServer) |
--all | src/Servers/*/probe.json के अंतर्गत प्रत्येक सर्वर को प्रोब करें |
--port <Port> | लक्ष्य पोर्ट (डिफ़ॉल्ट: 8080) |
--skip-build | dotnet build छोड़ें (मान लें कि Release बिल्ड पहले से मौजूद है) |
--verbose | CLI को --verbose पास करें |
--docker-sudo | Docker कमांड sudo के माध्यम से चलाएँ (आपको स्क्रिप्ट sudo के बिना चलाने देता है) |
-h, --help | सहायता दिखाएँ |
यह probe-<ServerDir>.json (प्रति सर्वर एक), साथ ही स्थानीय रेंडरिंग के लिए probe-data.js और docs/static/probe/data.js लिखता है। आपको jq, docker, curl, python3, और .NET 10 SDK की आवश्यकता होगी।
probe-local.sh बस एक सुविधा रैपर है। यदि आप इसे हाथ से करना पसंद करते हैं, जैसे कई प्रोब रनों में सर्वर को चालू रखने के लिए, तो कंटेनर को स्वयं बनाएँ और चलाएँ, फिर प्रोब को उस पर इंगित करें। इन्हें रेपो रूट से चलाएँ, क्योंकि वही Docker बिल्ड कॉन्टेक्स्ट है:
docker build -t probe-actix -f src/Servers/ActixServer/Dockerfile .
docker run -d --name probe-target --network host probe-actix
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 8080
docker rm -f probe-target
आप प्रोब को किसी भी HTTP/1.1 सर्वर पर भी इंगित कर सकते हैं जो पहले से चल रहा है:
dotnet run --project src/Http11Probe.Cli -- --host localhost --port 9000
.NET 10 SDK की आवश्यकता है।
dotnet build Http11Probe.slnx
Probe workflow पुल रिक्वेस्ट और workflow_dispatch पर चलता है। यह प्रत्येक सर्वर की Docker इमेज बनाता है, इसे प्रोब करता है, और PR टिप्पणी के रूप में एक तुलना तालिका पोस्ट करता है।