الـ Port Scanning بيشتغل إزاي؟

جارٍ التحميل…

01 / ملخص الدرس

الـ Port Scanning بيشتغل إزاي؟

الـ TCP Three-Way Handshake، وحالات الـ port: open و closed و filtered، والفرق بين TCP و UDP، وتصنيف ردود الـ Scan بـ Python.

02 / شرح الدرس مكتوبًا

نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.

كل خدمة على الجهاز بتسمع على port: الويب على eighty، و SSH على twenty two، وهكذا. الـ Port Scan هو إنك تخبّط على كل باب، وتشوف مين بيفتح.

علشان تفهم الـ Scan، لازم تفهم الـ TCP Three Way Handshake: إنت بتبعت SYN، يعني عايز أتكلم. الجهاز يرد SYN ACK، يعني ماشي. وإنت ترد ACK، والاتصال يتفتح.

ومن الرد ده، بنعرف حالة الـ port: لو رد SYN ACK، يبقى open، فيه خدمة شغّالة. لو رد RST، يبقى closed، الجهاز شغّال بس مفيش خدمة. ولو ما ردّش خالص، يبقى filtered، غالباً firewall بيرمي الـ packet.

وفيه نوعين: TCP و UDP. الـ UDP مفيهوش handshake، فالـ Scan بتاعه أبطأ وأصعب. بس خدمات مهمة شغّالة عليه، زي DNS على fifty three، و SNMP على one sixty one. وفيه خمسة وستين ألف port تقريباً، بس أشهر ألف port فيهم أغلب الخدمات. هنا عندنا الردود اللي جت من جهاز لما بعتنا SYN على خمس ports. function اسمها state بتحوّل الرد لحالة: open أو closed أو filtered. نشغّل… twenty two و eighty و three three zero six مفتوحين. four forty three closed، و four forty five filtered. وبالمناسبة، three three zero six ده MySQL، ومش المفروض يبقى مفتوح للعالم.

main.py
# What 10.10.10.5 answers when we send a SYN to each port (lab data)
replies = {22: "SYN-ACK", 80: "SYN-ACK", 443: "RST", 445: None, 3306: "SYN-ACK"}

def state(reply):
    if reply == "SYN-ACK":
        return "open"
    if reply == "RST":
        return "closed"
    return "filtered"

for port, reply in replies.items():
    print(f"{port:>5}/tcp  {state(reply):9} (reply: {reply})")

المخرجات

22/tcp  open      (reply: SYN-ACK)
   80/tcp  open      (reply: SYN-ACK)
  443/tcp  closed    (reply: RST)
  445/tcp  filtered  (reply: None)
 3306/tcp  open      (reply: SYN-ACK)

دورك: اعمل list بالـ ports المفتوحة بس، باستخدام list comprehension، واطبعها.

تمرين

open_ports = [p for p, r in replies.items() if state(r) == "open"]

الحل: نشغّل…

main.py
# What 10.10.10.5 answers when we send a SYN to each port (lab data)
replies = {22: "SYN-ACK", 80: "SYN-ACK", 443: "RST", 445: None, 3306: "SYN-ACK"}

def state(reply):
    if reply == "SYN-ACK":
        return "open"
    if reply == "RST":
        return "closed"
    return "filtered"

for port, reply in replies.items():
    print(f"{port:>5}/tcp  {state(reply):9} (reply: {reply})")

open_ports = [p for p, r in replies.items() if state(r) == "open"]
print("open:", open_ports)

المخرجات

22/tcp  open      (reply: SYN-ACK)
   80/tcp  open      (reply: SYN-ACK)
  443/tcp  closed    (reply: RST)
  445/tcp  filtered  (reply: None)
 3306/tcp  open      (reply: SYN-ACK)
open: [22, 80, 3306]

الدرس الجاي: أهم أداة في الكورس كله، Nmap. يلا بينا.

03 / دروس المسار (22)
  1. 01يعني إيه جمع معلومات (Recon)؟
  2. 02سلبي ولا نشط؟ والنطاق القانوني
  3. 03WHOIS: مين صاحب الـ Domain؟
  4. 04سجلات DNS: كنز المعلومات
  5. 05اكتشاف الـ Subdomains
  6. 06Certificate Transparency: الشهادات بتتكلم
  7. 07Google Dorking
  8. 08OSINT: الموظفين والإيميلات
  9. 09الـ Metadata: أسرار جُوّه الملفات
  10. 10اكتشاف الأجهزة الشغّالة (Host Discovery)
  11. 11الـ Port Scanning بيشتغل إزاي؟انت هنا
  12. 12Nmap: البداية
  13. 13أنواع الـ Scan والسرعة في Nmap
  14. 14كشف الخدمات والإصدارات ونظام التشغيل
  15. 15NSE Scripts وحفظ النتايج
  16. 16تعداد الويب: الـ Headers والتكنولوجيا
  17. 17الـ Directory Brute Force
  18. 18تعداد SMB
  19. 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
  20. 20تنظيم نتايج الـ Recon
  21. 21أتمتة الـ Recon بـ Python
  22. 22مراجعة شاملة وخطة Recon