برمجة الشبكات في بايثون

سيكون هذا الموضوع مدخلنا الى برمجة المقبس (socket) باستخدام لغة بايثون , ويعتبر المقبس من الأساسيات وراء كل عملية اتصال بالشبكة يقوم بها الكمبيوتر وعلى سبيل المثال عندما نقوم بالاتصال بمحرك البحث ونكتب www.google.dz على المتصفح يقوم الجهاز بفتح مقبس ويتصل بالموقع  لجلب الصفحة و إظهارها لنا، نفس العملية تنطبق على برامج الدردشة مثل gtalk او skype اي ان عملية اتصال بالشبكة تمر عبر المقبس.

في هذا الدرس سنقوم ببرمجة مقبس tcp باستخدام لغة البرمجة بايثون .
وقبل أن تبدأ يجب أن تكون على معرفة بأساسيات استخدام بايثون .

انشاء Socket
اولا علينا ان نقوم بانشاء المقبس والدالة socket.socket تقوم بهذا العمل
#مثال عن زبون المقبس في بايثون
import socket   #استدعاء مكتبة المقبس
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket Created'

الدالة socket.socket تقوم بانشاء المقبس و اعادة إرجاع وصف المقبس حتى يمكننا استخدامها في دوال أخرى متعلقة بالمقبس.
والكود السابق يقوم بإنشاء مقبس بالإعدادات التالية :
AF_INIT خاص بالعنوان النسخة رقم 4 IPV4
SOCK_STREAM تهيئة المقبس بالاتصال باستخدام TCP
معالجة الأخطاء
إذا فشلت أي دالة من دوال المقبس سيقوم بايثون باستثناء يسمى socket.error

#مثال عن زبون المقبس في بايثون#معالجة الأخطاء في برمجة المقابس في بايثون
import socket   
import sys  #للخروج 
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
 
print 'Socket Created'

 

إذا قمنا بإنشاء المقبس بنجاح ولكن ماذا بعد؟ الآن سنقوم بتجربة الاتصال بإحدى السيرفرات باستخدام هذا المقبس وليكن www.google.com ملاحظة ماعدا sock_stream هناك دالة أخرى وهي SOCK_DGRAM وهي خاصة ببروتوكول UDP وهذا النوع من المقابس غير قابل للاتصال وفي درسنا هذا سنتعامل مع SOCK_STREAM الخاص ببروتوكول TCP

برمجة مقبس udp في بايثون

الاتصال بالسيرفر سنقوم بالاتصال بسيرفر بعيد على رقم منفذ معين، إذا نحن بحاجة الى شيئن عنوان IP ورقم المنفذ للاتصال به ، إذا عليك بمعرفة عنوان السيرفر الذي تريد الاتصال به وفي هذا المثال سنقوم باستخدام عنوان www.google.com كعينة . الحصول على عنوان السيرفر قبل الاتصال بالسيرفر نحن بحاجة الى عنوان ip الخاص به وللحصول عليه باستخدام بايثون نقوم بالتالي :

 import socket   #for sockets
import sys  #for exit 
try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
print 'Socket Created' 
host = 'www.google.com'
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    #could not resolve
    print 'Hostname could not be resolved. Exiting'
    sys.exit()     
print 'Ip address of ' + host + ' is ' + remote_ip

الآن وبعد حصولنا على العنوان الخاص بالسيرفر نستطيع الاتصال به عبر منفذ معين باستخدام الدالة connect

import socket   #for sockets
import sys  #for exit
 
try:
    #create an AF_INET, STREAM socket (TCP)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
    print 'Failed to create socket. Error code: ' + str(msg[0]) + ' , Error message : ' + msg[1]
    sys.exit();
 
print 'Socket Created'
 
host = 'www.google.com'
port = 80
 
try:
    remote_ip = socket.gethostbyname( host )
 
except socket.gaierror:
    #could not resolve
    print 'Hostname could not be resolved. Exiting'
    sys.exit()
     
print 'Ip address of ' + host + ' is ' + remote_ip
 
#Connect to remote server
s.connect((remote_ip , port))
 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip
</pre>
<pre class="brush: python">#Connect to remote server
 s.connect((remote_ip , port)) 
print 'Socket Connected to ' + host + ' on ip ' + remote_ip</pre>
<pre>

قم بتشعيل البرنامج

 python client.py $
 Socket Created
 Ip address of www.google.com is 74.125.236.83
Socket Connected to www.google.com on ip 74.125.236.83

تم إنشاء المقبس والاتصال ، قم بتجريب الاتصال بمنفذ أخر غير المنفذ 80 حيث لا يمكنك الاتصال وهذت يعني ان هذا المنفذ غير مفتوح للاتصال وهذا منطقي (يفترض انك ملم بالشبكات طبعا) وهذا يحتم علينا استخدام برنامج ماسح المنافذ.

إلي هنا ينتهي الدرس الأول حيث قمت بتقسيم الموضوع إلى عدة دروس حتى يتسنى لك عزيزي القارئ الاستيعاب والفهم وطبعا حاول أن تقوم بالاتصال على سيرفرات أخرى  وقم بالبحث على الأنترنيت لمزيد من المعلومات ولا تكتفي بهذا الدرس .
في الدرس المقبل سنقوم بتعلم كيفية إرسال واستقبال البيانات إلى السيرفر و إلى ذلك الوقت في أمان الله .

برمجة الشبكات في بايثون ارسال واستقبال البيانات

 




أرجوا أن تقوم بدعمنا عبر نشرك والاعجاب بالموقع

6 من التعليقات على موضوع “برمجة الشبكات في بايثون

  1. شكرا شرح مفهوم اتمنا ان تصدرو كتاب او مجلة في بيثون ف نحن العرب نفتقر الى كتب بي العربية في مجال الشبكات بحث عن كتاب لي برمجت الشبكات بي بيثون من دون فاءد اتمنا من كل قلبي ان تفكرو في الفكرة وشكرا لكم على المجهود

  2. little في 9 أبريل، 2017 at 5:54 ص قال:

    سلام عليكم كان عندي بحث عن البرمجه محتاجه اكمل البحث لكن ما في كتب لاقيتها تشرح اللي احتاجه اذا ممكن تساعدني
    احتاج اعرف كيفيه حذف او عمل بلوك للاشخاص في شبكات التواصل كيف يتم بالتفصيل من داخل الكمبيوتر الاوامر والرموز وشكرا

  3. احمد في 30 مايو، 2017 at 9:04 م قال:

    السلام عليكم , شكرا على الشرح بس ما فهمت هذا الجزء من الكود
    #Connect to remote server
    s.connect((remote_ip , port))
    print ‘Socket Connected to ‘ + host + ‘ on ip ‘ + remote_ip

    ممكن توضيح ؟

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

Post Navigation