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

x32x01
  • بواسطة x32x01 ||

برمجة نسخة بسيطة من 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
المشاهدات
677
x32x01
x32x01
x32x01
الردود
0
المشاهدات
550
x32x01
x32x01
x32x01
الردود
1
المشاهدات
296
x32x01
x32x01
MostafaAbdRabbu
  • MostafaAbdRabbu
الردود
4
المشاهدات
601
x32x01
x32x01
x32x01
الردود
1
المشاهدات
734
x32x01
x32x01
x32x01
الردود
0
المشاهدات
718
x32x01
x32x01
x32x01
الردود
0
المشاهدات
573
x32x01
x32x01
x32x01
الردود
0
المشاهدات
472
x32x01
x32x01
x32x01
الردود
0
المشاهدات
173
x32x01
x32x01
x32x01
الردود
0
المشاهدات
568
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,836
المشاركات
2,051
أعضاء أكتب كود
459
أخر عضو
messawyy
عودة
أعلى