
🖖 ماسح شبكات سريع وحديث وسهل الاستخدام
sx هو ماسح شبكات يعمل عبر واجهة الأوامر، مصمم لاتباع فلسفة UNIX.
الهدف من هذا المشروع هو إنشاء أسرع ماسح شبكات مع كود نظيف وبسيط.
أبسط طريقة هي التحميل من إصدارات GitHub ووضع الملف القابل للتنفيذ في مسار PATH الخاص بك.
المتطلبات:
على macOS، قم بتثبيت أدوات سطر الأوامر Xcode أولاً حتى يتمكن CGO من الربط مع libpcap الخاص بالنظام:
xcode-select --install
من جذر شجرة المصدر، قم بتشغيل:
go build
فيما يلي أمثلة سريعة توضح كيف يمكنك مسح الشبكات باستخدام sx.
امسح شبكتك المحلية واعرض عنوان IP وعنوان MAC والشركة المصنعة للأجهزة المتصلة:
sx arp 192.168.0.1/24
مثال على الإخراج:
192.168.0.1 b0:be:76:40:05:8d TP-LINK TECHNOLOGIES CO.,LTD.
192.168.0.111 80:c5:f2:0b:02:e3 AzureWave Technology Inc.
192.168.0.171 88:53:95:2d:3c:af Apple, Inc.
مع مخرجات JSON:
sx arp --json 192.168.0.1/24
مثال على الإخراج:
{"ip":"192.168.0.1","mac":"b0:be:76:40:05:8d","vendor":"TP-LINK TECHNOLOGIES CO.,LTD."}
{"ip":"192.168.0.111","mac":"80:c5:f2:0b:02:e3","vendor":"AzureWave Technology Inc."}
{"ip":"192.168.0.171","mac":"88:53:95:2d:3c:af","vendor":"Apple, Inc."}
انتظر 5 ثوانٍ قبل الخروج لاستقبال حزم الرد المتأخرة، بشكل افتراضي ينتظر sx 300 مللي ثانية:
sx arp --exit-delay 5s 192.168.0.1/24
وضع المسح المباشر الذي يعيد مسح الشبكة كل 10 ثوانٍ:
sx arp 192.168.0.1/24 --live 10s
على عكس nmap والماسحات الضوئية الأخرى التي تقوم ضمنيًا بإجراء طلبات ARP لتحويل عناوين IP إلى عناوين MAC قبل المسح الفعلي، يستخدم sx مفهوم ذاكرة التخزين المؤقت ARP بشكل صريح. ملف ذاكرة التخزين المؤقت ARP هو ملف نصي بسيط يحتوي على سلسلة JSON في كل سطر (ملف JSONL)، والذي يحتوي على نفس حقول JSON مثل مخرجات مسح ARP الموضحة أعلاه. تقرأ مسوحات البروتوكولات الأعلى مستوى مثل TCP و UDP ملف ذاكرة التخزين المؤقت ARP من الإدخال القياسي ثم تبدأ المسح الفعلي.
هذا لا يبسط تصميم البرنامج فحسب، بل يسرع أيضًا عملية المسح، حيث ليس من الضروري إجراء مسح ARP في كل مرة.
لنفترض أن ذاكرة التخزين المؤقت ARP الفعلية موجودة في ملف arp.cache. يمكننا إنشاؤها يدويًا أو استخدام مسح ARP كما هو موضح أدناه:
sx arp 192.168.0.1/24 --json | tee arp.cache
بمجرد أن نحصل على ملف ذاكرة التخزين المؤقت ARP، يمكننا تشغيل مسوحات البروتوكولات الأعلى مستوى مثل مسح TCP SYN:
cat arp.cache | sx tcp -p 1-65535 192.168.0.171
مثال على الإخراج:
192.168.0.171 22
192.168.0.171 443
في هذه الحالة نكتشف أن المنفذين 22 و 443 مفتوحان.
إذا رأيت send: No buffer space available أثناء عمليات المسح الكبيرة، فهذا يعني عادةً أن المرسل يتجاوز مخازن النواة/raw-socket المؤقتة. الإصلاح الأول هو إضافة --rate وتقليل دفعة الإرسال، على سبيل المثال -r 100000/s أو أقل إذا لزم الأمر. على بعض الأنظمة، يمكن أن يساعد ضبط حدود مقبس/مخزن النظام المؤقت أيضًا، ولكن تحديد المعدل هو الإصلاح الأساسي.
مسح بمخرجات JSON:
cat arp.cache | sx tcp --json -p 1-65535 192.168.0.171
مثال على الإخراج:
{"scan":"tcpsyn","ip":"192.168.0.171","port":22}
{"scan":"tcpsyn","ip":"192.168.0.171","port":443}
مسح نطاقات منافذ متعددة:
cat arp.cache | sx tcp -p 1-23,25-443 192.168.0.171
أو منافذ فردية:
cat arp.cache | sx tcp -p 22,443 192.168.0.171
أو استخدم خيار --ports-file لتحديد ملف يحتوي على منافذ أو نطاقات منافذ لمسحها، سطر واحد لكل منها.
مسح أزواج ip/port من ملف بمخرجات JSON:
cat arp.cache | sx tcp --json -f ip_ports_file.jsonl
كل سطر من ملف الإدخال هو سلسلة JSON، يجب أن تحتوي على حقلي ip و port.
ملف إدخال مثال:
{"ip":"10.0.1.1","port":1080}
{"ip":"10.0.2.2","port":1081}
من الممكن تحديد ملف ذاكرة التخزين المؤقت ARP باستخدام الخيارين -a أو --arp-cache:
sx tcp -a arp.cache -p 22,443 192.168.0.171
أو إعادة توجيه الإدخال القياسي:
sx tcp -p 22,443 192.168.0.171 < arp.cache
يمكنك أيضًا استخدام الأمر الفرعي tcp syn بدلاً من tcp:
cat arp.cache | sx tcp syn -p 22 192.168.0.171
الأمر الفرعي tcp هو مجرد اختصار للأمر الفرعي tcp syn ما لم يتم تمرير خيار --flags، انظر أدناه.
يدعم sx المسح باستخدام واجهات الشبكة الافتراضية (wireguard, openvpn, إلخ) وفي هذه الحالة ليس من الضروري استخدام ذاكرة التخزين المؤقت ARP، لأن هذه الواجهات تتطلب حزم IP خام بدلاً من إطارات Ethernet كمدخل. على سبيل المثال، مسح عنوان IP على شبكة vpn:
sx tcp 10.1.27.1 -p 80 --json
تحاول معظم ماسحات الشبكة تفسير نتائج المسح. على سبيل المثال تقول "هذا المنفذ مغلق" بدلاً من "تلقيت RST". أحيانًا تكون على حق. وأحيانًا لا. هذا أسهل للمبتدئين، ولكن عندما تعرف ما تفعله، تستمر في محاولة استنتاج ما حدث بالفعل من تفسير البرنامج، خاصةً لتقنيات المسح الأكثر تقدمًا.
يحاول sx التغلب على هذه المشكلات. فهو يعيد معلومات حول جميع حزم الرد الخاصة بمسوحات TCP FIN و NULL و Xmas ومسوحات TCP المخصصة. تحتوي المعلومات على عنوان IP ومنفذ TCP وجميع أعلام TCP المضبوطة في حزمة الرد.
يستغل مسح TCP FIN وأشكاله الأخرى (NULL و Xmas) القسم 3.9 من RFC793:
وصول القطعة
إذا كانت الحالة CLOSED (أي TCB غير موجود) فإن
يتم التخلص من جميع البيانات في القطعة الواردة. يتم التخلص من القطعة الواردة التي تحتوي على RST. القطعة الواردة التي لا تحتوي على RST تتسبب في إرسال RST كرد. يتم اختيار قيم حقل الإقرار والتسلسل لجعل تسلسل إعادة التعيين مقبولاً لـ TCP الذي أرسل القطعة المخالفة.
لذا يجب أن يعيد المنفذ المغلق حزمة مع علامة RST.
ينص هذا القسم أيضًا على:
إذا كانت الحالة LISTEN فإن
...
أي قطعة تحكم أو تحمل نصًا أخرى (لا تحتوي على SYN) يجب أن تحتوي على ACK وبالتالي سيتم تجاهلها بواسطة معالجة ACK. لا يمكن أن تكون قطعة RST الواردة صالحة، حيث لا يمكن إرسالها ردًا على أي شيء أرسله هذا التجسيد للاتصال. لذا من غير المحتمل أن تصل إلى هنا، ولكن إذا وصلت، فقم بإسقاط القطعة، ثم ارجع.