Stuff for Geeks
158 subscribers
181 photos
38 videos
178 files
575 links
Admin: @the_mhbr
Download Telegram
Forwarded from Source Byte (t a h a)
مقداری سوکت پروگرمینگ در لینوکس

فرض کنید بخوایم یه سرور بسازیم که دیتا رو از طریق tcp یا udp از چندتا کلاینت دریافت کنیم. به چه مراحلی نیاز خواهیم داشت؟

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

پس اولین مرحله میشه ساختن سوکت که با تابع socket از هدرفایل sys/socket.h صورت میگیره. مثلا اگه یه سوکت برای ارتباط tcp خواسته باشیم، کافیه خط زیر رو وارد کنیم
int file_desc = socket(PF_INET, SOCK_STREM, 0);

پارامتر اول تابع خانواده پروتکل مدنظرمون هست که اینجا برای IPv4 باید PF_INET باشه. پارامتر دوم نوع سوکت مدنظرمونه که اینجا برای tcp، مقدار SOCK_STREAM قرار داده شده. پارامتر آخر هم همیشه صفره(دقیق نمیدونم چیه)

خب. تا الان یه سوکت ساختیم
مرحله بعد اینه که این سوکت رو به یه آدرس آیپی و پورت وصل کنیم. برای اینکار باید توی سرور از تابع bind و توی کلاینت از connect استفاده کنیم. درواقع تابع بایند یه سوکت رو به یه آدرس لوکال مرتبط میکنه درحالیکه connect، سوکت رو به یه آدرس ریموت وصل میکنه. پروتوتایپ تابع connect به شکل زیر هست:
int connect (int fd, struct sockaddr* remote_addr, socklen_t* size)

پروتوتایپ تابع بایند هم همین شکلی هست. نکته‌ای که باید اینجا موردتوجهمون باشه، sockaddr هست.
این استراکچر، یه فرمت عمومی برای آدرس‌دهی های مختلف توی پروتکل‌های مختلف هست. یعنی آدرس‌های ما توی هر پروتکلی باید نهایتا به پوینتری به این استراکچر تبدیل بشن.
اما برای پروتکل آیپی، استراکچر sockaddr_in رو داریم که دقیقا سایز یکسانی با sockaddr داره و شامل فیلدهای آیپی، پورت و پدینگ(برای رسیدن سایزش به سایز sockaddr میشه). پس کافیه از این استراکچر برای آدرس‌هامون استفاده کنیم و نهایتا موقع پاس دادنش به تابع connect، یه استاتیک کست ساده انجام بدیم.

نکته آخری که میمونه این هست که باید توی استراکچر sockaddr_in، پورت و آیپی به شکل big endian ذخیره بشن درحالیکه کامپایلرما little endian هست. برای این مورد هم یه سری تابع آماده داریم به اسمهای htons و inet_aton که در پست‌های بعدی توضیح خواهم داد

ادامه دارد:)

#Linux
#Programming
#Network
🔥2
Stuff for Geeks
مقداری سوکت پروگرمینگ در لینوکس فرض کنید بخوایم یه سرور بسازیم که دیتا رو از طریق tcp یا udp از چندتا کلاینت دریافت کنیم. به چه مراحلی نیاز خواهیم داشت؟ اول از همه باید یه سوکت بسازیم. سوکت توی لینوکس فقط یه فایله که لایه ابسترکشن حساب میشه. اینجوری که بعد…
مقداری سوکت پروگرمینگ در لینوکس
قسمت دوم


خب تا اینجا فهمیدیم که باید یه سوکت بسازیم (با تابع socket) و بعد از اون اگه کلاینت هستیم تابع connect و اگه سرور هستیم تابع bind رو با یه آدرس مناسب (یه متغیر از جنس sockaddr_in) صدا بزنیم تا سوکتمون که صرفا یه فایله، به یه آدرس ریموت یا لوکال وصل بشه.

نکته‌ای که آخر پست قبل بود، این بود که مقادیر ما big endian هستن توی توابع شبکه درحالیکه کامپایلر little endian هست. برای حل این مشکل یه سری تابع داریم.
اول از همه برای تبدیل اعداد صحیح، توابع زیر رو داریم که توی هدر arpa/inet.h تعریف شدن:

htonl(uint32_t longvalue)
یک عدد لانگ رو از لیتل اندین به بیگ اندین تبدیل میکنه (host to network long)
کافیه به جای l که مخفف لانگ هست و برای اعداد چهار بایتی استفاده میشه، s بذاریم که مخفف short هست و برای اعداد دوبایتی استفاده میشه تا به تابع htons برسیم.
همچنین میتونیم بجای hton از ntoh استفاده کنیم تا یه عدد big endian رو به little endian تبدیل کنیم.
(یادآوری: عدد یک پورت، یک عدد دوبایتی هست. یعنی عدد پرت میتونه از صفر تا ۶۵۵۳۵ باشه و برای همین باید برای تبدیل شماره پورت از تابع htons استفاده کنیم)


توابع مفید بعدی‌ای که توی این هدر داریم، برای تبدیل یه استرینگ به آیپی ازشون استفاده می‌کنیم. تابع inet_aton، یه رشته اسکی که شامل یه آیپی جدا شده با نقطه هست رو می‌گیره و آیپی عددی مناسب برای استفاده توی sockaddr_in رو بهمون میده(ascii to network).


پس نهایتا تا الان می‌تونیم یه آدرس مناسب برای سوکتمون تعریف کنیم. مثلا فرض کنید من کلاینت هستم و قراره به یه سرور با آیپی 10.11.12.13 روی پورت 4050 وصل بشم.

متغیر sockaddr_in ای که نیاز خواهم داشت، به شکل زیر تعریف میشه:
int socket_fd;
sockaddr_in serverAddr;

socket_fd=socket(PF_INET, SOCK_STREAM, 0);

memset(serverAddr, 0, sizeof(serverAddr));

serverAddr.sin_family=AF_INET; //inet addres family
serverAddr.sin_port=htons(4050);
serverAddr.sin_addr=inet_aton("10.11.12.13");

connect(socket_fd, (sockaddr_in*)&serverAddr, sizeof(serverAddr));

و به این ترتیب، کلاینت ما به سرورمون وصل خواهد شد!

در ادامه درمورد نحوه ارسال و دریافت دیتا صحبت خواهیم کرد

ادامه دارد :)

#Linux
#Programming
#Network
🔥2
ایشالا که IrLeaks داره دروغ میگه🎃
پ.ن: پیامو پاک کردن
😁1
📌انواع پروتکل های شبکه و اینترنت (بخش اول) | قسمت هشتم مفاهیم شبکه و اینترنت در راه‌اندازی ماژول ESP8266
👈#سیسوگ
🖋 نویسنده: #حمیدرضا_روشنی
مدت مطالعه: 10 دقیقه


💭 مقدمه
از این که هفت قسمت با من همراه بودید، بسیار خوشحال هستم و امیدوارم تا اینجا خسته نشده باشید. شاید پیش خودتون بگید “عنوان این مقاله با محتوای این هشت قسمت فرق داره! چرا باید این مطالب را بخونم؟!” در جواب باید بگم شاید در ظاهر مطالب هفت قسمت گذشته و حتی این قسمت ربطی به ماژول ESP8266 نداشته باشند؛ ولی موقع راه‌اندازی و استفاده از این ماژول حتماً به موارد توضیح داده شده در این فصول برخواهید خورد و باید معانی و مفهوم اونها را بدونید.


✍️ خلاصه کلی
توی این قسمت سعی کردم هر نوع پروتکلی که (تا زمان نوشتن این مقاله) در شبکه محلی و یا شبکه اینترنت استفاده میشند و اسم اونها را زیاد می‌شنوید و در راه ­اندازی ESP8266 بدرد می­خورند را توضیح بدم. البته این ماژول فقط چند پروتکل (اصلی و مهم) را پشتیبانی میکنه ولی سعی کردم خیلی جامع­تر توضیح بدم.


⚠️ مطلب بالا، تنها خلاصه و کلیتی از اصل مقاله است، مقاله کامل را می توانید در وب سایت سیسوگ (ادامه مطلب) مطالعه فرمایید.


👈🏻 ادامه مطلب

📣 عضویت در کانال تلگرام سیسوگ
Stuff for Geeks
مقداری سوکت پروگرمینگ در لینوکس قسمت دوم خب تا اینجا فهمیدیم که باید یه سوکت بسازیم (با تابع socket) و بعد از اون اگه کلاینت هستیم تابع connect و اگه سرور هستیم تابع bind رو با یه آدرس مناسب (یه متغیر از جنس sockaddr_in) صدا بزنیم تا سوکتمون که صرفا یه فایله،…
مقداری سوکت پروگرمینگ در لینوکس
قسمت سوم


بسیارخب
سوکت کلاینت رو ساختیم و به آیپی و پورت مدنظرمون وصلش کردیم. حالا چجوری میتونیم دیتا بفرستیم؟

خب گفتیم که یه سوکت یه ابسترکشن لیره که باعث میشه یه فایل داشته باشیم که با نوشتن و خوندن ازش بتونیم دیتا رو ارسال و دریافت کنیم.
پس باید بتونیم مستقیم با سیستم‌کال های write و read دیتا رو بفرستیم و بخونیم.

جواب اینه که بله کاملا درسته. میتونیم
ولی یه سری کمبودها داریم اینجوری. درواقع چون این توابع برای نوشتن و خوندن توی فایلهای معمولی نوشته شدن، قابلیت‌های اضافه‌ای که توی پروتکل‌های tcp یا پروتکل‌های لایه‌های پایین ترش وجود دارن رو دیگه نداریم.

مثلا ما میتونیم یه فلگ MSG_DONTROUTE داشته باشیم که وقتی فعالش کنیم، دیتامون سمت gateway نره و مستقیم به سیستمهایی که توی لنمون هستن ارسال بشه یا فلگ های فراوان دیگه ای.

به همین دلیل چندتا تابع مخصوص ارسال و دریافت دیتا روی سوکت‌ها داریم.

دوتای معروفشون send و recv هستن و مدلهایی که تابحال استفاده نکردم، sendto و sendmsg و recvfrom و recvmsg هستن که یه مقدار قابلیتهای بیش‌تری دارن.

پروتوتایپ تابع send به شکل زیر هست:
ssize_t send(int sockfd, const void* buffer, size_t len, int flags)

فک میکنم مشخصه که چه پارامترهایی باید به این تابع بدیم. اول از همه فایل دیسکریپتور سوکتمون رو میدیم، بعد یه پوینتر به دیتایی که قراره ارسال کنیم، سایز این دیتا و نهایتا فلگ‌هایی که لازم داریم(مثلا همون فلگی که باعث می‌شد روتینگ نداشته باشیم).

این تابع تعداد بایتهایی که تونسته ارسال کنه رو بر می‌گردونه

دقت کنین که اگه فلگ رو صفر بدیم، عملا این تابع با تابع write هیچ فرقی نخواهد داشت!

برای دریافت دیتا هم تابع recv رو داریم که تقریبا شبیه send تعریف میشه:
ssize_t recv(int sockfd, const void* buffer, size_t len, int flags)

اینجا هم پارامترها همون قبلیان، فقط چیزی که تابع برمی‌گردونه تعداد بایتهایی که تونسته بخونه.


کلاینتمون اینجا تموم میشه و سرور میمونه که توی پست‌های بعدی بهش خواهیم پرداخت

ادامه دارد:)
#Linux
#Programming
#Network
🔥1
میدونستی اگه بخوای تو یه کشور اروپایی دنبال کار بگردی، اون شرکتی که براش اپلای میکنی باید ویزای کاریِ تو رو اسپانسر کنه تا بتونی به راحتی و بدون دردسر به اون کشور مهاجرت کنی؟


حالا حساب کن اگه اون شرکت، ریلوکیشن پکیج هم داشته باشه که دیگه چی از این بهتر 😇

یعنی چی؟

یعنی هزینه ی بلیط هواپیما، اجاره خونه برای یک یا دوماه اول و بقیه ی هزینه های حمایتیِ دیگه برای شروع زندگی تو یه کشور جدید رو پرداخت کنه، یه کمک و پشتوانه ی خیلی قوی برات محسوب بشه و دغدغه ها و نگرانیهای تو رو برای استارت زندگی جدیدت تا حد زیادی برطرف کنه.

از طرفی هممون میدونیم لینکدین یکی از قویترین سایتها در زمینهی کاریابیِ بین المللی هست؛ ولی خیلی از موقعیتهای شغلی معرفی شده توسط لینکدین، #نیروی_لوکال میخواد و در نتیجه دلیل خیلی از ریجکتی هایی که پیش میاد اینه که تو اون کشور نیستی.

بچه ها وبسایت #ریلوکیشن_جابز همه ی این نیازها رو مرتفع میکنه.

این وبسایت فوق العاده کاربردی هست و با موتور جستجوی قدرتمندی که داره، شبانه روزی در حال بررسی این موقعیتها هست و به محض پیدا شدن یه موقعیتی که ویزا اسپانسر میکنه و ریلوکیشن پکیج میده، اون رو برات لیست میکنه که بتونی بهش دسترسی پیدا کنی.

همچنین موقعیت های ریموت جهان که امکان کار با ایرانی ها رو داره هم تو این وب سایت براتون لیست میشه

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

https://relocationjobs.org
Forwarded from HuntLearn
ویدئو ورکشاپ سرویس‌هانتینگ؛ به تدریس مهندس رضا شریف زاده در یوتیوب آپلود شد! منتظر حمایت شما عزیزان هستیم🙏🏼

https://www.youtube.com/watch?v=BegoBUg5NiU
1
Forwarded from #root@hack (𝙍𝙄𝘾𝙃Δ𝙍𝘿)
📦Курсы по реверс инжинирингу от ILLEGAL7

содержание курса:
Advanced software cracking
Cracker Tools 2.8
Dotnet Software Reverse Engineering And Static Analysis Course
Ransomware virus course
Reverse Engineering Course
Software Cracking Course

🔗ссылка на скачивание

пароль: Theillegalhacker7@@@
Please open Telegram to view this post
VIEW IN TELEGRAM
Cling, a c++ interactive interpreter

https://root.cern/cling

#Tool
#cpp
دوستان متاسفانه دیگه فعالیت نخواهیم داشت😔
این کانال هم داشته باشید به عنوان آخرین پست کانال(حداقل از طرف بنده)

https://www.youtube.com/@iotwithiman/

پلی لیست کامل آموزش STM32 و سیستم های کنترل دیجیتال
💔4
برای آموزش QML هم Downloadly یه سری دوره از Udemy آپلود کرده با عناوین
Qt6 and Qml for begginers
Qt6 and Qml for Intermediate
Qt6 and Qml for Advanced

بنظرم خوب هستن
#cpp
#qt
#programming
2
همزمانی در سی‌پلاس‌پلاس
پست یک

خب سی‌پلاس‌پلاس و stl یه مجموعه کاملی برای concurrency دارن.
مهم ترینش شاید بشه گفت کلاس std::thread باشه که ریسورسای لازم یک ثرد رو از سیستم عامل می‌گیره. فرض کنین بخوایم یه تابع رو به شکل همزمان اجرا کنیم شکل کلی برنامه اینجوری میشه:
#include <thread>

void someConcurrentFunction(){}

int main(){
auto th=std::thread(someFunction);
th.join(); //or th.detach()
}

نکته های خیلی زیادی داره این چندخط که سعی میکنم چندتاشو بگم

۱) یه آبجکت ثرد به محض ساخته شدن، شروع به اجرا میکنه و با stl تاجایی که بنده می‌دونم نمی‌تونیم ثردی که از اول ساسپند شده بسازیم

۲) بعد از اینکه به آبجکت از std::thread می‌سازیم، یا باید joinاش رو صدا کنیم تا ثرد اصلی تا موقع تموم شدن کارش صبر کنه یا detach رو صدا کنیم تا ثرد بره توی پس زمینه اجراشه (کنترل ثرد بیوفته دست کتابخانه رانتایم cpp).
حالا سوال اینه اگه جوین یا دیتچ رو صدا نکنیم چه اتفاقی میوفته؟
اتفاقای بد
خیلی بد😂

۳) توی دیستراکتور thread، اگه یه ثرد جوین یا دیتچ نشده باشه، تابع std::terminate صدا زده میشه که کلا برنامه رو می‌بنده پس حتما باید قبل از ازبین رفتن آبجکت یکی از این‌دوتا تابع رو صدا بزنیم. (یکی از جاهایی که مهمه حواسمون به این نکته باشه، وقتیه که بین ساختن آبجکت و جوین یا دیتچ کردنش یه کد داشته باشیم که exception تولید کنه اینجورجاها بهتره از std::jthread استفاده کنیم. توضیحش خارج از این پسته)

۴) یه ثرد وقتی join یا detachاش صدا زده میشه، تابع std::thread::joinable اش دیگه تا ابد false برمی‌گردونه. دلیلش سادست. اگه join رو صدا زده باشیم و بعدش joinable رو، قاعدتا تا ثرد تموم نشه، به joinable نمی‌رسیم و وقتی برسیم ثرد تموم شده و دیگه وجود نداره که بخوایم جوینش کنیم. اگه دیتچ کرده باشیم هم یه ثرد داریم که دیگه دست ما نیست کنترلش و کلا هیچ کنترلی روش نخواهیم داشت. پس باز هم منطقیه که joinable فالس برگردونه.

درواقع دیستراکتور std::thread هم از همین تابع استفاده میکنه تا چک کنه ببینه باید terminate کنه یا نه

۵) اگه تابعی که قراره به صورت همزمان اجرا بشه یه سری متغیر ورودی داشته باشه، توی std::thread این متغیرا رو پاس میدیم ولی باید حواسمون باشه که متغیرها کپی خواهند شد. حتی اگه رفرنس باشن🥸

این یه سری نکته داره که ایشالا بعدا میگم

ادامه

#programming
#cpp
#concurrency