برمجة سكريبت فحص بورتات بايثون | 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
السكريبت كامل
نتائج الفحص
اتمنى كان الشرح سهل الفهم
بالتوفيق