فصل ‎30‎- برنامه‌نویسی شبکه

 

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

#  test-cgi.sh
#  نوشته ‎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 که کامپیوتر دستیابی می‌کند، مفید باشد.

مثال ‎30-2‎. آدرس‌های IP

#!/bin/bash

# ip-addresses.sh
# لیست آدرس‌های IP که کامپیوتر به آنها وصل است.

# الهام گرفته از اسکریپت ‎ddos.sh‎ نوشته ‎Greg Bledsoe‎ در
# ‎Linux Journal‎ شماره مارس  09 ‎‎2011‎
#         URL:
#   http://www.linuxjournal.com/content/back-dead-simple-bash-complex-ddos
# ‎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 منفرد را کنترل می‌کند، سپس این سطر را
#
# iptables -I INPUT -s $ip -p tcp -j REJECT --reject-with tcp-reset
#
# در یک حلقه با ۶۰ ثانیه‌ تاخیر، برای گریز بسته‌ها از حملات DDOS به کار می‌برد


#                                     تمرین‌ها:
#                                   -------------
# فرمان iptables را برای گسترش این اسکریپت به کار ببرید، تا تلاش‌های برقراری
#+         ارتباط از IP دامنه‌های شناخته شده به عنوان اسپم کننده را نپذیرد.

مثال‌های بیشتری از برنامه‌نویسی شبکه:

  1. به دست آوردن زمان از ‎nist.gov‎

  2. بار گیری یک ‎URL‎

  3. یک تونل ‎GRE‎

  4. کنترل فعال بودن یک سرویس‌دهنده اینترنت

  5. مثال ‎16-41‎

  6. مثال ‎A-28‎

  7. مثال ‎A-29‎

  8. مثال ‎29-1‎

همچنین فرمان‌های شبکه‌سازی در فصل فرمان‌های سیستم و مدیریت و فرمان‌های ارتباطات در فصل فیلترهای خارجی، برنامه‌ها و فرمان‌ها را مشاهده نمایید.