The Net's a cross between an elephant and a white elephant sale: it never forgets, and it's always crap. --Nemo |
یک سیستم لینوکس دارای تعدادی ابزار جهت دستیابی، دستکاری، و عیبیابی کردن ارتباطات شبکه است. ما میتوانیم برخی از این ابزارها را در اسکریپتها به کار بگیریم -- اسکریپتهایی که دانش ما از شبکهسازی را گسترش میدهند، اسکریپتهای مفیدی که میتوانند مدیریت یک شبکه را تسهیل کنند.
این هم یک اسکریپت ساده CGI که متصل شدن به یک سرویسدهنده راه دور را نمایش میدهد.
مثال 30-1. چاپ کردن محیط سرویسدهنده
#!/bin/bash # #نوشته Michael Zick #استفاده شده با مجوز #ممکن است برای سایت شما تعویض مسیر (مفسر) لازم باشد. #(در سرویسدهنده ISP، ممکن است Bash در محل معمول نباشد.) #محلهای دیگر: /usr/bin یا /usr/local/bin #حتی میتوانید bash بدون مسیر را در شبانگ امتحان کنید. #غیر فعال کردن جانشینی نامفایل. set -f #سرآیند به مرورگر میگوید که چه چیزی انتظار داشته باشد. echo Content-type: text/plain echo echo CGI/1.0 test script report: echo echo environment settings: set echo echo whereis bash? whereis bash echo echo who are we? echo ${BASH_VERSINFO[*]} echo echo argc is $#. argv is "$*". echo #متغیرهای محیط مورد انتظار در CGI/1.0 echo SERVER_SOFTWARE = $SERVER_SOFTWARE echo SERVER_NAME = $SERVER_NAME echo GATEWAY_INTERFACE = $GATEWAY_INTERFACE echo SERVER_PROTOCOL = $SERVER_PROTOCOL echo SERVER_PORT = $SERVER_PORT echo REQUEST_METHOD = $REQUEST_METHOD echo HTTP_ACCEPT = "$HTTP_ACCEPT" echo PATH_INFO = "$PATH_INFO" echo PATH_TRANSLATED = "$PATH_TRANSLATED" echo SCRIPT_NAME = "$SCRIPT_NAME" echo QUERY_STRING = "$QUERY_STRING" echo REMOTE_HOST = $REMOTE_HOST echo REMOTE_ADDR = $REMOTE_ADDR echo REMOTE_USER = $REMOTE_USER echo AUTH_TYPE = $AUTH_TYPE echo CONTENT_TYPE = $CONTENT_TYPE echo CONTENT_LENGTH = $CONTENT_LENGTH exit 0 #Here document برای ارایه دادن راهنماییهای کوتاه. :<<-'_test_CGI_' 1) Drop this in your http://domain.name/cgi-bin directory. 2) Then, open http://domain.name/cgi-bin/test-cgi.sh. _test_CGI_
ممکن است از لحاظ امنیتی، مشاهده کردن آدرسهای IP که کامپیوتر دستیابی میکند، مفید باشد.
#!/bin/bash #ip-addresses.sh #لیست آدرسهای IP که کامپیوتر به آنها وصل است. #الهام گرفته از اسکریپت ddos.sh نوشته Greg Bledsoe در #Linux Journal شماره مارس 09 2011 # # #Greg اسکریپت را تحت مجوز GPL2 قرار داده است، و این اسکریپت نیز GPL2 است. connection_type=TCP #همچنین UDP را امتحان کنید. field=2 #فیلدی از خروجی که برای ما جالب توجه است. no_match=LISTEN #فیلتر کردن رکوردهای شامل این کلمه. چرا؟ lsof_args=-ni #-i فایلهای مرتبط شده با اینترنت را لیست میکند. #-n آدرسهای IP عددی را حفظ میکند. #بدون گزینه -n چه اتفاق میافتد؟ امتحان کنید. router="[0-9][0-9][0-9][0-9][0-9]->" #حذف اطلاعات روتر. lsof "$lsof_args" | grep $connection_type | grep -v "$no_match" | awk '{print $9}' | cut -d : -f $field | sort | uniq | sed s/"^$router"// #اسکریپت Bledsoe خروجی لیست IP فیلتر شده (مشابه سطرهای 20-22 فوق) را به #یک متغیر تخصیص میدهد. #او اتصالهای چندتایی برای یک آدرس IP منفرد را کنترل میکند، سپس این سطر را # # # #در یک حلقه با ۶۰ ثانیه تاخیر، برای گریز بستهها از حملات DDOS به کار میبرد #تمرینها: #------------- #فرمان iptables را برای گسترش این اسکریپت به کار ببرید، تا تلاشهای برقراری #+ارتباط از IP دامنههای شناخته شده به عنوان اسپم کننده را نپذیرد.
مثالهای بیشتری از برنامهنویسی شبکه:
همچنین فرمانهای شبکهسازی در فصل فرمانهای سیستم و مدیریت و فرمانهای ارتباطات در فصل فیلترهای خارجی، برنامهها و فرمانها را مشاهده نمایید.