الـ Port Scanning بيشتغل إزاي؟
الـ TCP Three-Way Handshake، وحالات الـ port: open و closed و filtered، والفرق بين TCP و UDP، وتصنيف ردود الـ Scan بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
كل خدمة على الجهاز بتسمع على 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، ومش المفروض يبقى مفتوح للعالم.
# 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"]
الحل: نشغّل…
# 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)
- 01يعني إيه جمع معلومات (Recon)؟
- 02سلبي ولا نشط؟ والنطاق القانوني
- 03WHOIS: مين صاحب الـ Domain؟
- 04سجلات DNS: كنز المعلومات
- 05اكتشاف الـ Subdomains
- 06Certificate Transparency: الشهادات بتتكلم
- 07Google Dorking
- 08OSINT: الموظفين والإيميلات
- 09الـ Metadata: أسرار جُوّه الملفات
- 10اكتشاف الأجهزة الشغّالة (Host Discovery)
- 11الـ Port Scanning بيشتغل إزاي؟انت هنا
- 12Nmap: البداية
- 13أنواع الـ Scan والسرعة في Nmap
- 14كشف الخدمات والإصدارات ونظام التشغيل
- 15NSE Scripts وحفظ النتايج
- 16تعداد الويب: الـ Headers والتكنولوجيا
- 17الـ Directory Brute Force
- 18تعداد SMB
- 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
- 20تنظيم نتايج الـ Recon
- 21أتمتة الـ Recon بـ Python
- 22مراجعة شاملة وخطة Recon