برمجة سكريبت فحص بورتات بايثون | Simple Port Scanner

برمجة سكريبت فحص بورتات بايثون | Simple Port Scanner

برمجة سكريبت فحص بورتات بايثون | Simple Port Scanner

سنقوم اليوم ببرمجة سكريبت بسيط لفحص البورتات بواسطة مكتبة السوكيت, سنعتمد على بروتوكول TCP في هذه العملية, طبعا السكريبت بسيط جدا يمكنكم اضافة Threading أو الخيوك وجعله سريع جدا ويفحص البورتات ب ثانية او ثانيتين فقط.

شرح برمجة سكربت بسيط لفحص المنافذ - Simple Port Scanner

  • استدعاء المكتبة socket الخاصة بفنكشن الاتصال بالشبكات
import socket
  • انشئ متغير واسند له قيمة تحمل عنوان الموقع الهدف
Host = "www.target-site.com"
  • سنقوم بتحويل الهوست (الموقع) الى ip باستعمال الدالة gethostbyname
HostToIP  = socket.gethostbyname(Host)
  • هذا الكود مهم وربما ينتج عنه أخطاء لذلك وجب استعمال try
try:

  • الان ننشئ حلقة for loop بواسطتها نقوم بفحص البورتات
  • وسنمرر لها مجال بورتات كما نريد أنا وضعت كمثال من 20 الى 100 لان البورتات القياسية موجودة بكثرة بهذا المجال مثل بورت ftp 21 و بورت 22 ssh وبورت 25 smtp بورت telnet 23 و http 80 ...

    for port in range(20,100):
  • انشأنا كائن sock ومررنا له الدالة socket الموجودة بكلاس socket ومررنا للدالة بارمترين
  • الاول AF_INET بمعنى اننا نتصل ببروتوكول القديم ipv4 والثاني هو SOCK_STREAM ويعني انان نستعمل  TCP
  • ان أردت استعمال udp فاستعمل socket.SOCK_DGRAM
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • الأن سنحدد مهلة اتصال صغيرة نصف ثانية 0.5 حتى لا ينتظر السكريبت الخاص بنا كثيرا, لأن الاتصال ربما قطع والسكريبت مازال ينتظر.
        sock.settimeout(0.5)
  • الان اهم دالة وهي دالة الاتصال او connect سنستعمل دالة connect_ex شبيهة بالدالة connect  ولكنها تقوم بارجاع قيمة الخطأ
  • فمثلا اذا ارجعت القيمة 0 يعني ان البورت مفتوح وان ارجعت رقم اخر فمعناه ان البورت مغلق. وهذا هو لب الموضوع.
  • انشانا متغير result وهو يحمل القيمة العددية التي ترجعها الدالة
result = sock.connect_ex((HostToIP, port))
  • اذاكان المتغير result هو صفر 0 اطبع لنا ان البورت مفتوح
        if result == 0:
            print "[+] Port {}: Open".format(port)
ان كان المتغير result يحمل قيمة مختلفة عن الصفر 0 فالبورت مغلق

        else:
            print "[-] Port {}: Closed".format(port)
الان انهي لنا الاتصال الخاص بالسوكيت
        sock.close()
except:
    pass
السكريبت كامل

Simple Port Scanner
نتائج الفحص
نتائج الفحص Simple Port Scanner
اتمنى كان الشرح سهل الفهم
بالتوفيق