اصنع أداة Nmap بسيطة ببايثون خطوة بخطوة

x32x01
  • بواسطة x32x01 ||
  • #1

برمجة نسخة بسيطة من nmap بلغة بايثون ✅​

نستعرض دلوقتي طريقة استخدام مكتبة python‑nmap عشان تبني أداة بسيطة بفكرة Nmap في بايثون: فحص عنوان IP، تفتيش بورتات (1-1024)، وعرض الخدمات وحالة الهوست. هتلاقي شرح لكل سطر وكود نهائي جاهز للتشغيل.

المطلوب قبل البدء 🛠️​

  1. تثبيت nmapعلى النظام (الأمر يختلف حسب التوزيعة):
    • على Debian/Ubuntu:
      sudo apt update
      sudo apt install nmap
    • على macOS مع Homebrew:
      brew install nmap
  2. تثبيت مكتبة بايثون python-nmap (المجرد تثبيت المكتبة لا يغني عن تثبيت nmap نفسه):
    pip3 install python-nmap

روابط مرجعية:

فهم الخيارات الأساسية المستخدمة في الكود 🔎​

في المثال سنستعمل:
  • scanner.scan(target, '1-1024', '-sV')
    • '1-1024' : نطاق البورتات الأولي (يمكن تغييره).
    • -sV : محاولة كشف الخدمة وإصدارها على البورت (service/version detection).
      قابلة للتعديل: يمكنك استخدام -sS لمسح SYN stealth، أو -A لمسح شامل (قد يحتاج صلاحيات root).
تذكّر: بعض أنواع الفحص تحتاج صلاحيات root/administrator حتى تعمل بصورة صحيحة.

كود بايثون عملي ومحسن (جاهز للتشغيل) 🐍​

Python:
#!/usr/bin/env python3
"""
Simple Nmap-like scanner using python-nmap.
Use only on hosts/networks you own or have permission to test.
"""

import nmap
import sys

def scan_target(target, port_range='1-1024', nmap_args='-sV'):
    nm = nmap.PortScanner()
    try:
        nm.scan(hosts=target, ports=port_range, arguments=nmap_args)
    except nmap.PortScannerError as e:
        print(f"[!] Nmap error: {e}")
        return
    except Exception as e:
        print(f"[!] Unexpected error: {e}")
        return

    if target not in nm.all_hosts():
        print(f"[!] No results for {target}.")
        return

    host = nm[target]
    print(f"\nHost : {target}")
    print(f"Hostname : {host.hostname()}")
    print(f"State    : {host.state()}\n")

    # قد لا يحتوي على key 'tcp' لو لم يتم العثور على tcp ports
    if 'tcp' not in host:
        print("[i] No TCP ports found in the scanned range (or host filtered).")
        return

    ports = sorted(host['tcp'].keys())
    for p in ports:
        info = host['tcp'][p]
        # info is a dict, e.g. {'state': 'open', 'name': 'http', 'product': 'Apache', ...}
        print('-' * 40)
        print(f"Port {p}/tcp")
        print(f"  State  : {info.get('state', 'unknown')}")
        print(f"  Service: {info.get('name', 'unknown')}")
        # product/version may be absent
        prod = info.get('product')
        ver = info.get('version')
        if prod or ver:
            print(f"  Product: {prod or ''} {ver or ''}")
        # extra info
        extr = info.get('extrainfo')
        if extr:
            print(f"  Extra  : {extr}")
    print('\nScan completed.\n')

def main():
    if len(sys.argv) >= 2:
        target = sys.argv[1]
    else:
        target = input("Please enter an IP address or host (e.g. 192.168.1.1): ").strip()
        if not target:
            print("No target provided. Exiting.")
            return

    # خيارات قابلة للتعديل:
    port_range = input("Enter port range (default 1-1024): ").strip() or '1-1024'
    args = input("Enter nmap arguments (default -sV): ").strip() or '-sV'

    scan_target(target, port_range, args)

if __name__ == '__main__':
    main()

شرح سريع للمحسّنات في الكود:
  • تعامل آمن مع Exceptions ليمنع تحطّم البرنامج عند أخطاء nmap.
  • تحقق من وجود الـ host في نتائج المسح.
  • ترتيب البورتات sorted(...) لعرض منظم.
  • دعم مدخلات سطر الأوامر: python3 scan.py 10.0.0.1 أو تشغيل تفاعلي.

أمثلة تشغيل 🚀​

  • فحص تفاعلي:
    python3 scan.py
    ثم تدخل العنوان ونطاق البورتات والـ nmap args.
  • فحص سريع من سطر الأوامر مع النطاق الافتراضي:
    python3 scan.py 192.168.1.10
  • استعمال خيار -A لمسح شامل (قد يحتاج صلاحيات):
    python3 scan.py 192.168.1.10
    # ثم عند المدخلات اكتب: -sV -A
إذا أردت فحص SYN stealth (-sS) أو استخدام UDP (-sU) فستحتاج عادةً صلاحيات أعلى (sudo/root).

نصائح عملية وأمان 🔒​

  • شغّل المسح فقط على شبكات أو أجهزة لديك إذن بمسحها.
  • بعض مسوحات Nmap قد تُثير أجهزة كشف اختراق IDS/IPS أو قد تُسجل كهجوم عند مزود الخدمة.
  • لا تشغّل فحوصات عنيفة على شبكات الشركات أو مزود الخدمة
  • استخدم نطاقات صغيرة في البداية للتجربة ثم وسّع تدريجيًا.

تحسينات ممكن تضيفها لاحقًا ✅​

  • حفظ النتائج بصيغة JSON أو CSV: nm.csv() أو nm.get_nmap_last_output() أو التعريف اليدوي باستخدام json لبناء مخرجات.
  • واجهة رسومية بسيطة (Tkinter) أو واجهة ويب (Flask) لعرض النتائج.
  • دعم مسح UDP و-SYN، أو إضافة خيارات لسرعة المسح (-T4) أو استثناءات IP Range.
  • تنفيذ مسح متوازي عبر threading/async عند فحص شبكات واسعة.

أمثلة مرجعية ومصادر مفيدة 🔗​

 
التعديل الأخير:

المواضيع ذات الصلة

x32x01
الردود
0
المشاهدات
834
x32x01
x32x01
x32x01
الردود
1
المشاهدات
1K
x32x01
x32x01
x32x01
الردود
0
المشاهدات
843
x32x01
x32x01
x32x01
الردود
0
المشاهدات
419
x32x01
x32x01
x32x01
الردود
0
المشاهدات
831
x32x01
x32x01
الوسوم : الوسوم
cyber security nmap port scanning python python nmap tcp أمن الشبكات فحص البورتات فحص الشبكات كشف الخدمات
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟

آخر المشاركات

إحصائيات المنتدى
المواضيع
2,388
المشاركات
2,601
أعضاء أكتب كود
574
أخر عضو
الياس
عودة
أعلى