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

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

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

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

Simple Port Scanner

الشرح


استدعاء المكتبة

import socket

انشئ متغير واعطه قيمة تحمل الموقع الهدف

Host = "www.target-site.com"

سنقوم بتحويل الهوست او الموقع الى اي بي باستعمال الدالة 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

السكريبت كامل


نتائج الفحص



اتمنى كان الشرح سهل الفهم
بالتوفيق