localho3t
localho3t
خواندن ۷ دقیقه·۲ سال پیش

سوکت نویسی با پایتون - بخش اول (انواع خانواده سوکت)

سلام دوستان امیدوارم حالتون خوب باشه.

امروز اومدم که تمام داکیومنت سوکت پروگرمینگ پایتون رو براتون ترجمه کنم.

برو که بریم ........

منبع :

https://docs.python.org/3/library/socket.html



این ماژول در پایتون دسترسی به رابط سوکت BSD را فراهم میکند و در تمامی پلتفرم ها مورد استفاده قرار میگیرد.

توجه ! برخی از رفتار ها ممکن است وابسته به پلتفرم نباشد ، برای اینکه در ارتباطات ممکنه یک سری از API های سیستمی صدا زده بشه.

پایتون یک سیستم فراخوانی یونیکسی هست که به صورت شئ گرا برای کتابخونه سوکت نویسی پایتون استفاده می شود . تابع socket یک شئ سوکت بر میگرداند که به روش های مختلف قابل پیاده سازی می باشد و پارامتر های بیشتری و سطح بالاتری نسبت به زبان c دارد . مثل عملیات read و write در فایل های پایتون و یا تخصیص بافر پدر عملیات های خودکار و حتی دریافت طول بافر برای ارسال های ضمنی.

خانواده های سوکت

بسته به سیستم و نوع ساخت باید گفت تمامی خانواده های سوکت توسط این ماژول پشتیبانی میشود.

شئ‌ سوکت نیازمند قالب های خاصی برای اتصال می باشد که در زمان ساخت سوکت باید آن را اجرا کرد. که تمامی قالب های ادرس را در زیر لیست میکنیم:

  • خانواده AF_UNIX

این سوکت متصل به یک گره به صورت رشته ای با استفاده از رمزنگاری فایل و یا کنترل کننده خطای srogateescape نمایش داده میشود و یک ادرس در فضای لینوکس به عنوان یک شئ بایت مانند اما خالی بازگردانده میشود . به یاد داشته باشید که سوکت ها در این فضا میتوانند با سوکت های معمولی ارتباط برقرار کنند اما ممکن است نیازمند هر دو ادرس می باشد.

  • خانواده AF_INET

در این خانواده یک جفت ( ایپی و پورت ) استفاده میشود که ممکن است ادرس اینترنتی یا ip های ورژن۴ باشد و پورت هم یک عدد صحیح .

در ادرس های ipv4 دو فرم خاص قالب استفاده است که یکی از نشان دهنده INADDR_ANY که برای اتصال به همه کانکشن ها مورد استفاده است و دیگری یک رشته '<broadcast>' که نشان دهنده INADDR_BROADCAST می باشد اما در نظر داشته باشید این رفتار با ایپی های ورژن ۶ سازگار نیست و اگه میخواین از این حالت استفاده کنید نمیتوانید از ipv6 استفاده کنید.

  • خانواده AF_INET6

در این خانواده باید برای اتصال از چهار پارامتر استفاده کرد (ip، port، flowinfo، scope_id) .

که flowinfo و scope_id اعضای sin6_flowinfo و sin6_scope_id را در ساختار sockaddr_in6 در C است.

میتوان دو مورد flowinfo، scope_id را حذف کرد اما با حذف scope_id در زمان دستکاری ip ممکن است مشکلاتی پیش آید.

  • خانواده AF_NETLINK

در این خانواده سوکت ها به صورت (pid, groups) نشان داده میشوند.

  • خانواده AF_TIPC

پشتیبانی TIPC فقط برای لینوکس با استفاده از AF_TIPC قابل استفاده است. TIPC یک پروتکب شبکه ای متن باز و غیر مبتنی بر ip هست که برای استفاده در محیط های خوشه ای طراحی شده است.

آدرس ها با یک تاپل نمایش داده میشوند که فیلد های آن به نوع آدرس بستگی دارد . اما شکل کلی تاپل به صورت (addr_type، v1، v2، v3 [، scope]) است که در آن :

گزینه addr_type یکی از TIPC_ADDR_NAMESEQ، TIPC_ADDR_NAME، یا TIPC_ADDR_ID است.

دامنه یکی از TIPC_ZONE_SCOPE، TIPC_CLUSTER_SCOPE، و TIPC_NODE_SCOPE است.

اگر addr_type حالت TIPC_ADDR_NAME است، نوع سرور v1، شناسه پورت v2 و v3 باید 0 باشد.

اگر addr_type حالت TIPC_ADDR_NAMESEQ باشد، v1 نوع سرور، v2 شماره پورت پایین و v3 شماره پورت بالایی است.

اگر addr_type حالت TIPC_ADDR_ID باشد، v1 گره، v2 مرجع است و v3 باید روی 0 تنظیم شود.


  • خانواده AF_CAN

در این خانواده برای اتصال از یک تاپل استفاده میشود که رابط آن یک شبکه است مانند can0 نشان داده میشود. که برای دریافت بسته میتوان از تمامی رابطه های این شبکه استفاده کرد.

پروتکل CAN_ISOTP :‌

یک تاپل (interface, rx_addr, tx_addr) نیاز دارد که در آن هر دو پارامتر اضافی یک عدد صحیح طولانی بدون علامت هستند که نشان دهنده یک شناسه CAN (استاندارد یا توسعه یافته) هست.

پروتکل CAN_J1939 :

یک تاپل (interface, name, pgn, addr) نیاز دارد که در آن پارامترهای اضافی عبارتند از عدد صحیح بدون علامت 64 بیتی که نام ECU را نشان می دهد، یک عدد صحیح بدون علامت 32 بیتی نشان دهنده شماره گروه پارامتر (PGN) و یک عدد صحیح 8 بیتی نشان دهنده آدرس.

  • خانواده PF_SYSTEM

یک رشته یا یک تاپل (id، واحد) برای پروتکل SYSPROTO_CONTROL از خانواده PF_SYSTEM استفاده می شود. رشته نام یک کنترل هسته با استفاده از شناسه اختصاص داده شده به صورت پویا است. اگر شناسه و شماره واحد کنترل هسته مشخص باشد یا از شناسه ثبت شده استفاده شده باشد، می توان از تاپل استفاده کرد.

  • خانواده AF_BLUETOOTH

این خانواده از پروتکل ها و فرمت های آدرس زیر پشتیبانی می کند:

حالت BTPROTO_L2CAP (bdaddr، psm) را می پذیرد که در آن bdaddr آدرس بلوتوث به عنوان رشته و psm یک عدد صحیح است.

حالت BTPROTO_RFCOMM (bdaddr، کانال) را می پذیرد که در آن bdaddr آدرس بلوتوث به عنوان رشته و کانال یک عدد صحیح است.

حالت BTPROTO_HCI (device_id،) را می‌پذیرد که در آن device_id یک عدد صحیح یا یک رشته با آدرس بلوتوث رابط است. (این به سیستم عامل شما بستگی دارد؛ NetBSD و DragonFlyBSD انتظار یک آدرس بلوتوث دارند در حالی که بقیه موارد انتظار یک عدد صحیح را دارند.)

حالت BTPROTO_SCO bdaddr را می‌پذیرد که در آن bdaddr یک شیء بایتی است که آدرس بلوتوث را در قالب رشته‌ای دارد. (مثلا b'12:23:34:45:56:67') این پروتکل تحت FreeBSD پشتیبانی نمی شود.

  • خانواده AF_ALG

یک رابط مبتنی بر سوکت لینوکس برای رمزنگاری هسته است. یک سوکت الگوریتم با دو تا چهار عنصر (نوع، نام [، feat [، ماسک]]) پیکربندی شده است، که در آن:

نوع، نوع الگوریتم به عنوان رشته است، به عنوان مثال. aead، hash، skcipher یا rng.

و name نام الگوریتم و حالت عملیات به عنوان رشته است، به عنوان مثال. sha256، hmac(sha256)، cbc(aes) یا drbg_nopr_ctr_aes256.

و feat و mask اعداد صحیح 32 بیتی بدون علامت هستند.

  • خانواده AF_VSOCK

امکان ارتباط بین ماشین های مجازی و میزبان آنها را فراهم می کند. سوکت ها به صورت یک تاپل (CID، پورت) نشان داده می شوند که شناسه متنی یا CID و پورت اعداد صحیح هستند.

  • خانواده AF_PACKET

یک رابط سطح پایین به طور مستقیم به دستگاه های شبکه است. بسته‌ها با تاپل (ifname، proto[، pkttype[، hatype[، addr]]] نشان داده می‌شوند که:

حالت ifname - رشته ای که نام دستگاه را مشخص می کند.

حالت proto - یک عدد صحیح به ترتیب شبکه بایت که شماره پروتکل اترنت را مشخص می کند.

حالت pkttype - عدد صحیح اختیاری که نوع بسته را مشخص می کند:

حالت PACKET_HOST (پیش‌فرض) - بسته خطاب به میزبان محلی.

حالت PACKET_BROADCAST - بسته پخش لایه فیزیکی.

حالت PACKET_MULTICAST - بسته به آدرس چندپخشی لایه فیزیکی ارسال می شود.

حالت PACKET_OTHERHOST - بسته به میزبان دیگری که توسط یک درایور دستگاه در حالت غیرقانونی دستگیر شده است.

حالت PACKET_OUTGOING - بسته ای که از میزبان محلی نشات می گیرد و به سوکت بسته باز می گردد.

حالت hatype - عدد صحیح اختیاری که نوع آدرس سخت افزار ARP را مشخص می کند.

حالت addr - شی بایت مانند اختیاری که آدرس فیزیکی سخت افزار را مشخص می کند، که تفسیر آن به دستگاه بستگی دارد.

  • خانواده AF_QIPCRTR

یک رابط مبتنی بر سوکت لینوکس برای برقراری ارتباط با سرویس‌هایی است که روی پردازنده‌های مشترک در پلتفرم‌های Qualcomm اجرا می‌شوند. خانواده آدرس به صورت یک تاپل (گره، پورت) نشان داده می شود که در آن گره و پورت اعداد صحیح غیر منفی هستند.

  • خانواده IPPROTO_UDPLITE

گونه‌ای از UDP است که به شما امکان می‌دهد مشخص کنید چه بخشی از یک بسته با چک‌سوم پوشانده شده است. دو گزینه سوکت اضافه می کند که می توانید آنها را تغییر دهید. self.setsockopt (IPPROTO_UDPLITE، UDPLITE_SEND_CSCOV، طول) بخشی از بسته‌های خروجی را تغییر می‌دهد که توسط جمع کنترلی پوشش داده می‌شوند و self.setsockopt (IPPROTO_UDPLITE، UDPLITE_RECV_CSCOV، طول) بسته‌هایی را که اطلاعات بسیار کمی را پوشش می‌دهند، فیلتر می‌کند. در هر دو مورد طول باید در محدوده (8، 2**16، 8) باشد.

چنین سوکتی باید با سوکت (AF_INET، SOCK_DGRAM، IPPROTO_UDPLITE) برای IPv4 یا سوکت (AF_INET6، SOCK_DGRAM، IPPROTO_UDPLITE) برای IPv6 ساخته شود.

اگر از نام میزبان در قسمت میزبان آدرس سوکت IPv4/v6 استفاده می‌کنید، برنامه ممکن است رفتار غیر قطعی نشان دهد، زیرا پایتون از اولین آدرس بازگشتی از وضوح DNS استفاده می‌کند. بسته به نتایج حاصل از وضوح DNS و/یا پیکربندی میزبان، آدرس سوکت به صورت متفاوتی به آدرس IPv4/v6 واقعی تبدیل می‌شود. برای رفتار قطعی از یک آدرس عددی در بخش میزبان استفاده کنید.

همه خطاها استثناهایی را ایجاد می کنند. استثناهای عادی برای انواع آرگومان نامعتبر و شرایط خارج از حافظه را می توان مطرح کرد. خطاهای مربوط به معنای سوکت یا آدرس باعث افزایش OSError یا یکی از زیر کلاس های آن می شود.

حالت غیر مسدود از طریق setblocking پشتیبانی می شود. تعمیم این بر اساس زمان‌بندی از طریق ()settimeout پشتیبانی می‌شود.






خانوادهpythonsocket
برنامه نویس و گیک D:
شاید از این پست‌ها خوشتان بیاید