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

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

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


    الشرح


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

    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

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


    نتائج الفحص



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

    مقالات متعلقة

    إرسال تعليق