<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Pooria Setayesh</title>
        <link>https://virgool.io/feed/@pooria.setayesh</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-18 14:43:39</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/202706/avatar/CCxMV8.png?height=120&amp;width=120</url>
            <title>Pooria Setayesh</title>
            <link>https://virgool.io/@pooria.setayesh</link>
        </image>

                    <item>
                <title>داکر - کانتینر کردن پروژه ی Asp.Net Core</title>
                <link>https://virgool.io/@pooria.setayesh/%D8%AF%D8%A7%DA%A9%D8%B1-%DA%A9%D8%A7%D9%86%D8%AA%DB%8C%D9%86%D8%B1-%DA%A9%D8%B1%D8%AF%D9%86-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%DB%8C-aspnet-core-um7ct1hceqhc</link>
                <description>سلام دوستاندر این مطلب قصد دارم نحوه ی بیلد کردن و پکیج کردن پروژه های Asp.Net Core را برای کانتینر های داکر شرح بدم.اگر با داکر آشنایی ندارید پیشنهاد میکنم این مطلب را مطالعه بفرمایید.من در این مطلب با برنامه ی Docker Desktop  ویندوز کار کرده ام و دستورات در این محیط انجام شده است ولی در لینوکس و مک هم شما با مشکل خاصی مواجه نمی شوید.من یک پروژه ی Asp.Net Core 3.1 را پکیج کرده ام که شما عزیزان میتوانید از این لینک پروژه را در گیت هاب مشاهده و دریافت کنید.چرا برنامه های Asp.Net Core حائز اهمیت هستند؟متن باز هستندکراس پلتفرم هستند ، روی ویندوز ، مک و لینوکس به راحتی اجرا می شوند.برای برنامه های مبتنی بر Cload بسیار عالی هستند مثل وب اپ ها ، اپ های IOT و بک اند موبایلاجزای ماژولار با حداقل سربار، انعطاف پذیری را در هنگام ساختن سولوشن های شما حفظ می کنند.داکر فایل یا DockerFileداکر فایل یک اسکریپت سازنده هستش (Build Script) برای پکیج کردن ایمیج های داکر که فرمت خودشان را دارند و از مجموعه ای از دستورات پشتیبانی می کنند. اگر با (Docker Images) آشنایی ندارید پیشنهاد میکنم این مطلب را مطالعه بفرمایید.هر داکر ایمیجی که شما قصد ساخت آن را دارید نیازمند یک DockerFile مختص به خودش است.شیوه ی رایجی که استفاده می شود ، قرار دادن فایل DockerFile در روت (Root) اصلی پروژه ای که میخواهید داکر کانتینر شود، می باشد.در اینجا به بررسی تعداد محدودی از دستورات به کار برده شده در دکر فایل میپردازیم که بسیار حائز اهمیت هستند.دستور FROM : یک مرحله ساخت جدید را آغاز می کند و  ایمیج پایه را برای دستورالعمل های بعدی تنظیم می کند. یک DockerFile معتبر با دستور Formشروع می شود. دستوراتی که شامل چند Formمی شوند برای اجرای چند مرحله ای به کار برده می شوند که در ادامه بیشتر صحبت می کنیم.دستور WORKDIR : دایرکتوری کار را برای هرگونه دستورالعمل RUN ، CMD ، ENTRYPOINT ،  COPY و ADD تنظیم میکند که در ادامه به تشریح هر یک میپردازیم.دستور RUN :  هرر دستور را در یک لایه جدید در بالای Image فعلی اجرا میکند و نتایج را اصطلاحا Commit میکند. دستور Run دو شکل دارد که به صورت زیر تعریف می شود:به شکل شِل: RUN &lt;Command&gt; به شکل Exe یا قابل اجرا :  RUN [“executable”, “param1”, “param2”]دستور COPY: فایل ها را در داخل کانتینر کپی میکند ، منبع فایل میتواند از فایل های سیتم خودی باشد یا از فولدر های دیگر در کانتینر داکردستور ENTRYPOINT : فرمان (command) را برای اجرا تعیین میکند، هنگامی که کانتینر کردن شروع شده است ، این دستور نیز به دو شکل می باشد که در زیر بررسی شده است.به شکل شِل : ENTRYPOINT command param1 param2به شکل Exe یا قابل اجرا : ENTRYPOINT [“executable”, “param1”, “param2”] بیلد های چند سطحی یا Multistage Buildبیلد های چند سطحی در داکر ورژن 17.05 معرفی شدند و باعث شدند تا ایمیج ها تا حد امکان فشرده تر نگه داشته شوند.با بیلد های چند سطحی ، Docker Build خود را به یک سری مراحل تقسیم می کنید که می توانید نسخه های ساخته شده را را بین آنها کپی کنید  که مزایای خاص خودش را دارد که در زیر عنوان میکنیم :نیازی به تمیز کردن یا پاک کردن (Clean up) فایل های ساخته شده ی غیر ضروری نیست. در حقیقت ، شما می توانید در مراحل میانی به اندازه ای که می خواهید ناکارآمد باشید!در مرحله آخر ، فقط فایل های ساخته شده ی مورد نظر خود را از مراحل قبلی کپی می کنید و فقط Image نهایی را حفظ می کنید. این امر باعث می شود تا تصویر نهایی تا حد ممکن کم حجم شوند.برای هر سطح می توان ایمیج های مختلفی را به کار برد. به عنوان مثال ، من می توانم فقط ایمیج Asp.Net را برای ایمیج نهایی استفاده کنم، در حالی که مراحل Build همه در Sdk Image  قابل انجام است ولی به طور قابل توجی حجم افزایش پیدا میکند.دستور Docker Buildما کد ها و DockerFile را داریم تا پکیج کد را بسازیم و هم اکنون قادر به تولید Docker Image هستیم. برا این کار باید از دستور Docker Build استفاده کنیم به صورت زیر :PS C:\git\dockertest&gt; docker build . -t demoعلامت t- یک برچسب به ایمیج تولید شده اضافه می کند. این مورد اختیاری می باشد ولی به ما کمک میکند تا متوجه شویم کدام ایمیج ، ایمیج نهایی است.سپس ما با دستور docker imagesایمیج تولید شده را تایید میکنیم.PS C:\git\dockertest&gt; docker imagesاکنون توجه داشته باشید که دو Image به صورت زیر تولید شده است:demo (675df3a34134) — 208MBNo Name (319e6260d6bd) — 694MBدلیل آن این است که ما از بیلد چند سطحی استفاده کرده ایم. ایمیج بدون نام ، ایمیج اولیه ای است که ما تمام دستوارت ساخت و انتشار را به صورت یک جا انجام دادیم و و image نهایی حاوی فایل های ساخته شده و منتشر شده است.دستور Docker Runاکنون ما میتوانیم ایمیج مورد نظر را به وسیله ی docker run تست کنیم.PS C:\git\dockertest&gt; docker run -p 8080:80 demoعلامت p- از پورت هاست ما به پورت کانتینر مپ میکند ، در این مثال ما 8080:80 را تعیین کردیم ، هاست ما به پورت 8080 گوش خواهد داد که به پورت 80 در کانتینر فوروارد خواهد شد.اگر مرورگر خودمان را باز کنیم و تایپ کنیم localhost:8080  چیزی که به عنوان خروجی دریافت میکنیم مثل تصویر زیر است. در نهایت پیشنهاد میکنم اگر با داکر آشنایی ندارید این مطلب را مطالعه بفرمایید  همچنین فیلم آموزشی مربوط به این زمینه در این لینک قابل مشاهده است.  برای دانلود سورس پروژه از اینجا اقدام کنید.ممنون از توجه شما</description>
                <category>Pooria Setayesh</category>
                <author>Pooria Setayesh</author>
                <pubDate>Wed, 03 Jun 2020 15:43:24 +0430</pubDate>
            </item>
                    <item>
                <title>چرا مهندسی اجتماعی اهمیت دارد؟</title>
                <link>https://virgool.io/@pooria.setayesh/%DA%86%D8%B1%D8%A7-%D9%85%D9%87%D9%86%D8%AF%D8%B3%DB%8C-%D8%A7%D8%AC%D8%AA%D9%85%D8%A7%D8%B9%DB%8C-%D8%A7%D9%87%D9%85%DB%8C%D8%AA-%D8%AF%D8%A7%D8%B1%D8%AF-auinlceqbbxa</link>
                <description>حملات مهندسی اجتماعی و انواع روش هامهندسی اجتماعی یک متد غیر فنی نفوذ به یک سیستم یا یک شبکه است. این کار در واقع فریب دادن کاربران یک سیستم و متقاعد کردن آنها به انجام کارهای پرفایده برای هکر است. مانند گرفتن اطلاعاتی از آنها که بتوان در شکستن یا دور زدن مکانیزم امنیتی استفاده کرد . درک مفهوم مهندسی اجتماعی مهم است زیرا هکرها می توانند با استفاده از آن به عنصر انسانی یک سیستم حمله کرد و معیارهای فنی امنیتی را دور زد . این متد را می توان در جمع آوری اطلاعات قبل یا طی یک حمله استفاده کرد .یک مهندس اجتماعی معمولا از تلفن یا اینترنت برای فریب مردم به منظور آشکارسازی اطلاعات حساس استفاده می کند یا با گرفتن آنها بر ضد قوانین امنیتی سازمان استفاده می کند .با استفاده از این شیوه مهندسین اجتماعی به جای نفوذ به حفره های امنیتی کامپیوتر , از گرایش طبیعی یک شخص بهره می گیرند تا شخص به سخنانشان اعتماد کنند. همگان موافقند که کاربران پیوند  ضعیفی در امنیت هستند . این اصل چیزی است که عملکرد مهندسی اجتماعی را ممکن می سازد .در زیر یک مثال از مهندسی اجتماعی توسط Kapil Raina که وی هم اکنون از متخصصین امنیتی VeriSign است آورده شده است . این مثال بر پایه یک تجربه واقعی محیط کاری با یک کارمند اسبق می باشد .یک روز صبح سالها قبل گروهی از افراد غریبه وارد یک شرکت بزرگ حمل و نقل می شوند و پس از دسترسی به کل شبکه سازمانی خارج می شوند .آنها چگونه این کار را صورت دادند ؟از طریق بدست آوردن مقادیر اندک دسترسی , بیت به بیت , از شماری از کارمندان همان شرکت . اول آنها حتی قبل از اینکه به محل شرکت پا بگذارند درباره این شرکت به مدت دو روز تحقیق و جستجو کردند . برای مثال یادگرفتند که کلمه رمز نام کارمندان صدا کردن آنها با کلمه HR است . سپس وانمود کردند کلید درب جلویی را گم کرده اند و مرد نگهبان هم اجازه ورود به آنها را داد .سپس وقتی وارد طبقه سوم یعنی منطقه ایمن شدند وانمود کردند که نشان های شناسایی خود را گم کرده اند و لبخندی زدند و یک کارمند مهربان در را برای آنها باز کرد .افراد غریبه می دونستند که مدیر ارشد اجرایی (CFO) خارج از شهر است , پس قادر بودند تا که به دفتر وی وارد شوند و داده های مالی را از کامپیوتر قفل نشده وی بدست آورند . آنها داخل سطل زباله سازمان جستجو کردند و  انواع اسناد مفید را پیدا کردند . آنها از یک سرایدار درخواست کردند تا اسناد خود را در داخل محفظه انتقال زباله گذاشته و به خارج شرکت منتقل کند و خارج از شرکت تحویل آنها دهد .غریب ها صدای مدیر ارشد اجرایی را یادگرفته بودند بنابراین آنها قادر بودند تا تلفن بزنند و وانمود کنند که مدیر ارشد هستند و در یک حمله قرار گرفته اند و به سختی نیازمند پسورد شبکه هستند . از آنجا آنها با استفاده از ابزارهای معمول هک به دسترسی کاربر ارشد دست یافتند .در این مورد , افراد غریبه مشاورین امنیتی شبکه بودند که بدون داشتن هیچ دانشی از کارمندان سازمان , یک بازرسی امنیتی برای مدیر ارشد اجرایی انجام دادند . آنها هرگز هیچ اطلاعات ممتاز و خاصی از مدیر ارشد اجرایی دریافت نکردند اما قادر بودند که تمام دسترسی های خواسته شده را از طریق مهندسی اجتماعی انجام دهند .خطرناک ترین بخش مهندسی اجتماعی این است که شرکت ها با پروسه های تشخیص هویت , فایروال ها , شبکه های خصوصی مجازی (VPNs)  و نرم افزارهای مانیتور شبکه هنوز هم خیلی به روی حملات باز و آسیب پذیر هستند , چونکه مهندسی اجتماعی به طور مستقیم به معیارهای امنیتی حمله نمی کند . به جای آن یک حمله مهندسی اجتماعی معیارهای امنیتی را دورزده و به دنبال عناصر انسانی یک سازمان می رود .هنر دستکاری و سو استفادهمهندسی اجتماعی عبارت است از بدست آوردن اطلاعات حساس یا امتیاز دسترسی ناشایست توسط یک شخص بیگانه بر اساس بنای نامناسب اعتماد در روابط می باشد . هدف یک مهندس اجتماعی فریب دادن شخصی به منظور فراهم کردن اطلاعات ارزشمند یا دسترسی به آن اطلاعات است . مهندسی اجتماعی بر اساس خصوصیت های طبیعی بشر همچون آرزوی مفید بودن , تمایل به اعتماد به مردم و ترس از دچار مشکل شدن شکار می کند . هکرها افرادی که قادر به قاطی شدن و پدیدار شدن به عنوان بخشی از سازمان هستند بیشترین موفقیت را در حمله های مهندسی اجتماعی بدست می آورند . توانایی یکی شدن با افراد معمولا به عنوان بخشی از هنر سواستفاده است . مردم معمولا ضعیف ترین پیوند زنجیره امنیت هستند . یک دفاع موفق بستگی به داشتن پالیسی ها و سیاست ها و آموزش آنها به کارمندان می باشد . مهندسی اجتماعی سخت ترین شکل حمله برای دفاع مقابل می باشد چونکه در آن  یک شرکت نمی تواند بوسیله سخت افزار یا نرم افزار از خود محافظت کندانواع حملات مهندسی اجتماعیحملات مهندسی اجتماعی را می توان به دو نوع معمول تقسیم بندی کرد :متکی به انسانمهندسی اجتماعی متکی به انسان , به هم کنش شخص به شخص برای بازیابی اطلاعات هدف اشاره دارد . یک مثال صدا کردن یک Help Desk  به منظور پیداکردن یک پسورد است .متکی به کامپیوترمهندسی اجتماعی متکی به کامپیوتر , به داشتن نرم افزار کامپیوتر که تلاش کند اطلاعات هدف را بازیابی کند , اشاره دارد . مثالی از آن فرستادن یک ایمیل و درخواست از آنها برای ورود مجدد پسورد در یک صفحه جدید به منظور تایید آن می باشد . این حمله مهندسی اجتماعی همچنین با نام Phishing نیز خواند می شود .حملات مهندسی اجتماعی مبتنی بر انسانتکنیک های مهندسی اجتماعی مبتنی بر انسان را می توان به طور گسترده به دسته بندی های زیر تقسیم کرد :تقلید صدای یک کارمند یا یک کاربر مورد تایید : در حملات مهندسی اجتماعی از نوع تقلید صدا , هکر وانمود می کند که یکی از کارمندان یا کاربران مورد تایید سیستم است . یک هکر می تواند از طریق تظاهر به این که یک سرایدار , کارمند یا پیمانکار است دسترسی فیزیکی نیز پیدا کند . وقتی که کار راحت شد هکر از سطل زباله , دسکتاپ یا سیستم ها کامپیوتری اطلاعات را جمع آوری می کند .وانمود کردن بعنوان یک کاربر مهم : در این نوع حمله , هکر وانمود می کند که یکی از کاربران مهم همچون یکی از قوای اجرایی یا مدیران سطح بالاست که نیاز دستیاری فوری به دسترسی به یکی از کامپیوترها سیستم یا فایل ها دارد . هکر از تهدید استفاده می کند تا یک کارمند سطح پایین تر همچون یک Help Desk به او برای بدست آوردن دسترسی به سیستم کمک کند . اکثر کارمندان سطح پایین از اشخاصی که در جایگاه قدرت قرار می گیرند سوالی نمی پرسند .استفاده از سوم شخص : یکی از دیگر از انواع حملات مهندسی اجتماعی استفاده از سوم شخص می باشد . با استفاده از رویکرد سوم شخص , یک هکر وانمود می کند که اجازه ای از یک منبع مجاز برای استفاده از یک سیستم دارد . این حمله بویژه اگر منبع مجاز معرفی شده در تعطیلات باشد و به منظور تایید نتوان با وی تماس گرفت بسیار موثر خواهد بود .تماس پشتیانی فنی : تماس پشتیبانی فنی برای کمک یک تکنیک کلاسیک مهندسی اجتماعی می باشد . Help Desk و پرسنل پشتیبان فنی آموزش دیده اند تا به کاربران کمک کنند که آنها را به طعمه خوبی برای حمله های مهندسی اجتماعی تبدیل می کند.مشاهده پسورد از روی دست : حملات مهندسی اجتماعی Shoulder surfing یک تکنیک جمع آوری پسوردها از طریق نگاه کردن به دست فرد هنگام لاگین کردن به سیستم است . یک هکر می تواند یک لاگین صحیح کاربر را تماشا کند و سپس از آن پسورد برای دسترسی به سیستم استفاده کند .استفاده از زباله دان : Dumpster diving مستلزم  جستجو در سطل زباله برای پیدا کردن اطلاعات نوشته شده بر روی تکه های کاغذ یا نتایج چاپی کامپیوتر است . هکر غالبا پسوردها , اسامی فایل ها و یا دیگر قطعه های اطلاعاتی محرمانه را پیدا می کنند.یک متد پیشرفته تر به دست آوردن اطلاعات غیر مجاز با نام مهندسی معکوس اجتماعی معروف است . با استفاده از این تکنیک یک هکر شخصیتی می سازد که در موقعیتی از قدرت نمایان شود که کارمندان اطلاعات خود را از هکر پرسش کنند , به جای دیگر راهها . برای مثال, یک هکر می تواند نقش یک کارمند Help Desk را بازی کند و به کاربر اطلاعاتی همچون پسورد را بدهد .حملات مهندسی اجتماعی مبتنی بر کامپیوترحمله های مهندسی اجتماعی مبتنی بر کامپیوتر می تواند شامل موارد زیر باشد :Email attachments  پیوست های ایمیلFake websites  وبسایت های جعلیPop-up windows  پنجره های پاپ آپInsider Attacksحمله از داخل (حمله از سمت کارمندان خودی) : اگر که یک هکر نتوان هیچ راه دیگری برای هک یک سازمان پیدا کند , بهترین گزینه بعدی رخنه کردن در سازمان از طریق استخدام شدن به عنوان یکی از کارمندان یا پیداکردن یک کارمند ناراضی برای کمک در حمله می باشد . حمله های داخلی می تواند قدرتمند باشد چونکه کارمندان دسترسی فیزیکی دارند و می توانند آزادانه در سازمان حرکت کنند . یک مثال ممکن است شخصی باشد که از طریق پوشیدن یک یونیفورم و بدست آوردن دسترسی خود را به عنوان یک مامور تحویل جا زده و به اتاق تحویل یا محل تحویل دسترسی پیدا کند . یک احتمال دیگر اینکه شخصی خود را جای یک نظافتچی که به داخل ساختمان دسترسی دارد و معمولا می تواند بین دفاتر جابجا شود , جا زده . به عنوان آخرین راهکار یک هکر ممکن است رشوه دهد یا اینکه یک کارمند را مجبور کند تا به منظور فراهم کردن اطلاعاتی همچون پسورد ها در حمله با وی شریک شود .سرقت هویت : یک هکر می تواند وانمود کند که یکی از کارمندان است یا شناسه هویت ویراسرقت کند تا اقدام به یک حمله کند . اطلاعات جمع آوری شده از زباله دان یا سرقت پسورد از روی دست یا ترکیبی از آنها با شناسه های جعلی می تواند هکر را به داخل سازمان هدایت کند . ایجاد شخصیتی که بتواند بدون چالش به ساختمان وارد شود , هدف سرفت هویت است .حملات فیشینگ : حملات مهندسی اجتماعی از نوع فیشینگ مستلزم ارسال یک ایمیل است و معمولا خود را به عنوان یک بانک , شرکت کارت اعتباری , یا دیگر سازمان های مالی جا می زنند . درخواست های ایمیلی که دریافت کننده اطلاعات بانکی را تایید کند یا پسورد جدید یا پین کد خود را ریست کند . کاربر بر روی لینک داخل ایمیل کلیک کرده و به یک صفحه وبسایت جعلی هدایت می شود . سپس هکر قادر خواهد بود تا این اطلاعات را بدست آورده و از آن به منظور بدست آوردن منافع مالی یا اقدام به دیگر حمله ها استفاده کند . ایمیل هایی که مدعی می شوند ارسال کننده مقدار زیادی پول در اختیار دارد ولی برای بدست آوردن آن به شخصی خارج از کشور نیاز دارد . اینها مثال هایی از حمله های فیشینگ هستند . این حمله ها افراد معمولی را طمعه خود قرار می دهند تا به کدهای حساب بانکی و دیگر اطلاعات محرمانه آنها به منظور هک کردن دسترسی پیدا کنند .کلاهبرداری آنلاین : برخی وبسایت ها که پیشنهادات رایگان و یا دیگر معاملات ویژه را ارایه می کنند می توانند یک قربانی را به منظور وارد کردن نام کاربری و رمز عبوری که ممکن است همان باشد که در سیستم کاری برای دسترسی استفاده می کند جذب کند . هکر می تواند از این نام کاربری و رمزعبور معتبر هنگامی که کاربر اطلاعات را وارد فرم سایت کرد استفاده کند.پیوست های ایمیل را می توان در ارسال کدهای مخرب به سیستم قربانی استفاده کرد که می تواند به طور خودکار چیزی مثل یک نرم افزار Keylogger به منظور کپچر پسوردها را اجرا کند . ویروسها , تروجان ها و کرمها را می توان هوشمندانه در ایمیلهای دستکاری شده قرار داد تا قربانی را به باز کردن آنها وسوسه کنیم . این یک مثال از ایمیلی است که تلاش می کند تا دریافت کننده را قانع کند که یک فایل پیوست نا امن را باز کند .گزارش سرور ایمیل : فایروال ما ایمیل هایی که شامل کپی کرم ها هستند را از کامپیوتر شما ارسال شده را تشخیص داده . امروزه این اتفاق در کامپیوترهایی زیادی رخ می دهد چونکه این یک نوع ویروس جدید می باشد (کرمهای شبکه) با استفاده از باگ جدید در ویندوز , این ویروسها کامپیوتر را به طور محسوس آلوده می کنند . بعد از نفوذ به کامپیوتر ویروس همه آدرسهای ایمیل را برداشته و یک کپی از آنها را به آدرس ایمیل خود ارسال می کند .همچنین پنجره های پاپ آپ می توانند در حملات مهندسی اجتماعی مبتنی بر کامپیوتر مورد استفاده قرار گیرند درست به همان نحوی که پیوست های ایمیل عمل می کردند . پنجره های پاپ آپ با پیشنهادهای ویژه یا چیزهای رایگان می تواند یک کاربر را به نصب نرم افزارهای مخرب تشویق کند .مبهم کردن آدرس Url : آدرس URL  معمولا در آدرس بار مرورگر به منظور دسترسی به یک سایت بخصوص استفاده می شود . به عبارت غیرتخصصی URL آدرس وبسایت می باشد .مبهم کردن آدرس شامل پنهان شدن یک آدرس جعلی به طوری که یک آدرس مشروع وبسایت نمایش داده شود . مبهم کردن آدرس در حمله های فیشینگ و برخی کلاهبرداری های آنلاین به منظور قانونی تر نشان دادن  کلاهبرداری استفاده می شود . یک آدرس وبسایت ممکن است با عنوان نام یا لوگو واقعی یک موسسه دیده شود , ولی لینک کاربر را به آدرس آیپی یا وبسایت جعلی هدایت می کند . وقتی که کاربران بر روی لینک کلیک می کند , در حقیقت آنها به سایت هکر هدایت می شوند.مقابله با  حملات مهندسی اجتماعیدانستن اینکه چگونه با مهندسی اجتماعی مبارزه کنیم برای هر هکر اخلاقی حیاتی است . در اینجا شماری از راههای انجام این کار وجود دارد : Policy های امنیتی و برنامه های آگاه سازی امنیتی به صورت مستند و به اجرا گذاشته شده مهمترین اجزا در هر برنامه امنیتی هستند . Policy های خوب و رویه ها اگر به کارمندان اجبار نشوند و آموزش داده نشوند و تاثیرگذار نخواهند بود . پالیسی ها بایستی به کارمندان ابلاغ شوند تا بر اهمیت آنها تاکید شوند و سپس توسط مدیریت اعمال شوند . بعد از دریافت آموزش آگاهی امنیتی , کارمندان متعهد به پشتیبانی و اعمال پالیسی های امنیتی سازمان خواهند بود . پالیسی های امنیتی به ثبت رسیده بایستی نشان دهد که حساب های کاربری چه زمانی نصب و فسخ شوند , چند وقت یکبار پسوردها تغییر می کنند , چه کسی به چه داده ای دسترسی دارد و چگونه به تخطی از پالیسی ها رسیدگی شود . همچنین Policy بایستی جزییات رویه های Help Desk را برای وظایف قبلی بعلاوه پروسه ای برای تشخیص کارمندان , بعنوان مثال استفاده از یک شماره کارمندی یا دیگر اطلاعات برای تایید برای تغییر یک پسورد . نابودی اسناد کاغذی و ممانعت از دسترسی فیزیکی دیگر نواحی امنیتی است که پالیسی های امنیتی بایستی به آنها بپردازد . سرانجام پالیسی بایستی به نواحی فنی بپردازد , مثل استفاده از مودم ها و کنترل Virus ها . یکی از فواید داشتن پالیسی های امنیتی قدرتمند این است که مسولیت کارمندان در قضاوت درباره تماس ها را حذف می کند , صرف نظر اینکه تماس دریافتی درخواستی از سوی یک هکر است یا خیر . اگر حرکت درخواستی توسط پالیسی ها منع شده باشد , کارمند دستورالعمل های برای نپذیرفتن آن دارد . مهمترین اقدام های متقابل برای مهندسی اجتماعی آموزش کارمندان است . همه کارمندان بایستی آموزش ببینند که چگونه اطلاعات محرمانه را ایمن نگاه دارند . تیم های مدیریتی در ایجاد و پیاده سازی Policy های امنیتی درگیر هستند بنابراین آنها کاملا آن را می فهمند و در طول سازمان آن را پشتیبانی می کنند . آگاه سازی پالیسی های امنیتی شرکت بایستی همه کارمندان جدید را نیز وارد جهت گیری های امنیتی کند . کلاس های سالیانه بایستی به منظور یادآوری و به روزرسانی اطلاعات برای کارمندان اعمال شوند . یک راه دیگر به منظور افزایش درگیری کارمندان با پالیسی ها می تواند از طریق خبرنامه های ماهانه با مقالات اطلاع رسانی امینیتی باشد .و در نهایت پیشنهاد میکنم مطالب زیر را مطالعه بفرمایید :ویدئو ی آموزشی در آپاراتهکر کیست؟ مزایای هک در چیست؟بد افزار به چه معناست؟ + راه های مقابلهچرا فیشینگ اهمیت دارد؟ انواع راه های فیشینگفیشینگ - سرقت اطلاعات شما بدون فشردن دکمه</description>
                <category>Pooria Setayesh</category>
                <author>Pooria Setayesh</author>
                <pubDate>Tue, 02 Jun 2020 10:38:53 +0430</pubDate>
            </item>
                    <item>
                <title>داکر به چه معناست؟ داکر برای برنامه نویسان دات نت</title>
                <link>https://virgool.io/@pooria.setayesh/%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D9%87-%DA%86%D9%87-%D9%85%D8%B9%D9%86%D8%A7%D8%B3%D8%AA-%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%D8%A7%D9%86-%D8%AF%D8%A7%D8%AA-%D9%86%D8%AA-ubbkxaavvity</link>
                <description>داکر به چه معناست؟داکر برای برنامه نویسان دات نتسلام خدمت شما دوستانشاید تا حالا وقتی با کامپیوتر کار کرده باشید با ابزارهای ساخت ماشین مجازی مثل Vm ware مثل virtual box  و مدل های دیگر کار کرده باشید.داکر شباهتی به این نوع ابزار ها و پلتفرم ها دارد. داکر یک پلتفرم متن باز یا open source می باشد که مبتنی بر سیستم عامل لینوکس راه اندازی شده است ولی بر عکس vm ware و دیگر ابزار های این شکلی روی سیستم عامل اصلی نصب می شود.اگر با vm ware یا virtual box کار کرده باشید بعد از اینکه یک ماشین مجازی برای خودتان می سازید باید روی آن یک سیستم عامل نصب کنید حالا هر سیستم عاملی که نیاز دارید تا بتوانید کار خودتون را انجام بدهید .داکر اینجا تفاوت بزرگی دارد ، نیازی به نصب سیستم عامل ندارد و روی همان سیستم عامل اصلی نصب می شود و مستقیما با هسته ی آن سیستم عامل  که میتواند لینوکس یا ویندوز یا مک باشد کار کند و وظیفه اش اینگونه است که خودش را تقسیم کند ، اگر بخواهم به عنوان مثال برای شما بگم ، این قسمت های کوچک در داکر به عنوان container شناخته می شوند.وظیفه یcontainer  این است که یک فضای ایزوله به شما بدهد تا نرم افزار های خود را اجرا کنید.به عنوان مثال فرض میکنیم شما میخواهید یک ویروس را روی سیستم تست کنید ببینید که دستورات مورد نظر شما را انجام می دهد یا خیر . اگر این ویروس را روی سیستم عامل خودتان نصب کنید ممکن است مشکلات بسیاری برای شما به وجود بیاورد و به هیچ عنوان منطقی نمی باشد.در این مواقع، این ویروس را در داخل یک container و در docker اجرا میکنیم و اگر اتفاقی قرار باشد رخ دهد در داخل همان container رخ می دهد و به بیرون سرایت نمی کند.کانتینر های ما مثل یک اتاق بزرگ می باشند که با دیوار از هم دیگر جدا شده اند و محیط های ایزوله ای را به ما می دهند.فرض کنید سایتی داریم که باAsp.Net نوشته شده است و برای اجرای آن نیاز به IIS و Sql Server داریم. ممکن است با نصب بعضی برنامه ها ، بعضی دیگر از برنامه ها دچار مشکل بشوند.برای این کار ما داکر را ران میکنیم وIIS و SqlServer را روی آن نصب میکنیم و در نهایت Container را به صورت Package  در می آوریم.مزیت این روش این است که ما میتوانیم این کانتینر را به هر سیستم دیگری منتقل کنیم؛ به عنوان مثال در لینوکس یا مک آن را اجرا کنیم.حال به سادگی این برنامه به کار خودش ادامه می دهد و بدون نیاز به نصب نرم افزار های خاص یا تنظیم دوباره، آن را روی سرور قرار میدهیم.اگر بخواهیم به طور کلی داکر را با نرم افزار های VM مقایسه کنیم، نرم افزار های VM روی سخت افزار نصب می شوند و برای اینکه بتوانند کار خودشان را انجام بدهند روی آن ها یک سیستم عامل نصب می شود ولی داکر به این شکل نیست و از هسته ی سیستم عامل استفاده میکند.در داکر مفاهیم بسیاری وجود دارد که در ادامه به توضیح چند مورد از آنها می پردازیم :هاب (Hub) چه معناست؟هاب یک سرویس اشتراک گذاری است که می توانیمcontainer های خودمان را به اشتراک بگذاریم و شباهتی به گیت هاب دارد.کانتینر (Container) به چه معناست؟همانطور که قبلا اشاره کردم، به عنوان مثال اگر بخواهید یک سایت PHP را اجرا نمایید یکContainer وجود دارد که تمام پیش نیاز های مربوط به این سایت را دارد شما کانتینر را pull میکنید و کلا چند دقیقه زمان شما را میگیرد تا پیش نیاز ها نصب شوند.همچنین شما میتوانید این کانتینر ها را با دیگر برنامه نویسان به اشتراک بگذارید.داکر Image به چه معناست؟یک برنامه ی بسته بندی شده است یا میشود به این صورت عنوان کرد که یک اپلیکیشن می باشد که شامل چند اپلیکیشن دیگر است که در کنار هم جمع شده اند!به عنوان مثال دانلود برنامه از اپ استور ها به این صورت است که شما imageرا دانلود میکنید و نصب میکنید. نصب کننده یا نصب شونده اپلیکیشن هایی که نیاز دارد را در کنار خودش نصب میکند.داکر image تقریبا به این صورت است.شامل کد های برنامه، پلاگین ها، ابزارها، کتابخانه ها و فایل های پیکر بندی شده ای که نیاز داریم تا با آنها برنامه را اجرا کنیم. اینها به طور یک مجموعه در کنار هم یک Image را تشکیل می دهند.آیا داکر رایگان است؟آیا برای استفاده از داکر باید هزینه ای را پرداخت کنیم؟همانطور که میدانید کمپانی های بزرگ باید برای خودشان درآمدی کسب کنند داکر هم از این قاعده مستثنی نیست.داکر دارای پکیج های گوناگون است که یکی از آنها هزینه دارد و شامل امکاناتی است که بیشتر برای سازمان های بزرگ مفید می باشد و به داکر EE شناخته می شود. شاید مهمترین ویژگی آن داشتن پشتیباتی باشد.و اما داکر دسکتاپ، کاملا رایگان می باشد و من در ویدئوی مربوط به این مطلب از همین نسخه استفاده کردم که به داکر CE شناخته می شود.داکر انجین چیست؟داکر انجین متشکل از تعدادی اپلیکیشنOpen Source می باشد که تعدادی از آنها عبارت اند از : networking و volumes و  pluginsو  containerو ...قدرت داکر بر پایه ی این اپلیکیشن های متن باز بستکی دارد و مدیریت این اپلیکیشن ها بر عهده ی docker CLI می باشد که CLI مخفف عبارت Command line interface می باشد ، دستوراتی که تایپ میکنیم و استفاده میکنیم در این محیط می باشد.تفاوت داکر با ماشین مجازی در چیست؟من در ابتدا وقتی داکر را توضیح دادم اشاره ای به ماشین مجازی کردم اگر بخواهیم دقیق تر بررسی کنیم ، ماشین های مجازی به صورت گسترده در دیتاستتر ها استفاده می شنود و همینطور برای اجرای سیستم عامل ها، برای تست روی کامپیوتر شخصیتفاوت داکر با ماشین مجازیبا توجه به تصویر ما هم در VM و هم در داکر دارای سه App هستیم ، در vm هر کدام از این  appهای ما OS خاص خودشان را دارند که سیستم عامل هر یک میتواند ویندوز، مک یا لینوکس باشد .ولی در داکر بر خلاف vm اپلیکیشن های ما روی سیستم عامل قراز نگرفتند و بر روی داکر اجرا می شوند.عرض کردم در vm تعدادی سیستم عامل داریم ، برای این سیستم عامل ها حتما باید لایسنس تهیه شود و هر کدام به صورت جدا تنظیم شوند ، فرض کنید قصد امن کردن این اپ ها را داریم، برای هر سیستم عامل به صورت جدا باید آنتی ویروس و فایروال تنطیم شود که هم وقت گیر است و هم نیازمند لایسنس می باشد .(شاید در کشور ما قانون کپی رایت در مورد نرم افزار ها آن طور که باید اجرا نمی شود ولی ما دید را محدود به کشور خودمان نمیکنیم و به صورت کلی در نطر میگیریم.)هر کدام از این اپ ها در ماشین مجازی بر روی یک هایپروایزر نصب می شوند که شما آن را انتخاب کرده اید به عنوان مثال : vm ware و Microsoft hyper v و vs ware,... که هر کدام از این ها به شما امکان ساخت یک ماشین مجازی را می دهند.نقاط ضعف ماشین های مجازی1. اولین مشکل میزان فضای اشغال شده در هارد دیسک توسط VM می باشد به این دلیل که روی آن یک OS نصب می شود و اپ های مورد نظر روی آن نصب میشم2. خرید لاینس هایی که مورد نیاز است که لایسنس ها عبارت اند از : هایپروایزر، سیستم عامل، آنتی ویروس، فایروال و ...3. هر کدام از این OSها بعد از مدتی نیازمند نگهداری و به روزرسانی هستند.4. هر کدام از این سیستم عامل ها به صورت جداگانه تنظیم می شوند.5. نسبت به داکر شروع کندتری دارندنکات مثبت ماشین های مجازی1. به راحتی و بدون هیچ تغییری اپ ها روی آن نصب می شوند .(در داکر ما باید از برنامه هایی که کانتینر شده اند استفاده کنیم.)2. ماشین مجازی محیط ایزوله ی قوی تری را به ما ارائه میدهد و اینکه سیستم عامل خاص خودشان را دارند. در هاست هم از نظر فیزیکی جدا هستند و محیط ایزوله تری را تحویل می دهند.3. ماشین مجازی ممکن است امکاناتی را ارائه دهد مثل migrationها و زمان بندی ها و بکاپ اتوماتیک که حداقل در داکر رایگان وجود ندارد.در ادامه، در ویدئوی آموزشی به بررسی دستورات داکر پرداختیم  و یک سایت Asp.net core را برای داکر کانتیتر کردیم.لینک ویدئو :  https://www.aparat.com/v/ehigzممنون از توجه شما</description>
                <category>Pooria Setayesh</category>
                <author>Pooria Setayesh</author>
                <pubDate>Mon, 01 Jun 2020 20:09:52 +0430</pubDate>
            </item>
                    <item>
                <title>ساخت وب سرور استاتیک با سی شارپ</title>
                <link>https://virgool.io/@pooria.setayesh/%D8%B3%D8%A7%D8%AE%D8%AA-%D9%88%D8%A8-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A7%D8%B3%D8%AA%D8%A7%D8%AA%DB%8C%DA%A9-%D8%A8%D8%A7-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE-k13v2abkihpm</link>
                <description>مایکروسافت ویژوال استودیوویژوال استودیو نام یک IDE  محبوب از شرکت مایکروسافت است برای تولید انواع نرم افزارهای تحب وب ، موبایل و ویندوزاولین ورژن ویژوال استودیو در سال ۱۹۹۷ منتشر شد که نام آن ویژوال استودیو ۹۷ و ورژن آن 5.0 بود. جدیدترین نسخه ویژوال استودیو 2019 تحت عنوان ویژوال استودیو 2019 به طور عمومی منتشر شد. دات نت فریم ورک پشتیبانی شده در این نسخه 4.0 تا 4.7.2 است.قابلیت های نرم افزار مایکروسافت ویژوال استودیو· مدیریت نرم افزار در طول چرخه ی حیات آن· سیستم گزارش باگ و اشکال زدایی· آنالیز کردن کد های نوشته شده· اجرای تست دستی، توانایی تست خودکار UI در برنامه های تحت وب یا ویندوز· اجرای تست عملکرد (Performance Testing)، تست بار گذاری (Load Testing)· مدل سازی و دستیابی به تعدادی از کدهای موجود و توابع وابسته آن· مدیریت و گسترش پایگاه داده همزمان با اعمال تغییرات کد· طراحی نرم افزار جدید و یا افزایش کد های نوشته شده ی قبلی· قابلیت multi-monitor به منظور مدیریت و سازماندهی بهتر· نوآوری های و امکانات جدید در زبانهای C# و Visual Basic ایجاد شده است.· امکاناتی در ASP.NET برای کنترل نمودارها و استفاده از تکنولوژی AJAX پیاده سازی شده است.برنامه نویسی به روش کنسول اپلیکیشنبه نظر من کنسول اپلیکیشن بهترین تکنولوژی و محیط برای آموزش زبان برنامه نویسی مثل سی شارپ هست چون مخاطب زیاد درگیر پیچیدگی های تکنولوژی هایی مثل Windows Form یا Asp.Net MVC نخواهد شد چون خود این تکنولوژی ها نیازمند آموزش جداگانه هستند.در زمان های دور، کامپیوترها به اندازه الان پیشرفت نکرده بودند. چیزی به نام ویندوز یا دیگر سیستم عامل های پیشرفته وجود نداشت. یا چیزی به نام گرافیک تصویری در کامپیوتر، معنا نداشت. یعنی شما فقط می توانستید با استفاده از صفحه کلید(Keyboard) ، دستورات مدنظر خودتون رو به کامپیوتر انتقال دهید و در نهایت کامپیوتر نتایج اجرای دستورات شما رو بصورت یک سری متن و نوشته، در یک صفحه با پس زمینه سیاه به نمایش در می آورد. البته در سالیان دور همین نمایش متن و نوشته، بر روی مونیتور (Monitor) ، خودش انقلابی در صنعت کامپیوتر و الکترونیک بود.سی شارپسی شارپ زبانی شیءگرا و سطح بالا از خانواده ی زبان‌های چارچوب دات‌نت شرکت مایکروسافت است.این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز دربر گرفت.زبان سی شارپ با قدرت و سطح بالایی که دارد توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شده است.آندرس هجلزبرگ، طراح زبان برنامه‌نویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستورات شیءگرا مشابه زبان سی پلاس پلاس است و به شدت به زبان‌ جاوا شباهت دارد.در ابتدا نام این زبان COOL بود که مخففC like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد.در مورد طراحی HttpServerقبل از طراحی وب سرور ما باید بدونیم که وقتی که یک سایت را در مرور گر خود باز می کنید، چه فرایندی رخ می دهد که محتوای آن نمایش داده میشود.پروتکلHttp به چه معناست؟قبلا روش استانداردی یا پروتکل استنداردی برای رد و بدل اطلاعات در اینترنت وجود نداشت.به همین دلیل آقای Tim Berners-Lee در سال 1991 پروتکل Http را برای اینکه یک روش استاندارد برای رد و بدل اطلاعات وجود داشته باشد پیاده سازی کرد.روش‌های درخواست در پروتکل httpتوی پروتکل http روش های درخواست زیادی وجود دارد که بعضی از آن ها پرکاربردتر از بقیه هستند.ولی باید بدونیم که هر کدام از این روش‌ها با هدف خاصی در وب سرورها استفاده می‌شوند.در نسخه ی یک Http فقط از Get,post,headپشتیبانی میشد.ولی در نسخه ی 1.1 پنج روش جدید هم به آن اضافه شد یعنی trace,delete,put,options,connectبین این روش ها بیشترین کاربرد را درخواست های get, post  دارند که در ادامه در مورد این دو کمی بیشتر صحبت می کنیم.GET: پیام هایی که تو این روش ارسال میشن فقط شامل یک URL هستند البته تو این پیام‌ها میتوانیم تعدادی پارامتر دلخواه در انتهای URL اضافه کنیم و این پارامتر ها به راحتی در مروگر کاربر مشخص هستند.POST : در این نوع درخواست ها، پارامترهای دلخواهی که اضافه میکنیم، قابل مشاهده نیستند. چون در این روش به جای اضافه کردن پارامترها در انتهای  URL، آن‌ها در درون پیام درخواست شده قرار داده می‌شوند.البته از قسمت developer tools  و قسمت network به راحتی قابل تشخیص است.وب سرور چیست ؟به زبان ساده، یک web serverوظیفه ی ارسال محتوای یک وب سایت را به کلاینتی که آن را درخواست کرده دارد.محتوای درخواست شده می تواند متن، عکس و فیلم و... باشه. رایج ترین نوع کلاینت نیز مرورگرها هستند.زمانی که سایت را بارگذاری می کنید یا روی لینک دانلود کلیک کرده و فایلی را دانلود می کنید، عملا مرورگر در حال ارسال درخواست شما به وب سرور آن سایت است.کاربرد وب سرور چیست و web serverچگونه کار می کند؟وب سرور می تواند به سخت افزار یا نرم افزارگفته بشه.از جنبه سخت افزاری، وب سرور یک رایانه است که نرم افزار وب سرور و فایل های اجزای وب سایت را ذخیره می کند، به عنوان مثال اسناد HTML ، تصاویر، استایل شیت های CSS و فایل های جاوا اسکریپت را می‌توان نام برد.از جنبه نرم افزاری، یک وب سرور شامل چندین بخش می باشد .حداقل شامل یک سرور HTTP است که چگونگی دسترسی کاربران به فایل های روی هاست را کنترل می کند.از جمله وب سرورهای معروف نیز می توان به Apache، Nginx،  IIS و LiteSpeed اشاره کرد.وب سرور استاتیک و داینامیکیک وب سرور استاتیک شامل یک کامپیوتر به همراه یک سرور HTTP است. که آن را استاتیک می نامیم زیرا سرور، فایل های میزبانی شده را همان گونه که هست به مرورگر شما ارسال می‌کند.یک وب سرور داینامیک، شامل یک وب سرور استاتیک، به علاوه ی یک نرم افزار اضافی، (اغلب یک سرور برنامه و یک پایگاه داده) است. که آن را پویا می نامیم، زیرا سرور برنامه، فایل های میزبانی شده را قبل از فرستادن آن ها به مرورگر شما، از طریق سرور HTTPبه روز می کند.تکنولوژی های طراحی وب سرور استاتیک در این آموزشمایکروسافت ویژوال استودیوکنسول اپلیکیشنزبان برنامه نویسی سی شارپشروع کارابتدا نرم افزار ویژوال استودیو را باز کرده سپس به ساخت پروژه ی کنسول اپلیکیشن میپردازیم.اسم پروژه را به دلخواه وارد کرده و دکمه create  را میزنیم.وب سرور ما یک وب سرور استاتیک بوده و تونایی پردازش فایل های سی شارپ ، asp ، jsp  یا php  را ندارد فقط توانایی ارسال فایل های استاتیک اعم از html ،  htm،css ، js ، jpeg ، jpg ، png ، gif و ... را دارد که آن هم توسط مرورگر پردازش می شود و وب سرور دخالتی ندارد فقط باید به مرورگر یک سری اطلاعات مثل از MIME Type را اعلام نمود.در طول پروژه ما با ساخت سه کلاس سر و کار داریم که عبارت اند از : program  و  clientوlistenerدر ابتدا از قسمت solution  که در سمت راست قرار دارد روی پروژه راست کلیک کرده و یک کلاس جدید به اسم listenerایجاد میکنیم.این کلاس وظیفه ی مدیرت درخواست ها به سمت سرور را دارد و منتظر درخواست های بعدی از سمت کاربران می باشد.به این صورت می باشد که دستورات آن به صورت asyncنوشته شده اند و در مقیاس گسترده و یک Enterprise App تاثیر خودش را نشان میدهد.دو فیلد می سازیم یکی برای TcpListener و دیگری برای portبا نوشتن کلمه ctor و زدن دو بار کلید tab سازنده ی کلاس برای ما ساخته می شود به عنوان ورودی متد یک پارامتر را در نظر میگیرم که پورت اجرایی برنامه ما می باشد.کلاس Tcplistener منتظر درخواست های Tcp می  ماند.در سازنده ی کلاس listener یک شی جدید از tcpListener می سازیم و داخل فیلد میریزیم.سازنده ی کلاس tcpListener دو مقدار به عنوان ورودی دریافت میکند یکی آی پی های مجاز و دیگری پورت برنامهما در اینا انواع آی پی را باز گذاشتیم با نوشتن IpAddress.Any و فیلد پورت را که مقدار دهی کرده ایم به tcpListener می دهیم.برای شروع کار این کلاس متدی وجود دارد به اسم Start() که باید بعد زا نمونه سازی آن را فراخوانی کرد . این متد به صورت را به صورت زیر مینویسم :_tcpListener.Start()برای اینکه برنامه ما MultiUserباشد باید یک متد بسازیم و در پس زمینه آن را اجرا کنیم.در کلاس listener یک متد async با خروجی void در نظر میگیرم.درون آن یک حلقه بی نهایت میزنیم به این صورت while(true) تا همیشه برنامه ی ما زنده باشد.متغیری تعریف میکنیم به اسم دلخواه و در آن _tcpListener را مینویسیم و از آن متد AcceptSocketAsync را فراخوانی میکنیم.کار این متد به این صورت هست که connection  هایی که اصطلاحا pending می باشند را قبول میکند تا برنامه mutltiuser باشد.حالا اگر این socket ما null  بود باید بگوییم از حلقه خارج شود . بایک if و یک break; کار را انجام میدهیم.ولی اگر null نبود باید یک client handler بسازیم تا مدیریت این task را بپذیرد.و در نهایت یک task میسازیم تا کارهای مربوط به این thread را انجام دهد.بحث client handler و کلاس client را پیش میبریم.از قسمت solution روی پروژه راست کلیک کرده و و یک کلاس جدید به اسم client ایجاد میکنیم.ما به چند فیلد private نیاز داریم تا ادامه ی کار را انجام دهیم . یکی مربوط به networkstream  یکی memoryStream یکی StreamReader و در نهایت یک فیلد ثابت استرینگ برای نمایش نام سرور در ادامه به توضیح هر یک میپردازیم.با نوشتن سازنده ی کلاس client و قرار دادن پارامتر socket در ادامه networkStream را نمونه سازی میکنیم با همین سوکتی که پاس دادیم سپس فیلد streamReader را نمونه سازی میکنیم و مقدار memorystream را به عنوان Stream پاس میدهیم.این مطلب را باید بدانیم که هر فایلی که به سمت مرورگر ارسال می شود شامل یک سری اطلاعات مثل Content Type و Content Length و Http Version و Http Method و ... می باشد.در اینجا برای به دست آوردن content type نیاز به ساخت یک متد داریم که string به ما میدهد در اینجا من از registry ویندوز استفاده کردم.با توجه به شکل 5646546 اگر به آدرس Computer\HKEY_CLASSES_ROOT\  برویم تمامی فایل های پشتیبانی شده توسط ویندوزقابل رویت می باشداگر روی هر کدام کلیک کنیم به عنوان مثال .html از قسمت content type میتوان mime type فایل موردنظر را فهمید به عنوان مثال برای html این عبارت text/html می باما از یک if و یک regular expression استفاده کردیم تا فقط mime هایی که حروف انگلیسی و اعداد در آن ها به کار رفته را بررسی کند و اگر null باشد مقدار application/octect-stram را برگرداند.در مرحله بعدی ما به این بحث نیاز داریم که فایل ها را به همراه header به سمت مرورگر ارسال کنیم.همانطور که قبلا اشاره شد مرورگر نیاز به یک سری اطلاعات برای پردازش فایل دارد.متدی تحت عنوان SendFile طراحی میکنیم که آدرس فایل ها را به عنوان ورودی دریافت میکند.یک بدنه ی try catch قرار میدهیم تا اگر خطایی رخ داد بدنه ی catch اجرا شود.داخل try بررسی میکنیم آیا فایل در مسیر وجود دارد یا خیر پس یک شرط مینویسیم و اگر وجود نداشت صفحه ی 404 را طراحی میکنیم .همانظور که قبلا اشاره شد content-type فایل های html عبارت text/html می باشد و جواب های ok به صورت کد 200 می باشند.و جواب Not Found با کد 404 مشخص می شود.از دستور زیر برای ساخت صفحه 404 استفاده میکنیم.Encoding.ASCII.GetBytes(&quot;&lt;html&gt;&lt;body&gt;&lt;h1&gt;404 File Not Found&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;&quot;);Content-type و status-code را نیز تعیین میکنیم.حال اگر صفحه وجود داشت باید تمام بایت های آن فایل مورد نظر خوانده شود برای این کاراز دستور File.ReadAllBytes(path) استفاده میکنیم و مقدار آن را در یک متغیر میریزیم. از متدی که قبلا نوشتیم هم برای به دست آوردن content-type استفاده میکنیم.یک متغیر از جنس string و با نام header تعریف میکنیم و مقادیری مثل content-length و content-type و status-code و http method و http version و keep-alive و servername که مرورگر به آنها نیاز دارد را تعیین میکنیم.به وسیله ی netwrokStream و متد WriteAsync مقادیر header و data را مینویسم و در نهایت flush میکنیم  و networkStream را dispose میکنیم توجه کنید که این برنامه به صورت Keep-Alive Close نوشته شده است و ما نیاز به networkStream نداریم پس بهتر است آن را از Ram خارج کنیم.در ادامه به نوشتن یک متد میپردازیم که وظیفه آن به دست آوردن آدرس صحیح درخواستی کاربر و پاس دادن آن به SendFile می باشد.چون ممکن است در آن واحد تعداد درخواست های زیادی به سمت سرور برای یک url بیاید از while بی نهایت استفاده میکنیمبه وسیله ی متد seek در memorystream جستجو میکنیم از خانه ی صفر تا Seekorigin.Beginچون memoryStream را به streamReader پاس داده بودیم متغیری تغریف میکنیم و از متد readline برای خواندن streamreader استفاده میکنیمخطی که میخوانیم چیزی شبیه به این عبارت است : &quot;GET /index.html HTTP/1.1&quot;بررسی میکنیم درخواست مورد نظر از نوع Get باشد در غیر این صورت از حلقه خارج شود سپس با استفاده از split() با جدا کننده ی space آدرس فایل را به دست می آوریم .خانه ی صفرم در عبارت بالا به این صورت است : “Get ”پس ما به خانه ی یکم نیاز داریم از split با جداکننده ی ? ا استفاده کردیم تا params را حذف کنیم.و در نهایت آدرس فایل را پاس دادیم.نکته : فایل های ما در فولدر root قرار گرفته اند.وقت آن رسیده متد do را بنویسیم من اینجا خواستم اطلاعات به صورت buffer و تکه تکه پردازش شود پس از یک byte[] استفاده کردم و مقدار 4096 را دادم.یک حلقه ی بی نهایت برای پردازش در نظر گرفتم و از networkstram ، متد read را صدا زدم و تمام و کمال فایل را خواندم.در نهایت buffer و byteread را بر روی memorystream رایت کردم و متد ProcessHeader را صدا زدم.خوب باید برگردیم به فایل Listener و یک شیء جدید از client ایجاد کنیم ودر داخل یک Task متد Client.Do را فراخوانی کنیم.در مرحله پایانی هستیم ، وارد فایل program.cs می شویم و فیلد زیر را میسازیم:private static Listener _listener;در بدنه ی Main یک شی جدید از آن ایجاد میکنیم و پورت مورد نظر مثل 80 ، 8080 یا 9090 را پاس میدهیم.برنامه را Run میکنیم ولی چیزی برای نمایش وجود ندارد چون در داخل فایل root فایلی قرار ندادیمیک فایل html میسازیم و در روت پروژه قرار میدهیم سپس دوباره برنامه را ران میکنیم.امیدوارم این مطلب مفید بوده باشد.فیلم آموزشی در آپارات: https://www.aparat.com/v/bjMJEمنبع بررسی کلاس ها و متد هاhttps://docs.microsoft.com/</description>
                <category>Pooria Setayesh</category>
                <author>Pooria Setayesh</author>
                <pubDate>Sat, 30 May 2020 12:27:34 +0430</pubDate>
            </item>
            </channel>
</rss>