ماسح منافذ TCP، يرسل حزم SYN بشكل غير متزامن، لمسح الإنترنت بالكامل في أقل من 5 دقائق.
هذا ماسح منافذ على نطاق الإنترنت. يمكنه مسح الإنترنت بأكمله في أقل من 5 دقائق، بإرسال 10 ملايين حزمة في الثانية، من جهاز واحد.
طريقة استخدامه (المعاملات، المخرجات) تشبه nmap، أشهر ماسح منافذ.
في حالة الشك، جرب إحدى هذه الميزات – الميزات التي تدعم المسح الواسع
للعديد من الأجهزة مدعومة، بينما المسح المتعمق لجهاز واحد غير مدعوم.
داخليًا، يستخدم الإرسال غير المتزامن، المشابه لماسحات المنافذ مثل
scanrand وunicornscan وZMap. إنه أكثر مرونة، حيث يسمح
بنطاقات المنافذ والعناوين الاعتباطية.
ملاحظة: يستخدم masscan حزمة TCP/IP مخصصة خاصة به. أي شيء غير
مسح المنافذ البسيط قد يسبب تعارضًا مع حزمة TCP/IP المحلية. هذا يعني أنك
تحتاج إلى استخدام الخيار --src-ip للتشغيل من عنوان IP مختلف، أو
استخدام --src-port لتحديد منافذ المصدر التي يستخدمها masscan، ثم أيضًا
تكوين جدار الحماية الداخلي (مثل pf أو iptables) لعزل تلك المنافذ
عن باقي نظام التشغيل.
هذه الأداة مجانية، لكن فكر في المساهمة بمال لتطويرها: عنوان محفظة البيتكوين: 1MASSCANaHUiyTtR3bJ2sLGuMw5kDBaj4T
على Debian/Ubuntu، يكون الأمر كالتالي تقريبًا. لا يعتمد
على أي تبعيات أخرى غير مترجم C (مثل gcc
أو clang).
sudo apt-get --assume-yes install git make gcc
git clone https://github.com/robertdavidgraham/masscan
cd masscan
make
هذا يضع البرنامج في المجلد الفرعي masscan/bin.
لتثبيته (على Linux) شغّل:
make install
تتكون الشيفرة المصدرية من العديد من الملفات الصغيرة، لذا يصبح البناء أسرع بكثير
باستخدام البناء متعدد الخيوط. هذا يتطلب أكثر من 2 جيجابايت على
Raspberry Pi (وينهار)، لذا قد تستخدم رقمًا أصغر، مثل -j4 بدلاً من
جميع الخيوط الممكنة.
make -j
بينما Linux هو النظام الأساسي المستهدف الرئيسي، تعمل الشيفرة جيدًا على العديد من الأنظمة الأخرى (Windows وmacOS وما إلى ذلك). إليك بعض معلومات البناء الإضافية:
makemakegmakecc src/*.c -o bin/masscanعلى macOS، يبدو أن الثنائيات x86 تعمل بنفس السرعة تحت محاكاة ARM.
الاستخدام مشابه لـ nmap. لمسح قطاع شبكة لبعض المنافذ:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112
سيقوم هذا بـ:
10.x.x.x، والشبكات الفرعية 2603:3001:2d00:da00::x<stdout> التي يمكن توجيهها إلى ملفلرؤية القائمة الكاملة للخيارات، استخدم ميزة --echo. هذه
تقوم بإلقاء الإعدادات الحالية والخروج. يمكن استخدام هذا المخرج كمدخل مرة أخرى
للبرنامج:
# masscan -p80,8000-8100 10.0.0.0/8 2603:3001:2d00:da00::/112 --echo > xxx.conf
# masscan -c xxx.conf --rate 1000
يمكن لـ Masscan القيام بأكثر من مجرد اكتشاف ما إذا كانت المنافذ مفتوحة. يمكنه أيضًا إكمال اتصال TCP والتفاعل مع التطبيق على ذلك المنفذ لالتقاط معلومات "الشعار" البسيطة.
يدعم Masscan فحص الشعارات على البروتوكولات التالية:
المشكلة في ذلك هي أن masscan يحتوي على حزمة TCP/IP خاصة به منفصلة عن النظام الذي تقوم بتشغيله عليه. عندما يستقبل النظام المحلي SYN-ACK من الهدف المفحوص، فإنه يستجيب بحزمة RST تقتل الاتصال قبل أن يتمكن masscan من التقاط الشعار.
أسهل طريقة لمنع هذا هي تخصيص عنوان IP منفصل لـ masscan. سيبدو هذا مثل أحد الأمثلة التالية:
# masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200
# masscan 2a00:1450:4007:810::/112 -p80 --banners --source-ip 2603:3001:2d00:da00:91d7:b54:b498:859d
يجب أن يكون العنوان الذي تختاره على الشبكة الفرعية المحلية وألا يستخدم من قبل نظام آخر. سيحذرك Masscan أنك ارتكبت خطأ، لكن قد تكون أربكت اتصالات الجهاز الآخر لعدة دقائق، لذا كن حذرًا.
في بعض الحالات، مثل WiFi، هذا غير ممكن. في تلك الحالات، يمكنك عزل المنفذ الذي يستخدمه masscan عبر جدار الحماية. هذا يمنع حزمة TCP/IP المحلية من رؤية الحزمة، لكن masscan لا يزال يراها لأنه يتجاوز الحزمة المحلية. بالنسبة لـ Linux، سيبدو هذا كالتالي:
# iptables -A INPUT -p tcp --dport 61000 -j DROP
# masscan 10.0.0.0/8 -p80 --banners --source-port 61000
ربما تريد اختيار منافذ لا تتعارض مع المنافذ التي قد يختارها Linux للمنافذ المصدر. يمكنك رؤية النطاق الذي يستخدمه Linux، وإعادة تكوين ذلك النطاق، من خلال النظر في الملف:
/proc/sys/net/ipv4/ip_local_port_range
على أحدث إصدار من Kali Linux (أغسطس 2018)، هذا النطاق هو 32768 إلى 60999، لذا يجب عليك اختيار منافذ أقل من 32768 أو 61000 وما فوق.
إعداد قاعدة iptables يستمر فقط حتى إعادة التشغيل التالية. تحتاج إلى معرفة كيفية
حفظ الإعدادات حسب توزيعتك، مثل استخدام iptables-save
و/أو iptables-persistent.
على Mac OS X وBSD، توجد خطوات مشابهة. لمعرفة النطاقات التي يجب تجنبها، استخدم أمرًا مثل التالي:
# sysctl net.inet.ip.portrange.first net.inet.ip.portrange.last
على FreeBSD وMacOS الأقدم، استخدم أمر ipfw:
# sudo ipfw add 1 deny tcp from any to any 40000 in
# masscan 10.0.0.0/8 -p80 --banners --source-port 40000
على MacOS الأحدث وOpenBSD، استخدم أداة ترشيح الحزم pf.
قم بتحرير الملف /etc/pf.conf لإضافة سطر مثل التالي:
block in proto tcp from any to any port 40000:40015
ثم لتفعيل جدار الحماية، قم بتشغيل الأمر:
# pfctl -E
إذا كان جدار الحماية قيد التشغيل بالفعل، فإما أعد التشغيل أو أعد تحميل القواعد بالأمر التالي:
# pfctl -f /etc/pf.conf
Windows لا يستجيب بحزم RST، لذا ليست هناك حاجة لأي من هاتين التقنيتين. ومع ذلك، صمم masscan ليعمل بشكل أفضل باستخدام عنوان IP الخاص به، لذا يجب عليك تشغيله بهذه الطريقة عندما يكون ذلك ممكنًا، حتى عندما لا يكون ضروريًا بشكل صارم.
نفس الشيء مطلوب لفحوصات أخرى، مثل فحص --heartbleed،
الذي هو مجرد شكل من أشكال فحص الشعارات.
على الرغم من فائدته للشبكات الداخلية الأصغر، فإن البرنامج مصمم حقًا مع وضع الإنترنت بأكمله في الاعتبار. قد يبدو الأمر كما يلي:
# masscan 0.0.0.0/0 -p0-65535
مسح الإنترنت بأكمله أمر سيء. لأحد الأسباب، تتفاعل أجزاء من الإنترنت بشكل سيء مع المسح. لسبب آخر، تتتبع بعض المواقع عمليات المسح وتضيفك إلى قائمة الحظر، مما سيجعلك محظورًا من أجزاء مفيدة من الإنترنت. لذلك، تريد استبعاد الكثير من النطاقات. لاستبعاد النطاقات، تريد استخدام الصيغة التالية:
# masscan 0.0.0.0/0 -p0-65535 --excludefile exclude.txt
هذا يطبع النتائج فقط إلى سطر الأوامر. ربما تريدها محفوظة في ملف بدلاً من ذلك. لذلك، تريد شيئًا مثل:
# masscan 0.0.0.0/0 -p0-65535 -oX scan.xml
هذا يحفظ النتائج في ملف XML، مما يسمح لك بسهولة تفريغ النتائج في قاعدة بيانات أو شيء من هذا القبيل.
لكن، هذا يعمل فقط بمعدل 100 حزمة/ثانية الافتراضي، مما سيستغرق وقتًا طويلاً لمسح الإنترنت. تحتاج إلى تسريعه كما يلي:
# masscan 0.0.0.0/0 -p0-65535 --max-rate 100000
هذا يزيد المعدل إلى 100,000 حزمة/ثانية، مما سيمسح الإنترنت بأكمله (باستثناء المستبعدات) في حوالي 10 ساعات لكل منفذ (أو 655,360 ساعة إذا تم مسح جميع المنافذ).
الشيء الذي يجب ملاحظته حول سطر الأوامر هذا هو أن هذه كلها خيارات
متوافقة مع nmap. بالإضافة إلى ذلك، يتم تعيين خيارات "غير مرئية" متوافقة
مع nmap لك: -sS -Pn -n --randomize-hosts --send-eth. وبالمثل،
تنسيق ملف XML مستوحى من nmap. هناك، بالطبع، الكثير
من الاختلافات، لأن الطبيعة غير المتزامنة للبرنامج
تؤدي إلى نهج مختلف جوهريًا للمشكلة.
سطر الأوامر أعلاه مرهق بعض الشيء. بدلاً من وضع كل شيء في سطر الأوامر، يمكن تخزينه في ملف بدلاً من ذلك. الإعدادات أعلاه ستبدو كالتالي:
# الفحص الخاص بي
rate = 100000.00
output-format = xml
output-status = all
output-filename = scan.xml
ports = 0-65535
range = 0.0.0.0-255.255.255.255
excludefile = exclude.txt
لاستخدام ملف الإعدادات هذا، استخدم -c:
# masscan -c myscan.conf
هذا أيضًا يجعل الأمور أسهل عندما تكرر الفحص.