به نام خدا
طبق در خواست یکی از دوستان تصمیم گرفتم تا این تاپیکو دوباره بروز کنیم.
مطلبی که اینبار میخوام بزارم مربوط میشه به نحوه استفاده از Winsock (Windows Socket) که در اصل یکی از API های Windows میباشد که برای ارتباط در شبکه استفاده میشوند.در پست های قبلی سورس کدهایی که در آن از این روش استفاده شده رو قرار دادم (SERVER/CLIENT) ولی با توجه به اینکه درک این کدها برای افراد مبتدی یکم دشوار بود تصمیم گرفتم تا این مبحثو به روش ساده و گویا توضیح بدم(با توجه به اینکه منابع فارسی و کامل برای این موضوع اندک هست)
این موضوع یکی از اصلی ترین و پایه ای ترین موارد در ساخت کرم ها بحساب میاد.
همیشه بعد از کشف یک نفوذ پذیری برای نوشتن Exploit مربوط به آن و نفوذ به سیستم آسیب پذیر از این API و توابع اون استفاده میشه.(برای اتصال به سیستم هدف و طزریق ShellCod)
چند نمونه از از کاربرد های این API :
ساخت برنامه ارسال ایمیل – ساخت برنامه های Chat – ساخت مرورگر وب – و ......
--------------------------
نمام توابع Winsock عملیات خودشون رو در یک Socket انجام میدهند.Socket در اصل یک دستگیره (Handle) به یک ارتباط میباشد که در طرف مقابل هم توسط Socket دیگری پشتیبانی میشود.
جالب هست که بدونید هردو خانواده از سیستم عامل های Windows و Unix میتوانند توسط Socket ها با هم ارتباط برقرار کنند.
Socket ها به دو منظور مورد استفاده قرار میگیرند
1-ارسال اطلاعات
2-در یافت اطلاعات
عمومی ترین و پراستفاده ترین Socket ها دارای 2 نوع هستند.
1-streaming socket (SOCK_STREAM)
2-datagram socket (SOCK_DGRAM)
Socket نوع Streaming برای کاربرد هایی طراحی شده هست که نیاز به یک ارتباط قابل اطمینان و موثر دارند که اغلب بصورت جریانی از داده های پشت سر هم از آن استفاده میشود.
Socket نوع Datagram که از پروتوکل UDP استفاده میکنه و دارای بالاترین مقدار Buffer هست.این نوع Socket برای کاربرد هایی طراحی شده که در آن اطلاعات بصورت بسته های کوچک ارسال میشه و نیازی هم به اطمینان بالا در ارتباط نیست. در این نوع Socket هیچ تضمینی برای رساندن اطلاعات به مقصد و صحت اطلاعات وجود نداره. این Socket دارای مزیت هایی هم هست و اون سرعت بالا در ارسال اطلاعات نسبت به Socket نوع قبلی هست و بیشتر در برنامه های پخش صوت و تصویر بصورت زنده از روی شبکه استفاده میشه.
بنده در این آموزش میخواهم از Socket نوع اول و از پروتوکل (Protocol) TCP (Transmission Control Protocol) استفاده کنم.البته استفاده از این Socket فقط محدود به این پروتوکل نیست.
در این قسمت از آموزش بخش های آماده سازی و استفاده از یک Socket را همراه با مثال قرار میدم.
(از Winsock 2.2 استفاده شده)
تعریف مقادیر لازم:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا میخواهیم Winsock رو برای استفاده آماده کنم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا Socket ی که از قبل تعریف کرده بودیمو برای ارتباط آماده سازی میکنیم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا باید Socket ایجاد شده رو امتحان کنیم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر Socket موقع اجرا با اشکال مواجه بشه:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در غیر اینصورت:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این قسمت متغییر ServerAddr رو تنظیم میکنیم.
من برای IP مقدار Local تعریف کردم که در اصل به سیستم خودم وصل میشم ولی میتونید هر IP که خواستید رو امتحان کنید.
برای پورت هم من از پورت 1589 استفاده کردم که شما میتونید اونو به پورت دلخواهتون تغییر بدید.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا میخوایم یک ارتباط با مقصدی که تعیین کردیم برقرار کنیم.
اگر در مورد پارامتر های هر یک از توابع بکار برده شده مشکلی داشتید مطرح کنید.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد از اتصال باید مطمئن بشیم که اتصال با موفقیت انجام شده:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در غیر اینصورت(زمانی که ارتباط با موفقیت انجام بشه)
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
حالا وقتش رسیده که به ارسال و دریافت اطلاعات اقدام کنیم
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد از اینکه بایتهای ما ارسال شد باید از صحت آن مطلع شدیم
برای اینکار مقدار BytesSent رو امتحان میکنیم.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در غیر اینصورت(زمانی که بایتها با موفقیت ارسال شوند)
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد از اینکه کار ما با Socket تمام شد باید اونو از بین ببریم(بصورت زیر):
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای استفاده باید تمام کدهارو پشت هم قرار بدید (در main) و همچنینی تنظیماتی که در پستهای قبلی گفتم رو انجام بدید.
منبع: خودم! (Milad)
پایان.
موفق و پیروز باشید.