سیستم عامللینوکس

آموزش اسکریپت نویسی با Bash در لینوکس

اسکریپت نویسی با بش (Bash) در لینوکس

بش (bash) نام زبان ترمینال در لینوکس هست. هنگامی که یک ترمینال (مانند GNOME Terminal) را اجرا می کنید، پوسته Bash را اجرا می کنید که با یک اعلان مواجه می شوید. معمولاً یک علامت دلار ( $ ) که نشان می دهد پوسته منتظر وارد کردن ورودی شما است.

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

بعد از بالا آمدن کامپیوتر، برای برقراری ارتباط با آن 2 راه وجود دارد که یکی از طریق محیط گرافیکی و دیگری از طریق دستورات کامندی است که از طریق همین bash انجام می پذیرد.

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

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

خروجی دستورات لینوکس در فایل txt

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

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

برای مثال ما می توانیم با دستور زیر خروجی دستور ping را در یک فایل txt ذخیره کنیم.

ping 192.168.1.102 -c 4 > ip.txt
خروجی دستورات لینوکس در فایل txt
خروجی دستورات لینوکس در فایل txt

همانطور که در دستور بالا مشاهده می کنید ما به ترمینال دستور دادیم 4 بار از آی پی 192.168.1.102 پینگ گرفته و آن را بر روی فایل ip.txt ذخیره کند.

دستور (grep ، cut ، tr)

بعضی اوقات برای مرتب سازی خروجی فایل دنبال منابع مشترک داده ها می گردیم، برای مثال در یک مدرسه 20 نفر به اسم علیرضا وجود دارد و هرکدام از آنها در یک کلاس متفاوت با پایه های متفاوت هستند. برای پیدا کردن آنها به جای اینکه خودمان در لیست بگردیم می توانیم از دستور زیر برای پیدا کردن آن ها در یک لیست استفاده کنیم.

cat list.txt | grep "علیرضا"

به همین سادگی میتوانیم لیست را فیلتر کنیم. معمولا برای نفوذگرها کاربرد این دستور در اسکن کردن ip است. به طوری که می توانیم با دادن یک لیست بزرگ ip به سیستم و فیلتر کردن آنها به یک لیست ip فعال دسترسی بگیریم.

وقتی به یک سیستم داخل شبکه ping میگیریم اولین کلمه خروجی آن bytes 64 است. که به معنای فعال بودن و جواب دادن پکت است.

حال می توانیم از یک سیستم پینگ بگیریم و خروجی آن را ip.txt بگذاریم و با دستور زیر پکت هایی که جواب داده شده را نمایش دهیم.

cat ip.txt | grep "64 bytes"
استفاده از grep در ترمینال
استفاده از grep در ترمینال

همچنین می توانیم با اضافه کردن cut، فقط یک قسمت دلخواه از خروجی فیلتر شده را ببینیم. در مثال پایین با ماژول d- تمام خط فاصله ها و کلمات را حذف می کنم و با دستور f 4- کلمه چهارم از جمله را نگه میدارم.

cat ip.txt | grep "64 bytes" | cut -d " " -f 4
استفاده از cut در ترمینال
استفاده از cut در ترمینال

حال در خروجی فقط IP را میبینیم ولی در آخر ip یک : وجود دارد که می توانیم با دستور tr آنرا هم حذف کنیم و یک ip یکدست داشته باشیم.

 cat ip.txt | grep "64 bytes" | cut -d " " -f 4 | tr -d ":"
استفاده از tr در ترمینال
استفاده از tr در ترمینال

نوشتن یک اسکریپت در لینوکس

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

اما به جای اینکه ما دستورات را یکی یکی وارد ترمینال لینوکس کنیم، می توانیم آنها را در قالب یک اسکریپت با پسوند sh. ذخیره کرده و خیلی راحت از آن استفاده کنیم.

برای مثال در دستور پایین یک اسکریپت ساده برای اسکن ip را می بینید که فقط با ذخیره کردن آن در یک فایل با پسورد sh. می توانید از آن استفاده کنید.

#!/bin/bash
for ip in `seq 1 254` ; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
  • دستور for به معنای “برای” است و یک حلقه تکرار محسوب می شود.
  • دستور seq برای رنج ip استفاده شده است.

دستور بالا را در یک فایل به نام ipsweep.sh ذخیره کرده و بعد از آن برای اسکن رنج آی پی 192.168.1.1 : 192.168.1.254 دستور زیر را وارد می کنم:

./ipsweep.sh 192.168.1

 

نوشتن اسکریپت با زبان بش در لینوکس
نوشتن اسکریپت با زبان بش در لینوکس

حالا می توانیم تمام ip های فعال در شبکه خصوصی که از این رنج ip استفاده میکنند را مشاهده کنیم. حتی می توانیم با دستور زیر خروجی را در یک فایل txt ذخیره کنیم.

./ipsweep.sh 192.168.1 > iplist.txt

برای اینکه اسکریپت ما برای دیگران هم قابل استفاده باشد، میتوانیم یک راهنما برای آن بنویسیم! به طور مثال میتوانیم یک شرط اضافه کنیم که اگر کاربر رنج ip را وارد نکرد، یک پیغام نمایش دهد که “ip وارد نشده است و نحوه استفاده از اسکریپت اینگونه است”.

#!/bin/bash
if [ "$1" == "" ]
then
echo "hello from kaliboys!"
echo "IP faramosh shode !!!"
echo "syntax : ./ipsweep.sh 192.168.1"

else

for ip in seq 1 254 ; do
ping -c 1 $1.$ip | grep "64 bytes" | cut -d " " -f 4 | tr -d ":" &
done
fi
گذاشتن شرط در بش اسکریپت
گذاشتن شرط در بش اسکریپت
  • دستور if به معنای “اگر” است و شرط ما را بیان می کند.
  • دستور then به معنای “سپس” است که در تایید if می آید و دستور پایینش را اجرا می کند.
  • دستور else به معنای “در غیر این صورت” است که اگر شرط ما اشتباه بود برای ما ip را اسکن کند.

حلقه های تکرار (for , loops)

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

در مثال پایین من از فایل txt که بالاتر، آن را با اسکریپت خودمان به دست آوردیم استفاده کرده و پورت 80 تمام ip های فعال در شبکه خصوصی خود را با ابزار nmap اسکن می کنیم.

for ip in $(cat iplist.txt); do nmap -sS -p 80 -T4 $ip & done
حلقه های تکرار (for , loops)
حلقه های تکرار در لینوکس

همانطور که در عکس بالا می بینید، من با یک خط کد پورت چندین ip را با ابزار nmap اسکن کردم.

از حلقه های تکرار می توانید در اسکریپت های bash هم استفاده کنید. مثلا می توانید اسکریپتی که برای اسکن ip ساختیم را به یک حلقه تکرار متصل کنیم.

این کار را به عنوان یک تمرین برای شما در نظر گرفته ام که خودتان بتونید اسکریپت نویسی کنید.

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

علیرضا حاجی زاده

هارد مغز خود را از برنامه های غیر مفید، پر نکنیم، تا فضا را برای نصب برنامه های مفید، تنگ ننماییم.

‫2 دیدگاه ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *


دکمه بازگشت به بالا