انجمن تیم امنیتی ایران سایبر

آموزش برنامه نویسی [bash Script]

شروع موضوع توسط Reza.Black ‏11/10/19 در انجمن BASH

  1. لطفا فایل های خود را جهت ماندگاری در انجمن اپلود کنید در صورت مشاهده لینک اپلود خروجی , تاپیک حذف خواهد شد .
    بستن اطلاعیه
بستن اطلاعیه


درود مهمان گرامي؛

مهمان گرامي، براي مشاهده تالار با امکانات کامل ميبايست از طريق ايــن ليـــنک ثبت نام کنيد .

حامی مسابقات و برگزار کننده دوره های پیشرفته ارزیابی امنیت برای سازمان ها فتح پرچم (CTF)
  1. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    به نام خدا
    با سلام

    bash.png

    درباره ی ایجاد این تاپیک قبلا توضیح داده بودم.
    همونطور هم که گفتم بعد از پایان این تاپیک شما می تونید یکسری ابزارهاتون رو تهیه کنید.
    فکر می کنم که تاپیک خوبی از آب در بیاد.
    فقط احتیاج به کمی زمان دارم.
    اگه سوالی چیزی هست حتما به من بگید همین اول کار.
    فعلا یا علی.
     
    IWHH(Mobin)، blackops، Unkn0wn و 6 نفر دیگر از این ارسال تشکر کرده اند.
  2. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    با نام و یاد خدای بزرگ این آموزش رو شروع می کنم.
    سلام دوباره به تمامی بچه های انجمن.
    تو این آموزش من از کالی لینوکس استفاده می کنم.چون که عمومی تره.
    و همین طور از ویرایشگر nano چون که کار با اون خیلی ساده هست.
    ولی اجباری در کار نیست شما می تونید از هر توزیعی که دوست دارید و همین طور ادیتوری که دوست دارید استفاده کنید.
    خوب اگه بخوام یه توضیح کوچیک در مورد بش اسکریپت بدم.
    این هست که bash یا bourne again shell در واقع یه مفسر تعاملی بین ما و سیستم هست.
    که در سال 1971 همزمان با تکامل یونیکس توسط thompson شکل گرفت.
    بعدها دسخوش تغییرات زیادی شد.
    و افراد گوناگونی مثل brain fox و chet ramey تحت یک سری پروژه های جدید نگهداری از اون رو بر عهده گرفتن.
    حالا سوال اصلی این هست که چرا اصلا ما باید بش اسکریپت نویسی رو بلد باشیم.این کار چه لزومی داره؟
    در جواب این سوال باید بگم که زمانی قصد تست و نفوذ دارید و البته فرقی نمی کنه که شما یک مهندس شبکه یا امنیت و یا یک هکر باشید.
    با بش اسکریپت خیلی سریع می تونید کدهای خودتون رو بنویسید.و تو اتوماسیون کارها می تونه خیلی کمک کننده باشه.
    در ضمن استفاده از خود دستورات داخلی لینوکس و همین طور ابزارهای داخلی لینوکس به خصوص کالی می تونه قدرت زیادی به اسکریپت هامون بده.
    ناگفته نباشه که تو سطوح بالاتر شما می تونید یک سری از اکسپلویت های مربوط به کرنل که غالبا مربوط به افزایش سطح دسترسی هست رو تهیه کنید.

    دیگه بریم سراغ آموزش...
    اسکریپت های بش اسکریپت با !# یا شبنگ شروع میشن که درادامه به مسیر bin/bash/ اشاره می کنه البته میشه با یک سری مسیرهای نسبی حتی این مسیر رو تغییر داد.
    پسوند اسکریپت های بش هم sh. هست.هر زمان که بخوام یه اسکریپت بش بنویسم با ادیتور اول نام ادیتور که ما از nano استفاده می کنیم.و سپس نام اسکریپتم nano script.sh
    برای اجرای اسکریپت های بش هم اول کلمه کلیدی bash و بعد هم بازم نام اسکریپتمون bash script.sh
    اگه بخوام اسکریپتم رو به سیستم عامل بشناسونم به اون مجوز اجرایی می دم که در واقع بخشی از متغیر محیطی در path قرار بگیره.
    برای این مجوزهای اجرایی هم میشه از اعداد اوکتال استفاده کرد و هم نمادهای عمومی chmod +x script.sh که همون change mode خودمونه.
    در نهایت با script.sh/. اسکریپتم رو اجرا می کنم.

    [دستور echo]
    اولین دستوری که می خوام توضیح بدم دستور معروف echo هست.
    کار این دستور این هست که یک آرگومان به ورودی اون میدیم این آرگومان می تونه هر چیزی باشه مثل یه کاراکتر یا رشته یا یه متغیر و...
    و اون در خروجی استاندارد اون رو برای ما چاپ و نمایش می ده. که به اون stdout هم میگن.
    معمولا برای به کار بردن خطوط خالی در اسکریپت هامون میتونیم از echo های تنها استفاده کنیم.
    برای استفاده از توضیحات هم در اسکریپت هامون از # استفاده می کنیم که مفسر اون رو ندید می گیره.
    ولی ارزشش برای برنامه نویس زیاده چون که از نحوه ی اجرای کدها می تونه آگاهی پیدا کنه به خصوص کدهای پیچیده.
    حالا برای درک بیشتر به این تصاویر نگاه کنین.

    echo.PNG

    echo2.PNG
     
    Ruiner و Unkn0wn از این پست تشکر کرده اند.
  3. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [ کار با متغیر ها ]
    متغیرها یکی از اولین ارکان زبان های برنامه نویسی هستن.
    که با یک نام و مقدار در رابطه هستن.
    نام های متغیرها با الفبای انگلیسی شروع میشه البته قوانین نام گذاری متغیرها مثل سایر زبان ها هست.
    ولی مقدارش می تونه در خلال اجرای برنامه تغییر کنه اصلا به همین خاطر به اون متغیر می گن.
    ولی نکته ای که در بش وجود داره ما برای مقداردهی متغیرهامون از فاصله استفاده نمی کنیم. جلوتر توضیح می دم.
    برای واگذاری نام متغیر به مقدار اون از عملگر = استفاده می کنیم.
    البته میشه با استفاده از خصیصه ی declare متغیر ها رو طوری تعیین کرد که فقط خوندنی باشن. و کسی از روی عمد و یا سهوا مقدار اون رو تغییر نده.
    البته کسی سهوا همچین کاری انجام نمی ده.
    یکسری متغیرهای محیطی هم در بش وجود داره مثل home$ که اشاره به دایرکتوری کاربر جاری داره. و...
    البته ما فعلا کاری به اونها نداریم.
    حالا ما یه متغیر با یه نام دلخواه تعریف کردیم. مثل name=iran
    چه طوری اون رو در برنامه مون به کار بگیریم.
    برای استفاده کافی هست که نام اون رو به همراه کاراکتر $ به کار ببریم.
    دستور echo رو یاد گرفتید دیگه؟
    به مثال زیر دقت کنید.

    variable.PNG

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

    double-quote.PNG

    double-quote2.PNG

    یادتون هست که گفتم برای واگذاری مقدار یه متغیر به نام اون از فاصله استفاده نمیکنیم. ولی من خوب یادم هست.
    چون که کلا بش با فاصله ها و خطوط جدید و تب مشکل داره و اون ها رو همیشه به دو یا چند آرگومان جدا ازهم تعیین می کنه.
    در حالی که منظور ما یه آرگومان هست.
    از دابل کوتیشن میتونید برای خنثی کردن این فرآیند استفاده کنید.
     
    آخرین ویرایش: ‏21/10/19
    Ruiner و Unkn0wn از این پست تشکر کرده اند.
  4. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [پایپ لاین و دستور grep]
    خوب یه کمی خوابم گرفته ول فعلا بی خیالش
    تو بش ما با استفاده از خطوط عمودی یا همون پایپ لاین | می تونیم خروجی یک دستور رو به ورودی دستور دیگه بریزیم.
    این ویژگی تو بش خیلی مهمه
    تعداد متوالی از پایپ ها رو بهش فیلتر می گن. مثل command | command | command |command
    که ورودی رو میتونن دستخوش تغییرات زیادی کنن.
    خوب من می خوام یه پسورد لیست عظیم برای کرک یکی ازشبکه های وای فای پیرامون خودم استفاده کنم.
    ولی فضای کافی رو برای این کار ندارم.
    اینجا می تونم از این قابلیت استفاده کنم. جون که اکثر دستورات یونیکس ورودی ها و خروجی ها رو پشتیبانی می کنن.
    و با این کار می تونم صرفه جویی کنم در منابع حافظه ی خودم.

    pipline.PNG

    در سایر کارها هم میشه از این قابلیت استفاده کرد.
    خوب بریم سراغ دستور grep
    با این دستور ما می تونیم یک الگوی متنی که خودمون تعیین کردیم رو در یک رشته پیدا کنیم.
    کار با این دستور خیلی ساده هست. grep pattern file.txt
    ولی حالا که با پایپ لاین آشنا هستیم چرا ازش تو دستور grep کمک نگیریم.
    بالاخره grep هم ورودی ها رو ساپورت می کنه. مگه نه؟
    بزارید یه مثال بزنم
    من یه پورت اسکن با انمپ بر روی تارگتم انجام دادم.
    خوب انمپ چند سطر خروجی داره ولی من می خوام خروجی رو که عبارت tcp در اون وجود داره محدود کنم.
    دقت کنید.

    grep.PNG

    خوبه خروجی رو به راحتی دستکاری کردم.
    ولی این خروجی هم به درد من نمی خوره چون من می می خوام ببینم که پورته بازه یا نه؟
    دستور دیگه ای به نام cut در بش وجود داره که این جور مواقع کاربردی هست.
    با این دستور می تونیم با اختصاص یه جدا کننده که بازم خودمون تعیین می کنیم. سوییچ d-
    این جا از کاراکتر فضای خالی به عنوان جدا کننده استفاده می کنم.
    می تونیم بر روی فیلدها حرکت کنیم و بخشی از متن رو جدا کنیم.
    یه کم دقت

    grep-cut.PNG

    عالیه.
    البته با grep و cut میشه حتی خروجی رو به یه کاراکتر هم محدود کرد.
    این کار برای نشون دادن نتایج اسکن ها و نمایش آمار لاگ ها و غیره خیلی کاربردیه.
    البته دستورات قدرتمند دیگه ای هم وجود داره. ولی فعلا همین کار ما رو راه میندازه.
    بقیه دیگه برای بعد.
     
    آخرین ویرایش: ‏22/10/19
    Ruiner و Unkn0wn از این پست تشکر کرده اند.
  5. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    بازم سلام
    [بسط آکولاد]
    وقتی که به کاراکتر ستاره در بش نگاه می کنیم این کاراکتر معنی خاصی داره.
    اگه دستوری مثل * echo رو اجرا کنیم.
    ما هرگز در خروجی خود کاراکتر ستاره رو نمی بینیم.
    بلکه نتیجه ی اون رو می بینیم که این کاراکتر تمامی نام های فایل ها تطبیق می ده.
    به این فرآیند بسط می گن.
    ما بسط های زیادی مثل بسط پارامتر و بسط حسابی و غیره داریم.
    که کار کردن با اون ها به کمی زمان احتیاج داره.
    بسط آکولاد نوعی از بسط هست که خیلی تو اسکریپت هامون بدرد می خوره.
    ما برای محدوده گیری می تونیم از این بسط استفاده کنیم.
    این محدوده می تونه بین اعداد و یا حروف الفبا و غیره باشه.
    خوب یه مثال ساده اگه من یه ارشیو هک از پارسال دارم و حالا بخوام برای هر کدوم یه پوشه به نام سال و یک عدد بین 1 تا 30 برای جدا کردنشون استفاده کنم.
    می تونم از بسط آکولاد برای این کار استفاده کنم
    چون که این بسط رو میشه با خیلی از دستورات خود لینوکس به کار برد. مثل mkdir که این دستور برای ساخت پوشه به کار می ره.
    این کار هم از خطای انسانی جلوگیری می کنه و هم باعث صرفه جویی تو زمان میشه.

    exapansion.PNG

    دیگه مثال واضح هست.
     
    آخرین ویرایش: ‏22/10/19
    Ruiner، Unkn0wn و blackops از این ارسال تشکر کرده اند.
  6. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [تکنیک جانشینی دستور]
    زمانی که بخوام خروجی ها رو به طور مستقیم استفاده کنم.
    می تونم از تکنیک جانشینی دستور استفاده کنم.
    کار با این تکنیک خیلی مهمه چون که بعضی وقت ها بدست اوردن خروجی یک یا چند دستور امکان پذیر نیست.
    و من باید به محتوای اون خروجی اشاره کنم.
    برای مثال من می خوام ببینم که دستور cp که مربوط به کپی کردن هست در کجا قرار داره.
    می تونم این کار رو با دستور معروف which انجام بدم.
    ولی من جزییاتش هم به صورت long می خوام.
    اگه من بنویسم ls -l which cp خوب جواب نمی ده.
    از پایپ لاین هم نمی تونم استفاده کنم. به خاطر یکسری محدودیت.
    اینجا می تونم از این جانشینی فرامین استفاده کنم. که اشاره به محتوای خروجی داره.
    برای این کار عبارت which cp رو در داخل ()$ قرار می دم. و به درون دستور ls -l می ریزم!

    substitude.PNG
     
    آخرین ویرایش: ‏25/10/19
    Ruiner و Unkn0wn از این پست تشکر کرده اند.
  7. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [کار با دستور read]
    ما تو اسکریپت هامون لازم داریم که از کاربر ورودی بگیریم.(البته همیشه باید به نوع و مقدار این ورودی ها دقت کنیم)
    به هر حال ما احتیاج به تعامل با کاربر داریم و برای این کار می تونیم از دستور read استفاده کنیم.
    که عبارت read ip مقداری رو به درون متغیر ip قرار می ده.
    دستور read سوییچ های زیادی داره برای مثال سوییچ s- که برای ذخیره ی کلمات عبور استفاده میشه
    و یا p- که نمایش در یک خط به کار میره. و...
    چند تا مثال:

    read.PNG

    read2.PNG

    read3.PNG

    read4.PNG

    read5.PNG

    read6.PNG

    read7.PNG
     
    آخرین ویرایش: ‏22/10/19
    Ruiner از این پست تشکر کرده است.
  8. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [کار با رشته ها و فایل ها]
    کار با رشته ها خودش داستان داره طوری که میشه ساعت ها در موردش بحث کرد.
    ولی نکته ای که وجود داره ما باید حداقل کار با اون ها رو بدونیم.
    که دو مورد از اون ها رو مثال می زنم.
    که یکی بدست آوردن طول رشته ها هست. این کار برای شناسایی نوع الگوریتم های رمزنگاری و همین طور کرک اونها و حتی کرک برخی پروتکل های شبکه مهم هست.
    از این ساختار دستوری برای چک کردن طول یک رشته که می تونه در یک متغیر جا داشته باشه میشه استفاده کرد. {value#}$
    دیگری الحاق یا چسبوندن دو رشته به هم هست. که خیلی هم ساده هست.
    ما دو متغیر به نام های name1 و name2 داریم حالا اگه این دو رو به ترتیب در متغیر سومی به نام name3 قرار بدیم عملا این دو رو به هم الحاق کردیم.
    البته موضوع الحاق در عناصری که در بش وجود داره می تونه خیلی هم پیچیده باشه. ولی اون ها جز بحث ما نیست.

    string.PNG

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

    file.PNG
     
    آخرین ویرایش: ‏25/10/19
    Ruiner، Unkn0wn و blackops از این ارسال تشکر کرده اند.
  9. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [کار با اعداد در بش]
    استفاده از اعداد در برنامه هامون بعضی مواقع الزامی هست.
    که در واقع ما می تونیم از بش به عنوان یه ماشین حساب استفاده کنیم ایده ی جالبی هست.
    بش عملگر های اصلی رو پوشش می ده.
    توان **
    ضرب *
    تقسیم /
    جمع +
    تفریق -
    برای محاسبه ما اعداد رو در داخل (( )) قرار میدیم.
    در صورتی که قصد داشته باشیم اون رو در یک متغیر قرار بدیم از $ استفاده می کنیم.
    ولی مشکلی که هست بش فقط از اعداد صحیح پشتیبانی می کنه. در واقع اعداد رو گرد می کنه.
    برای محاسبه اعداد اعشاری می تونیم از برنامه bc استفاده کنیم.
    ولی ما کاری به اون نداریم چون که قصد انجام محاسبات فیثاغوریس رو فعلا نداریم.
    همین که دو عدد رو با هم جمع یا تفریق کنیم. کافی هستش.
    به این مثال دقت کنید.

    math.PNG
     
    Ruiner از این پست تشکر کرده است.
  10. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [دستور شرطی if و دستور case]
    ما برای این که بتونیم برنامه های بهتری ایجاد کنیم لازم داریم که منطق رو به برنامه هامون اضافه کنیم.
    اگه بخوام اون رو به طور عمومی توضیح بدم این طوری هست.
    فرض کنید که ما تو یه چهارراه هستیم و این که باید کدوم مسیر رو انتخاب کنیم.
    اینکه اگه مسیری که انتخاب کردیم جاده ی لغزنده داشت چی کار کنیم.
    اینکه اگه در جاده پلیس بود و به ما گیر داد چی کار کنیم.
    و چیزهای دیگه.
    تو برنامه نویسی هم همین طور هست. و ما باید جریان اجرای یه برنامه رو کنترل کنیم.
    برای این کار می تونیم از دستور شرطی if استفاده کنیم.
    if expression یه عبارت در جلوی دستور if که این همون شرط ما هست.
    عبارت ما می تونه در داخل یک یا دو براکت قرار بگیره.
    این شرط می تونه درست و یا غلط باشه.
    اگه شرط ما درست بود بعد از عبارت then می تونیم دستوراتمون رو اجرا کنیم.
    و اگه شرطمون غلط بود از عبارت else قبل از دستوراتمون و یا پیام های هشدار استفاده می کنیم.
    و در نهایت if رو با fi می بندیم.
    خوب برای انجام مقایسه ما از یکسری نمادها و یا عملگر استفاده می کنیم.
    مثل
    کوچکتر >
    بزرگتر <
    مساوی =
    که بیشتر برای مقایسه ی رشته ای به کار میرن.
    ولی نوع دیگه از عملگرها وجود داره. که برای مقایسه ی اعمال ریاضی کاربرد داره.
    مثل
    کوچکتر lt-
    بزرگتر gt-
    کوچکتر و مساوی le-
    بزرگتر و مساوی ge-
    مساوی eq-
    نامساوی nq-
    این هم یه مثال ساده

    if.PNG

    if2.PNG

    اگه شرط های ما زیاد بود می تونیم از عبارت elif و یا شرط های تو در تو استفاده کنیم.
    ولی اگه شرط های ما خیلی زیاد بود چی؟
    چون که صحبت از منطق در برنامه هامون کردیم. پس خیلی منطقی نیست که از این روش استفاده کنیم.
    روش دیگه ای با استفاده از دستور case وجود داره که خیلی کار با اون مناسب تر هست.
    ما یک مبنا قرار میدیم این مبنا می تونه یک متغیر و یا بخشی از یه متغیر باشه البته ما هنوز با آرایه ها اشنا نیستیم.
    اگه مبنایی که تعیین کردیم درست بود عبارت هایی که بعد از پرانتز به کار بردیم اجرا میشه.
    و در پایان عبارت هامون از دوعلامت ;; سمی کالن استفاده می کنیم.
    کاراکتر ستاره یادتون هست دیگه؟
    که اشاره به عبارات تعیین نشده داره.
    و در نهایت case رو با esac می بندیم.
    این هم یه مثال

    case.PNG

    case2.PNG

    case3.PNG

    case4.PNG
     
    Ruiner و Unkn0wn از این پست تشکر کرده اند.
  11. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    سلام
    [حلقه ی تکرار for و while]
    هر موقع بخواهیم که یک محدوده از شاخص ها و یا توالی رو به کار ببریم می تونیم از این حلقه استفاده کنیم.
    کار با این حلقه خیلی ساده هست.
    برای مثال من من یک متغیر به نام r ایجاد کردم.
    و محدوده ی اعداد بین 1 تا 5 رو تعیین کردم.
    for.PNG

    که با اجرای این اسکریپت اعداد بین 1 تا 5 برای من چاپ میشه.

    for2.PNG

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

    for3.PNG

    for4.PNG

    و اما حلقه ی while
    کار با این حلقه هم به سادگی for هست.
    زمانی که من یک شرطی دارم ولی زمان وقوع اون رو نمی دونم که چه زمانی هست.
    و بستگی جریان اجرای خود برنامه داره.
    می تونم از حلقه ی while استفاده کنم البته کاربردهای مختلفی داره.
    برای مثال من قصد ایجاد کانکشن حالا از نوع tcp رو با تارگتم دارم.
    می تونم از یک حلقه استفاده کنم طوری که تعداد کانکشن رو از کاربر بگیره.
    و یک کانتر تعیین می کنم برای مبنای خودم و هر زمانی که که شرط من به پایان رسید از حلقه خارج بشم.
    البته باید کانتر خودم رو در انتهای حلقه update کنم.

    while.PNG

    while2.PNG

    در ضمن از حلقه های بی نهایت هم میشه استفاده کرد ولی این کار خیلی توصیه نمیشه.
     
    Ruiner از این پست تشکر کرده است.
  12. Reza.Black
    عضو انجمن

    وضعیت:
    Offline
    تاریخ عضویت:
    ‏19/11/17
    ارسال ها:
    67
    تشکر شده:
    314
    جنسیت:
    محل سکونت:
    North
    Name:
    Reza
    Main os:
    Linux
    [آرایه ها]
    مواقعی وجود داره که من تعداد زیادی متغیر دارم و اگه بخوام به همه ی اون ها دسترسی داشته باشم و مقدارشون رو تغییر بدم.
    خوب کار دشواری هستش ایده ی بهتر استفاده از آرایه ها هست. این طوری در واقع می تونم یک لیست رو ایجاد کنم.
    و می تونم با استفاده از اندیس ها به اون ها اشاره کنم.
    برای تعریف آرایه ها تو بش ما از پرانتز استفاده می کنیم و مقادیر رو با فاصله درون پرانتز قرار می دیم.
    برای اشاره به مقادیرهم از اندیس ها استفاده می کنیم که این اندیس ها از 0 شروع میشن و به ترتیب 3 2 1 0 همین طوری ادامه دارن.
    البته فکر کنم که معکوسشون هم از اعداد منفی شروع بشه از 1- اگه یادم باشه.
    برای مثال من یه آرایه تعریف کردم از یکسری از زبان ها و می تونم توسط اندیس ها به مقدار اون ها اشاره کنم.
    حتی می تونم یک اندیس جدید با یک مقدار جدید تعیین کنم البته باید ترتیب اندیس ها رو رعایت کرد.

    array.PNG

    array2.PNG

    array3.PNG

    array4.PNG
     
    Ruiner از این پست تشکر کرده است.
بارگذاری...
مطالب مشابه
  1. root3r
    پاسخ ها:
    3
    دانلودها:
    1,859
  2. G0N3
    پاسخ ها:
    1
    دانلودها:
    4,725
  3. Dalghak
    پاسخ ها:
    4
    دانلودها:
    1,117
  4. R3DM0V3
    پاسخ ها:
    6
    دانلودها:
    1,216
  5. R3DM0V3
    پاسخ ها:
    2
    دانلودها:
    1,027
به انجمن تخصصی امنیت ایران سایبر خوش آمدید . برای مشاهده تمامی تالار ها و امکانات ثبت نام کنید .