سكربت بايثون لرؤية البورتات المفتوحة والمغلقة

x32x01
  • بواسطة x32x01 ||

برمجة سكربت بايثون لرؤية البورتات المفتوحة والمغلقة في موقع 🎯

هنتعلم دلوقتي إزاي نعمل سكربت بسيط ببايثون يفتح ويجرّب اتصالات على بورتات في جهاز/راوتر/سيرفر عشان يشوف البورتات المفتوحة والـ مغلقة.

إيه اللي محتاجه قبل ما تبدأ؟ 🛠️

  • بايثون 3 منصّب على جهازك.
  • فهم أساسي لمكتبة socket.
  • صلاحية تشغيل (لو هتجرب بورتات محمية أو فحوص متقدمة ممكن تحتاج sudo).
  • وما تنساش: افتح الفحص بس على أجهزة عندك أو عندك إذن بالفحص - أي استخدام تاني ممكن يوقعك في مشاكل قانونية.

السكربت الأساسي - نسخة بسيطة وواضحة ✅

Python:
#!/usr/bin/env python3
# simple_port_scanner.py
# استخدام: python3 simple_port_scanner.py

import socket

def scan_ports(host, start=1, end=2000, timeout=1):
    print(f"Scanning {host} from port {start} to {end} (timeout={timeout}s)...\n")
    open_ports = []
    for port in range(start, end + 1):
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.settimeout(timeout)
        try:
            result = s.connect_ex((host, port))
            if result == 0:
                print(f"[+] Port {port} is OPEN")
                open_ports.append(port)
            # لو عايز تعرض البورتات المغلقة أرسل else وطبع رسالة
        except KeyboardInterrupt:
            print("\n[!] Scan cancelled by user.")
            break
        except Exception as e:
            # نتجاهل أخطاء مؤقتة عشان الفحص يكمل
            pass
        finally:
            s.close()
    print("\nScan finished.")
    if open_ports:
        print("Open ports:", ', '.join(map(str, open_ports)))
    else:
        print("No open ports found in the scanned range.")

if __name__ == "__main__":
    target = input("Enter target IP or hostname: ").strip()
    if not target:
        print("No target provided. Exiting.")
    else:
        # ممكن تخلي المستخدم يدخل نطاق بورتات أو يسيبه افتراضي
        scan_ports(target, start=1, end=2000, timeout=1)

شرح الكود خطوة بخطوة 🔍

  • import socket - بنستخدم socket لفتح اتصالات TCP.
  • scan_ports(host, start, end, timeout) - دالة بتجرّب كل بورت من start لـ end.
  • داخل اللوب بنفتح socket جديد لكل بورت ونستخدم connect_ex علشان ما يرمزش exception على حاولات الفشل.
    • connect_ex بيرجع 0 لما الاتصال نجح - معناه البورت مفتوح.
  • بنستعمل settimeout علشان ما نستناش كتير على بورت مش موجود.
  • دايماً بنقفل السوكيت في finally عشان مايتراكموش موارد مفتوحة.

نسخة أسرع بالـ threading - لو عايز تسد الوقت ⏱️

لو هتفحص آلاف البورتات أو شبكة كبيرة، يفضل تستخدم خيوط (threads) لتوازي الفحص. خلي بالك من عدد الخيوط عشان متشغّلش جهازك أو الشبكة.
Python:
# threaded_port_scanner.py (مقتطف)
import socket
import threading

def worker(host, port, timeout, results):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(timeout)
    try:
        if s.connect_ex((host, port)) == 0:
            results.append(port)
    except:
        pass
    finally:
        s.close()

def threaded_scan(host, start=1, end=2000, timeout=1, max_threads=100):
    threads = []
    results = []
    for port in range(start, end + 1):
        t = threading.Thread(target=worker, args=(host, port, timeout, results))
        threads.append(t)
        t.start()
        # تحكم بسيط بعدد الخيوط
        while threading.active_count() > max_threads:
            pass
    for t in threads:
        t.join()
    return sorted(results)
ملحوظة: متنساش تقلل max_threads لو الجهاز أو الشبكة ضعيفة. ومتنساش إن عدد كبير جدًا من الاتصالات ممكن يبان كـ هجوم على جدران الحماية.

نصايح عملية وتحسينات ممكن تضيفها 🔧

  • خلي الواجهة تقبل نطاق بورتات أو قائمة بورتات محددة.
  • احفظ النتايج في CSV أو JSON للرجوع لها بعدين.
  • اضف كشف الخدمة بواسطة محاولة قراءة الـ banner لو البورت مفتوح (بعض الخدمات بتبعت سطر ترحيبي).
  • لو عايز تدي أولوية للفحص: ابدأ بالبورتات الشائعة (80, 443, 22, 21, 3306...) عشان تلاقي النتايج المهمة أسرع.
  • لو هتعمل فحص UDP استخدم أدوات متخصصة؛ socket UDP مختلف ومتعذر.

  • السكربت البسيط مفيد للتعلم ولمعرفة البورتات المفتوحة في جهازك أو الراوتر أو سيرفر عندك إذن اختباره.
  • لو عايز سرعة أكبر استخدم نسخة متعددة الخيوط، لكن خلي بالك من التأثير على الشبكة.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
580
x32x01
x32x01
x32x01
الردود
0
المشاهدات
256
x32x01
x32x01
x32x01
الردود
1
المشاهدات
533
x32x01
x32x01
x32x01
الردود
0
المشاهدات
545
x32x01
x32x01
x32x01
الردود
0
المشاهدات
378
x32x01
x32x01
x32x01
الردود
0
المشاهدات
569
x32x01
x32x01
x32x01
الردود
0
المشاهدات
685
x32x01
x32x01
x32x01
الردود
0
المشاهدات
264
x32x01
x32x01
x32x01
الردود
0
المشاهدات
582
x32x01
x32x01
x32x01
الردود
0
المشاهدات
594
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,836
المشاركات
2,051
أعضاء أكتب كود
459
أخر عضو
messawyy
عودة
أعلى