Python شرح مكتبة nmap في بايثون

تم تحميل الصفحة في 1,9971703 ثانية
شرح مكتبة nmap في بايثون
إنضم
2 نوفمبر 2012
المشاركات
3,405
الإعجابات
2,872
النقاط
113
العمر
30
الإقامة
Algeria


ربما الجميع يعرف اداة nmap الخاصة بفحص المنافذ , ويحتاج البعض استعمالها في مشروع بايثون فيضطر لتثبيت الاداة واستعمالها وهذا يتم عن طريق تنفيذ الاوامر على النظام بواسطة دالة os ومن ثم قراءة مخرجات الامر, وهذا الامر متعب لأنك تضطر لفلترة المخرجات وتقسيمها حتى تحصل على مبتغاك, لن تحتاج لعمل ذلك بعد اليوم لان بايثون وفرت مكتبة خاصة nmap تقوم بفحص المنافذ بسهولة تامة.



طريقة تثبيت مكتبة nmap

انا أستعمل نظام كالي لينكس حاليا لذلك هذا الشرح مجرب على اللينكس فقط, لم أجرب على الويندوز للأمانة.


يجب أولا تثبيت python-nmap

بهذا الامر

Bash:
 pip install python-nmap
وتثبيت مكتبة nmap

Bash:
 pip install nmap



ملاحظة:
وقع لي مشكل في استدعاء المكتبة في البايثون , رغم أني ثبتها دون مشاكل, وسأشارككم الحل.

المشكل اثناء استدعاء PortScanner ويظهر كالاتي

AttributeError: 'module' object has no attribute 'PortScanner'

والحل كان
تثبيت python-nmap من السورس وليس عبر pip لا اعرف كيف حصل هذا المشكل , المهم طريقة تثبيته
كالاتي:
  1. افتح الطرفية​
  2. ألصق بها الاوامر الأتي​


أمر تحميل السورس من الموقع

Bash:
hg clone https://bitbucket.org/xael/python-nmap
ثم

كود:
cd python-nmap
ثم التثبيت بالامر

كود:
python setup.py install
فقط
وانتهى المشكل باذن الله.



نبدا على بركة الله شرح استعمال مكتبة nmap

أولا كالمعتاد يجب استدعاء المكتبة nmap مثل أي مكتبة.

Python:
import nmap

سنحتاج استعمال كلاس PortScanner موجود بالموديل nmap , لذلك سنقوم بانشاء كائن object ونعطيه اسم nm
وبدل كتابة الاسم الطويل nmap.PortScanner اختصرناه ب nm
كالاتي
Python:
nm = nmap.PortScanner()
الان سنستعمل دالة scan موجودة بالكلاس السابق PortScanner , في السابق قمنا باستنساخه واختصرناه ب nmلذلك يمكننا الوصول للدالة scan هكذا
nm.scan()​


كيف تعمل دالة المسح وماهي البارمترات الخاصة به

Python:
scan(hosts='127.0.0.1', ports=None, arguments='-sV', sudo=False)
كبداية أبسط أمر للفحص هو تمرير الاي بي المراد فحصه فقط

كالأتي
Python:
nm.scan('192.168.1.1')
سيقوم الامر بفحص المنافذ ونحن سنختار ما نريد اظهاره من النتائج.
على سبيل المثال سنظهر ماهو الهوست نيم:
Python:
Hostname = nm['192.168.1.1'].hostname()
في الكود السابق قمنا باستخراج اسم الجهاز Hostname , أما عندما استعملنا العلامة [] بداخلها الاي بي المراد معرفة الهوست الخاص به وكأنها مصفوفة والسبب يرجع لأنه يمكننا فحص الكثير من الايبيات لذلك يجب أن نخبره او نستعلم عن الاي بي المراد استخراج نتائجه فقط.

الان قم بطبع الناتج بالامر

Python:
print Hostname
وسيظهر لك مثلا:

localhost

hostname يختلف من جهاز لاخر وعند فحص الروتر لم يظهر لذلك لا تقلق ان لم يظهر.


نريد معرفة حالة الجهاز بمعنى هو شغال أو منطفيء up or down

Python:
state = nm['192.168.1.1'].state()
قم بطباعة الناتج بالأمر

Python:
print  nm['192.168.1.1'].state()

أو بهذا الشكل:

Python:
print state
لكن من الأفضل تحتفظ بالناتج في متغير مثل ما فعلت في الامر الثاني state لأنك ربما تحتاجه في بقية مشروعك.​



طريقة معرفة البورتات المفتوحة, يجب أن تحدد على أي بروتوكول مثلا tcp أو udp
سنقوم بعرض البورتات الخاصة ببروتوكول tcp باستعمال .all_tcp
مثال:

Python:
tcp_ports = nm['192.168.1.1'].all_tcp()
وسنقوم بعرض الناتج بالامر المعتاد

Python:
print(tcp_ports)


وبنفس الطريقة يمكننا استعمال udp فقط نغير all_tcp ب all_udp
مثال:
Python:
tcp_ports = nm['192.168.1.1'].all_udp()


وهذا الكود كاملا لما طبقناه



نتيجة تشغيل السكريبت





الان سنستخدم الدالة scan بطريقة أخرى بمعنى بمٌدخلين أو 2 بارميتر وهما ip و port

بهذه الطريقة يمكننا فحص منفذ معين port, او يمكن فحص مجال انت تحدده بنفسك range of ports

بهذا الشكل

Python:
nm.scan('127.0.0.1', '1-1024')

طريقة فحص مجموعة أو range من الاي بيات كالأتي

Python:
nm.scan(hosts='192.168.1.0/24')
وهذا الامر الذي أفضله شخصيا وهو فحص الهدف بحيث أنت من تحدد كيفية الفحص عبر تمرير بارميترات

على سبيل المثال في أداة الان ماب الكل يستخدم الأداة في الفحص بهذه الطريقة

Bash:
nmap -sS -sV -O 192.168.1.1
لذلك سنستخدمها بهذا الشكل وتمرير arguments كالاتي​

Python:
nm.scan(hosts='192.168.1.1', arguments='-n -sP -PE -PA21,23,80,3389')


استعمال التزامن Asynchronous

Python:
while nma.still_scanning():
    print("Waiting ...")
    nma.wait(2)
الكود يعني بما ان الفحص مستمر still_scanning قم ب: طباعة Waiting بعدها قم بعمل انتظار wait لمدة زمنية تختارها

اذا أردت في مرحلة ما من برنامج لمعرفة أمر الفحص الذي استخدمته استعمل الامر command_line

Python:
nm.command_line()
وسيطبع لك argument التي حددتها مثل : nmap -oX - -p 22-443 127.0.0.1



استعمال امر scaninfo لمعرفة معلومات معينة حول البورتات ونوعها والخدمات

Python:
nm.scaninfo()

وستظهر لك النتيجه :​

{'tcp': {'services': '22-443', 'method': 'connect'}}​


في النهاية يمكنك ان تقوم بحفظ نتائج البحث الناتجة من مشروعك على شكل ملف csv بالامر

Python:
print(nm.csv())



/* تحياتي للجميع*/
 

IRizerX

.:: مُشرف أقسام البرمجة ::.
rankrank
إنضم
25 مايو 2017
المشاركات
362
الإعجابات
535
النقاط
93
ملك الشروحات المميزة :dv (5):

يعطيك الف عافية على هذا الشرح الرائع والمميز

ولا تحرمنا من الجديد
 
إنضم
10 يناير 2018
المشاركات
553
الإعجابات
534
النقاط
93
الإقامة
Morocco
هل هدا المضووع جدي:371: هههه يا أخي فقط أخبرني بالامر:39by: الله يسامحك أول مرة
أشاهد الموضوع:31: مبدع الله ينور شكرا لك على الموضوع الرائع والمفيد جدا جدا جدا :91:
 

hasan-taha

Beginner Developer
rank
إنضم
21 سبتمبر 2016
المشاركات
128
الإعجابات
87
النقاط
28
شكرا لك أخي
شروحاتك مبسطة وسلسة
بارك الله فيك وسدد خُطاك
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل