
منصة اختبار مفتوحة تختبر خوادم HTTP/1.1 وفقًا لمتطلبات RFC 9110/9112، ونواقل التهريب، ومعالجة المدخلات غير الصالحة. أضف إطار عملك، واحصل على نتائج التوافق تلقائيًا.
Http11Probe هو أداة اختبار للامتثال والأمان لخوادم HTTP/1.1. تقوم بإرسال طلبات مشوّهة وغامضة ومفرطة الحجم إلى الخادم عبر مآخذ TCP خام وتتحقق من كيفية استجابته مقابل ما تتطلبه RFC 9110 و RFC 9112 فعليًا. هذه هي الحالات الصعبة مثل نهايات الأسطر بـ LF المجرد، وطي الأسطر المهجور، وتهريب الطلبات CL/TE، وحيل تأطير القطع (chunk-framing)، والترويسات المفرطة الحجم، وبايتات NUL، حيث يبدأ المحلل الصارم والمتسامح في الاختلاف.
تُشغَّل نفس الاختبارات الـ 215 ضد 42 خادمًا مرجعيًا مكتوبًا بـ 12 لغة، من 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
| العلم | الوصف | الافتراضي |
|---|---|---|
--host | اسم المضيف أو عنوان IP الهدف | localhost |
--port | رقم المنفذ الهدف | 8080 |
--category | تشغيل الاختبارات في هذه الفئة فقط (Compliance, Smuggling, MalformedInput, Normalization, Cookies, Capabilities) | الكل |
--test | تشغيل معرّفات اختبارات محددة فقط، غير حساس لحالة الأحرف (قابل للتكرار) | الكل |
--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 لديك يحتاج صلاحيات الجذر، أضف --docker-sudo حتى لا تضطر لتشغيل السكربت بالكامل بـ sudo:
scripts/probe-local.sh --server ActixServer --docker-sudo
| العلم | الوصف |
|---|---|
--server <Dir> | فحص خادم واحد باسم دليله تحت src/Servers/ (مثل NginxServer) |
--all | فحص كل خادم تحت src/Servers/*/probe.json |
--port <Port> | المنفذ الهدف (الافتراضي: 8080) |
--skip-build | تخطي dotnet build (يفترض وجود بناء Release بالفعل) |
--verbose | تمرير --verbose إلى CLI |
--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.