Ad

 تصميم اسكربت لفحص الشبكة واستخراج البورتات المفتوحة من ال IP بلغة بايثون

تصميم اسكربت لفحص الشبكات بالبايثون
 

 السلام عليكم ورحمة الله وبركاته أهلاً بكم من جديد فى موقعي المتواضع :)

فى هذه المقالة سنناقش بإذن الله تعالى عدّة مواضيع مهمة ٌد تكون أهم المواضيع التي ستُناقش في هذه المدونة وفي أي مدونة أُخري! :)

 اليوم سنتحدث بإذن الله عن لغة البرمجة بايثون وسنناقش عدّة مواضيع متعلقة بها وهي كالتالى :-

  • ما هي بايثون ولماذا بايثون
  • ما الذي يمكنني فعله ببايثون
  • الاختراق بلغة بايثون
  • دورة بايثون للاختراق


أولاً وقبل كل شئ سأبدأ بالحديث عن عشقي, بالرغم من غيرتي ولكن سأتحدث قليلاً ولن أُطيل فى الحديث عنها بسبب غيرتي عليها بالطبع, نعم..,فهى عشقي!💖

لماذا تم عمل هذه الدورة؟

رأيت فى اﻷونَّة اﻷخيرة عمليات بحث ذات صلة بلغة البرمجة الشهيرة بايثون!
ومن ضمن عمليات البحث هذه كانت النتائج كالآتي:-

استخدام بايثون في الاختراق
الاختراق بلغة بايثون
مكتبات بايثون للاختراق
أدوات بايثون للاختراق
بايثون هكر
اختبارات بايثون
لغة البايثون والهكر
تحميل كتاب Black Hat Python مترجم

ما هي بايثون ولماذا يجب اختيار بايثون ؟

أولاً عزيزي القارئ وبكل بساطة يُسعدني أن أُخبرك أنه يجب عليك اختيار بايثون أو بمعني أصح, من المُستَحَب!

نعم, فلغة البرمجة بايثون هي من أسهل وأبسط لغات البرمجة فى هذا المجال بأسِرِهِ إن لم تكُن أبسطَهُم وأسهلَهُم! سيُسرع أحد القرّاء ويسألنى :-

أحد القرّاء: نعم, وما الدليل على ذلك عزيزي الكاتب ؟

 سأجيبك بكل بساطة وأخبرك أنه على سبيل المثال إذا أردتَ طباعة كلمة على الشاشة ولتَكُن هذه الكلمة هي كلمة "hello world" سيكون الكود الذي يجب عليك كتابته بلغة البرمجة بايثون هو كالتالى:

("hello, world")print

نعم!, أرُأيتَ كل ذلك الساطة!

ولاحظتَ أيضاً كلمة print المٌستخدَمة فى الطباعة؟ ,ألم تري أنه يوجد تشابه كبير جداً بين كلمة الطباعة باللغة الإنجليزية والطباعة بلغة بايثون ؟!

نعم, فَ هذه اللغة هي لغة برمجة عالية المستوي - High Level - , ما معني ذلك أيّّها الكاتب ؟

حسناً, لن أبخل عليك وسأخبرك ما معني كلمة لغة برمجة عالية المتسوي وهل يوجد لغات برمجة منخفضة المستوي أيضاً أُم لا .

  

بلطبع عزيزي القارئ يوجد لغات برمجة منخفضة المستوي ولغات برمجة عالية المستوي, إذاً, ما الفرق بينهما ؟

حسناً, الفرق بين لغات البرمجة عالية المستوي ولغات البرمجة منخفضة المستوي هو أن لغات البرمجة عالية المستوي سهلة الفهم على البشر وسهل التعامل معها وقراءة الكود الخاص بها وفهمها, أو باللغة الانجليزية تكون هذه اللغة readable أَي يُمكن قرائتها, ومن أشهر اللغات من هذا النوع أو لغات البرمجة عالية المستوي, هي لغة البرمجة بايثون - Python -, كما رأيتَ بالطبع .

أَمَّا لغات البرمجةِ منخفضة المستوي هي بكل بساطة, عكس لغات البرمجة عالية المستوي, فهي صعبة جداً جداً ولا يُمكن للبشر التعامل معها وفهمها لأنها صعبة جداً جداً ولا يوجد الكثير ممن يدرسون لغات البرمجة منخفضة المستوي, حيثّ أنها قريبة جداً للغة الآلة أو ال Machine Language , والُّتي من أشهر هذه اللغات, لغة البرمجة أسمبلى - Assembly -, فإذا أردتَ كتابةو كود لطباعة كلمة "hello world" على الشاشة باستخدام لغة البرمجة Assembly سيكون الكود الذي يجب عليك كتابته لتنفيذ ذلك كالتالى :-

; ;"hello, world" in assembly language for Linux ; ;
;"hello, world" in assembly language for Linux ;
;to build an executable:
; nasm -f elf hello.asm ;
ld -s -o hello hello.o section .text ;
Export the entry point to the ELF linker or loader.
The conventional ; entry point is "_start".
Use "ld -e foo" to override the default. global _start section .data msg db 'Hello, world!',0xa ;
our dear string len equ $ - msg ;
length of our dear string section .text ;
linker puts the entry point here: _start: ;
Write the string to stdout: mov edx,len ;
message length mov ecx,msg ;
message to write mov ebx,1 ;
file descriptor (stdout) mov eax,4 ;
system call number (sys_write) int 0x80 ;
call kernel ;
Exit via the kernel: mov ebx,0 ;
process' exit code mov eax,1 ;
system call number (sys_exit) int 0x80 ;
call kernel - this interrupt won't return ;
to build an executable:
; nasm -f elf hello.asm ; ld -s -o hello hello.o
section .text ; Export the entry point to the ELF linker or loader. The conventional
; entry point is "_start". Use "ld -e foo" to override the default. global _start
section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string
section .text
; linker puts the entry point here: _start:
; Write the string to stdout:
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
; Exit via the kernel:
mov ebx,0 ;process' exit code
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel - this interrupt won't return

وهذا الكود متوافق مع نظام التشغيل لينكس الذي يتمتع بنواه 32bit 

أرأيت صعوبة لغة البرمجة Assembly !

صعبة, أليس كذلك ؟

نعم, فهو كذلك!

هذا فقط الفرق بين لغات البرمجة عالية المستوي ولغات البرمجة منخفضة المستوي

وأنا تحدّثت عن لغة البرمجة بايثون أيضاّ فى هذه المقالة والتي هي بعنوان " كيف تصبح مبرمج قوي ومحترف "

Machine Language

 

لننتقل لموضوع آخر والّذي هو

ما الّذي يمكن للمبرمج فعله بلغة البرمجة بايثون ؟

أولاً, ماذا يفعل الآخرون ببايثون ؟

ربما تتساءل عمّا يبنيه الناسُ باستخدام Python في العالم الحقيقي. لذلك أولاً ، دعونا نلقي نظرة سريعة على كيفية استخدام بعض شركات التكنولوجيا الكبرى للغة.

Google هي شركة استخدمت لغة Python منذ البداية ، واكتسبت مكانًا كواحدة من لغات الخادم الرئيسية لعملاق التكنولوجيا. عمل جويدو فان روسوم ، دكتاتور بايثون الخيري للحياة ، هناك لعدة سنوات ، حيث أشرف على تطوير اللغة.

Instagram يحب Python لبساطتها. تشتهر الخدمة بتشغيل "أكبر نشر في العالم لإطار ويب Django ، والذي تمت كتابته بالكامل بلغة Python."

يضع Spotify اللغة المستخدمة في تحليل البيانات والخدمات الخلفية. وفقًا لفريقهم ، تؤدي سهولة استخدام Python إلى خط أنابيب تطوير سريع للغاية. تُجري Spotify عددًا كبيرًا من التحليلات لتقديم توصيات لمستخدميها ، لذا فهم بحاجة إلى شيء بسيط ولكنه يعمل بشكل جيد أيضًا. بايثون للإنقاذ!

يمكنك الاطلاع على هذه المقالة لمعرفة بعض استخدامات لغة البرمجة Python.

إذا كنتَ مقتنعًا بالفعل ، فلنبدأ!

ماذا يمكنك أن تفعل مع بايثون ؟

بمكنك بالطبع العمل ببايثون فى مجالات عديدة, من تطوير الويب إلى علم البيانات والتعلّم الآلي وأمن المعلومات ,وغير ذلك ، فإن تطبيقات Python الواقعية لا حدود لها!.

إليك بعض المشاريع التي ستساعدك في استخدام مهاراتك في Python بشكل جيد.

معرفة سعر الدولار اليوم

يمكنك بالطبع عمل تطبيق لمعرفة سعر الدولار اليوم ومن أي بنك تريد وهذا التطبيق سيتمتع بالطبع بواجهة مستخدم رسومية - GUI - سيكون تطبيقاً عادياً مثل أي تطبيق, ولكن بلغة البرمجة بايثون ومن تصميمك أنت!

بالطبع ستستخدم فى هذا التطبيق عدة مجالات مهمة مثل الويب اسكرابينج Web Scrabing 

وهذا المجال مخصص لجلب بيانات المواقع, وحفظها أو تخزينها وعمل بعض العمليات عليها أو استخدامها فى عمليات أُخري كاختبار الاختراق مثلاً!

أي أنَّك ستُحدد الهدف الخاص بك ثُمّ بعد ذلك ستقوم بتحديد المُراد جلبه من الموقع أو بمعني أصح, صفحة الموقع والتى يمكننا القول عليها, أنّها مكتوبة بلغة HTML (Hyber Text Markup Language)

  كتصميم ياسكربت جمع معلومات عن هدفٍ ما ومن ثّم اختراق هذا الهدف!

أو جمع معلومات مهمّة مثل أرقام الهواتف والايميلات وبعد ذلك التخمين على هذه الايميلات بُناءاً على المعلومات اﻷُخري التي قُمتَ بتجميعها فى البدابة!


يوجد أيضاً مهمّات ومشاريع عديدة يمكنك فعلها ببايثون لتمرينك وتدريبك أكثر على هذه اللغة العبقرية 

سنتحدث عن معظمها فى مقالات لاحقة إن شاء الله وسنصمم بعضها معاً بإذن الله :)

اﻵن نأتي للجزء المهم أيضاً وهو 

كيفية تصميم اسكربت ببايثون لفحص الشبكة واستخراج البورتات المفتوحة عن طريق ال IP فقط ؟

أولاً ما هو الIP ؟

الIP بكل بساطة هو اختصار لكلمتين مُكونتُين من Internet Protocol أَي انترنت بروتوكول 

كلمة بروتوكول فى اﻷصل تعني اتفاقية, أَي شئ متعارف عليه عالمياً وليس دولياً أو ما شابه ذلك


حسناً, الآن عرفنا ما هو ال IP

ثانياً: كيف نفحص أي IP باستخدام لغة البرمجة بايثون ؟

بالنسبة إليك إن لم تكن قد ثبّتّ اي بيئة عمل مثل pycharm أو VScode أو غيره, فيمكنك فتح الnotepad وكتابة الأكواد التالية :-

ملحوظة: قبل كتباة أي كود وأنت لا تفهمه, لا تقلق, سأشرح وظيفة كل سطر بالتفصيل الغير مُمّل إن شاء الله :)

 
كود بايثون لفحص الشبكات

 فى الكود السابق أعزائي القرّاء قُمنا فى أول سطر بكتابة كلمة import socket وتعني بالعربية, "اجلب لي المقبس "!
قد يبدو الكلام غريباً وهذا شئ منطقيٌ جداً لأننا نترجمه ولا يجب أن نترجمه أصلاً ولكن أنا أُبسط عليكم المجال حتي لا تخافون, فهو سهلٌ حقّاً !
 
أول سطر فى الكود هو عبارة عن جملة import socket وهو أنني أقول للجهاز استدعيلي المكتبة التى تُدعي socket فى جهازي بعدها قُمتُ بعمل كائن (سنتعرّف عليه لاحقاَ بإذن الله) ولكن كل الّي يجب عليك معرفته اﻵن هو أن هذا الكائن بمثابة نسخة من أص معين وفى حالتنا هذه , اﻷصل هو المكتبة socket  حسناً عرّفنا المتغير (الكائن) الذي يحوي بداخله القيم المُوضّحه أعلاه 
بعد ذلك قولنا أن لكل منفذ من الرقم واحد إلى الرقم 1000 قم بفحص الاتصال وان كانت نتيجة الاتصال هذا تساوي 0 اذاً فالاتصال تم بنجاحل وإذا أي رقم غير ذلك فهذا يعني أنه حدث مشاكل فى الاتصال أو أن الاتصال لم يحدث بنجاح بسبب عدة مشاكل لن تطرَّق إليها اﻵن :)
 
اﻵن سأترجم ما قلته حالياً بالعربي إلى كود بلغة البرمجة بايثون حتي نفهم بعضنا البعض :)
 
لكل أقول له جملة "لكل منفذ من الرقم واحد إلى الرقم 1000" فهذا يستدعى عليا أن أكتُب هذا الكود والَّذي هو for port in range(1000) وأظن أن الكود واضحاً جداً, فهذه لغة عالية المستوي جداً, أي يمكن للبشر فهمها بسهولة! (كما وضحتُ سابقاً)
 
المهم, بعد ذلك قُمنا بعمل متغير يُدعي result والّذي يحوي بداخله قيمة, هذه القيمة نحن لا و لن نعرف ما هي, إلا عندما يتم الاتصال بنجاح, إذا تم الاتصال بدون أي مشاكل عن طريق الكود sock.connect_ex((target, port)) , وليس sock.connect((target, port)) , ركّز عزيزي القارئ, أردتُ أن أُنَبّهَك فقط , لا بأس :) , المهم إذا تمَّ الاتصال بدون أي مشاكل أو عقوبات ستكون القيمة المُخَزّنة فى هذا المتغير تساوي صفراً أي أنه بكل بساطة ستكون القيمة التي بداخل المتغير الّّذي يُدعي result هي القيمة 0 أي أن الاتصال تمّ بنجاح, غير ذلك سيكون حدث مشاكل كما ذكرتُ باﻷعلى !
 
سنحتاج حالياً إلى أن نفححص إذا كانت القيمة التى بداخل المتغير result هي 0 أُم لا حتي نعرف ما هي البورتات أو المنافذ المفتوحة بالضبط .
حسناً فى هذه الحالة سنستخدم العبارة if والتى تعني بالعربية "لو".
أُي أننا سنفحص القيمة result لو هي تساوي 0 إذاً اطبع كلمة البورت مفتوحاً, غير ذلك (else) لا تطبع شيئاً .
 
أظنُ أنني وضحتَ كل شئٍ بالتفصيل وبالطبع إن وجدثَ أي شئٍ غيرُ واضحٍ فى هذه المقالة أو فى أي مقالة أُخري على مدونتنا المتواضعة, سأكون مسروراً إذا تواصلت معي وبلَّغتني المشكلة بالتحديد :) 


وإلى هنا قد انتهت مقالتنا اليوم, أرجو أن أكون قد أفدتَكُم بالقدر المطلوب!

وشكراً لحسن قرائتكم, والسلام عليكم ورحمة الله وبركاته 🌺


Post a Comment

أحدث أقدم