TO DONATE : BTC => 1D8Aq4q2jQnvGD1GaK9vbNwKgm1K5zUEWL || PM => U4089661


اهم قوانين :1- منع الردود الباهتة مثل شكرااااا و أخواتها 2- لا يسمح بالمشاحنات الطائفية باآ شكل من الأشكال 3- عدم استعمال الألفاظ التافهة و الكلام البذىء 4- عدم وضع معرفات التواصل الأجتماعى بالردود 5- الأطلاع على كامل القوانين واجب 


العودة   الحماية للأبد -Security 4 Ever > قسم البرمجـــة > لغات البرمجة التفسيرية

لغات البرمجة التفسيرية قسم مختص بالبرمجة التفسيرية مثل :
PHP, java, perl, Python, Bash, Shell script, JPython, AutoIt, Z shell, AWK, VB Script

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 04-06-2019, 06:14 AM
الصورة الرمزية zero-cool
zero-cool
:: عضو خاص ::
 
حـالة التــواجـد : zero-cool غير متواجد حالياً
تاريخ التسجيل: Apr 2016
الجــــنــــــس: ذكـر
المشاركات: 76
شكراً:60
تم شكره 259 مرة في 60 مشاركة
معدل تقييم المستوى: 0
zero-cool بدون تقييم
افتراضي Python Socket .. Part 1

السلام عليكم ورحمة الله وبركاته


إن شاء الله تكونوا في تمام الصحة والعافية إخواني





يحتوي الموديول Python Sockets على الوظائف وهياكل البيانات اللازمة لإنشاء والتواصل عبر lPv4 و lPv6.
يوفر إمكانية نقل البيانات بين عناوين lPv4 / lPv6 عبر TCP أو IJDP.
كما أنه يدعم واجهة RAW socket التي تتيح لك نقل بروتوكولات أخرى مثل ICMP.
يمكنك استخدام الموديول STRUCT لإنشاء دفق ثنائي لأي بروتوكول مضمن ونقله عبر RAW socket.

بالإضافة إلى إنشاء اتصالات وإرسال واستقبال البيانات ، توفر موديول Sockets أيضا وظائف داعمة مثل القدرة على تحويل اسم hostname إلى عنوان IP (والعكس) من خلال DNS.
يمكن استخدام وظائف socket.gethostbyname () و socket.gethostbyaddress () لحل هذه العناوين.

كود PHP:
>>> import socket
>>> socket.gethostbyname ("www.google.com")
'172.217.19.132'
>>> socket.gethostbyaddr("172.217.19.132")
(
'par03s12-in-f132.1e100.net', ['mrs08s04-in-f4.1e100.net''mrs08s04-in-f4.1e100.net''par03s12-in-f132.1e100.net'], ['172.217.19.132']) 
تتمثل الخطوة الأولى في استخدام مكتبة Sockets في إنشاء كائن socket جديد.
يتم ذلك عن طريق استدعاء الميتيود socket () في مكتبة Sockets.
الميتيود socket () تقبل اثنين بارامتر.
البرامتر الأول هو نوع العنوان.
بالنسبة إلى socket lPv4 ، نمرر البرامتر AF_INET
بالنسبة إلى عناوين lPv6 ، نمرر AF_INET6 socket
البرامتر الثاني هو نوع البروتوكول.
لتأسيس UDP socket، يمكنك تمرير socket.SOCK DGRAM كبرامتر ثاني.
ثم ، يتم إستدعاء sendto () أو recvfrom () لنقل أو تلقي البيانات ، على التوالي.
إذا كنت ستعمل كخادم UDP ، فعليك أولاً استدعاء الميتيود bind () وتمرير مصفوفة تحتوي على عنوان lP محلي ومنفذ للربط به.
نأخذ مثال:

كود PHP:
>>> import socket
>>> socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
>>> 
socket.bind(("127.0.0.1",5000))
>>> print 
socket.recvfrom(1024)
(
'HELLO', ('127.0.0.1'45879)) 
إن إرسال البيانات إلى listener UDP قيد الانتظار أمر سهل مثل استدعاء sendto()
فيما يلي مثال لاستخدام UDP client

كود PHP:
>>> from socket import *
>>> 
socket=socket(AF_INET,SOCK_DGRAM)
>>> 
socket.sendto("HELLO",("127.0.0.1",5000))

بالنسبة ل TCP socket تتمثل الخطوة الأولى في إنشاء كائن socket جديد.
يتم ذلك عن طريق استدعاء الميتود socket() في مكتبة Sockets.
هنا نريد عناوين IPv4 لذلك نمرر socket.AF_INET
وتذكر أن البرامتر الثاني يمثل نوع البروتوكول.
نضع في البرامتر الثاني socket.SOCK STREAM يعني أننا نريد إنشاء كائن TCP socket

الآن بعد أن أصبح لديك كائن TCP socket، يمكنك استخدامه لتنفيذ عمليات العميل أو الخادم الشائعة.
عندما يتم استدعاء الميتود connect () أوaccept () الخاصة بالكائن الجديد (connect بالعميل ، وaccept للخادم) يشارك الكمبيوتر في المصافحة الثلاثية ، ولديك etablished socket
سيستخدم socket نفس عنوان IP للمصدر ومنفذ المصدر وعنوان IP للوجهة ومنفذ الوجهة حتى يتم إغلاق الاتصال.
دعونا نلقي نظرة فاحصة على كل خطوة من الخطوات اللازمة لإنشاء اتصال ونقل واستقبال البيانات.

يمكننا استخدام كائن socket الجديد الخاص بنا "للاتصال" و "الإرسال" و "الإستقبال".
إذا قمت بتأسيس اتصال TCP جديد ، فإن كائن socket سوف يقوم بإجراء المصافحة الثلاثية وإعادة إرسال الحزم التي تم إسقاطها تلقائيًا نيابة عنك.
هذا يجعل التعامل مع اتصالات الشبكة في غاية البساطة مثل قراءة وكتابة الملفات من القرص الصلب.
البرامتر connect يأخذ مصفوفة واحدة كبرامتر أول.
وتتكون المصفوفة من عنصرين.
الأول سلسلة نصية تحتوي على عنوان IP والثاني منفذ الوجهة.

يمكننا أيضًا استخدام كائن socket الجديد للعمل كخادم.
لاستخدامه كخادم نعمل "bind," "listen,""accept," "send, " و "recv."
الميتيود bind تأخذ برامتر واحد وهو مصفوفة.
أول عنصر في المصفوفة هو عنوان IP لربط (bind) الخدمة إليه.
ثاني برامتر هو المنفذ الذي نتنصت عليه.
استدعاء listen يبدأ تشغيل الخادم على IP والمنفذ المحدد بواسطة .bind()
بعد إستدعاء listen() سيتم عرض المنفذ أثناء الاستماع بواسطة NETSTAT -na.
يمكن للعملاء الاتصال بالخادم في ذلك الوقت.
ثم يتم استخدام الميتود accept للتفاعل مع عميل متصل.
الميتيود accept ترجع مصفوفة متكونة من عنصرين .
الأول هو كائن الإتصال وهذا لأخير له الميتيود send والميتيود recv تعمل بنفس الطريقة كالكائن الذي ترجعه الميتيود connect.
الشيء الآخر الذي يتم إرجاعه بواسطة الميتيود accept هو مصفوفة تحتوي على عنوان IP البعيد والمنفذ للاتصال.

الآن بعد أن أصبح لديك اتصال ، أنت جاهز لنقل البيانات.

بعد أن تقوم بتوصيل ال socket إما بالميتود connect () أو accept () ، يمكنك استخدام send () و recv () لنقل الحزم عبر ال socket.
عند إستدعاء send ، يمكنك تمرير له السلسلة التي تريدها للنقل ، وسوف يعيد عدد البايتات التي تم إرسالها.
استدعاء receive() يستقبل عدد من البايتات من الإتصال ويعيد هذه البايتات في سلسلة.
إذا كانت هناك بيانات موجودة في مخزن TCP المؤقت على جهاز الكمبيوتر الخاص بك (أي أنه قد تم إرسال شيء إليك) ، فسوف تقوم recv () بإرجاع تلك البيانات أو جزء من تلك البيانات وفقا لعدد البايتات التي حددتها.
إذا لم تكن هناك بيانات في مخزن TCP المؤقت ، فسيقوم recv () بإيقاف تنفيذ البرنامج ويجلس هناك حتى يتم استلام البيانات.
لذلك ، سيرجع recv () البيانات إليك دائماعندما يكون الاتصال نشيط.
المرة الوحيدة التي لن يقوم فيها recv () بإرجاع البيانات إليك هي عندما يتم إسقاط الاتصال.
إذا تم إسقاط الاتصال ، فلن يؤدي إستدعاء recv () إلى إرجاع أي شيء.

نأخذ مثال ل TCP Client

كود PHP:
import socket
socket
=socketsocket (socket.AF_INETsocket.SOCK_STREAM)
socket.connect ((" 127.0.0.1" 140)
print 
socket.recv(2048)
socket.send("mail from: [email protected]\n")
print 
socket.recv(2048)
socketsend("to: [email protected]\n")
print 
socket.recv (2048)
socket.send("data\n")
print 
socket.recv(2048)
socket.send ('From: yesecurity\n")
mysocket.send("Subject: Sockets.\n\n")
mysocket.send("Hello World!\n\n.\n")
print socket.recv (2048)
socket.close() 
هنا ، يمكنك رؤية مثال على عميل TCP بسيط يتصل بخادم بريد إلكتروني ويرسل أوامر SMTP لإرسال بريد إلكتروني.

أولا ، استردنا الموديول socket
بعد ذلك ، نقوم بإنشاء مثيل جديد لكائن socket يسمى socket
البرامتر ل socket.socket() ينشأ كائن socket TCP/IPv4
تعني "socket.AF INET" أننا نريد IPv4 socket
تعني "socket.SOCK STREAM" أننا نريد TCP socket
إذا لم يتم تمرير أي إصدار وبروتوكول إلى ميتيود socket ، فستفترض أنك ستقوم بإنشاء سوكت lPv4 / TCP.
لذلك ، السطرين التاليين تفعل الشيء نفسه:

كود PHP:
socket socket.socket()
socket=socketsocket (socket.AF_INETsocket.SOCK_STREAM
بعد ذلك ، نستدعي الميتيود connect () ونؤسس اتصالًا إلى العنوان 127.0.0.1 والمنفذ 140.
الآن وقد تم تأسيس الاتصال ، يمكننا استخدام الميتيود send () و recv () للتفاعل مع المضيف البعيد الذي اتصلنا به.
وأخيرًا ، يتم استدعاء الميتيود close () لإغلاق
الاتصال.

كود PHP:
import socket
socket
=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
socket.bind(("",5000)) 
socket.listen(1)
conn,addr socket.accept()
while 
True:
  
req conn.recv(2048)
  print 
"Got request : "str(request)
  if 
"adduser" in request.lower()
    
conn.send("New User Added! .\n")
  if 
"reboot" in request.lower():
    
conn.send("System Rebooting now. \n"
الخادم أكثر تعقيدا من العميل ، ولكن ليس كثيرا.
بدلاً من استخدام الميتيود connect () ، نستدعي bind () ، listen () ، accept () ، وننتظر الاتصال الوارد.
بمجرد استلامه ، ندعو send () و recv () بنفس الطريقة التي قمنا بها مع العميل.
يأخذ bind() مصفوفة كبرامتر وحيد وتحتوي المصفوفة على عنوان الآيبي والمنفذ الذي نتصنت عليه.
إذا كان عنوان IP فارغا ، فسيتم ربط ال socket بجميع عناوين IP التي تم تعيينها للهوست.
تحدد البرامتر عدد الاتصالات المتزامنة التي يمكن أن يقبلها الخادم.
تقوم الميتيود accept بإنشاء كائن socket الذي يمكنك استخدامه لإرسال البيانات وتلقيها عبر الاتصال.

بالتوفيق لكم
 

 

 

مايفعله الهكرز هو معرفة التكنولوجيا وتجربتها بطرق لايمكن ان يتخيلها الكثير من الناس .
ولديهم رغبة قوية في مشاركة هذه المعلومات مع الآخرين
وتوضيحها للاشخاص الذي قد تكون مؤهلاتهم الوحيدة الرغبة في التعلم.

[email protected]
رد مع اقتباس
3 أعضاء قالوا شكراً لـ zero-cool على المشاركة المفيدة:

الكلمات الدلالية (Tags)
.., 1, part, python, socket


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
Python Regular Expressions .. Part 3 zero-cool لغات البرمجة التفسيرية 0 03-06-2019 12:00 PM
Python Regular Expressions .. Part 2 zero-cool لغات البرمجة التفسيرية 1 03-06-2019 10:36 AM
Python Regular Expressions .. Part 1 zero-cool لغات البرمجة التفسيرية 0 02-06-2019 11:19 PM
Python File Handling .. Part 2 zero-cool لغات البرمجة التفسيرية 0 02-06-2019 05:02 AM
Python File Handling .. Part 1 zero-cool لغات البرمجة التفسيرية 0 02-06-2019 01:05 AM


الساعة الآن 12:33 PM