به عنوان یک توسعه دهنده وب، زمانیکه مشکلی به وجود میآید، زندگی سخت
میگردد. مشکل می تواند در هرجایی به وجود بیاید. آیا مشکل از درخواستی است
که میفرستید؟ آیا مشکل از پاسخ سمت سرور است؟ آیا مشکل از بسته نرم افزاری
دیگری است که استفاده می کنید و شاید هم API خارجی دچار مشکل شده است. اگر
یک توسعه دهنده حرفه ای باشید یا مدیر سرور، برایتان زیاد پیش می آید که
مجبورید از Command Line برای حل مشکل تان استفاده کنید.
یک ابزار خوب برای یافتن مشکلات می تواند بسیار گرانبها باشد و حتی از وقوع
اشکال از همان اول جلوگیری کند. ما در این مطلب به پنج تا از مفید ترین
دستورات محیط کامند لاین برای یافتن خطاها و اشکلات اشاره خواهیم کرد. اگر
مدیر سرور هستید یا یک توسعه دهنده وب حرفه ای، ادامه مطلب را از دست
ندهید.
Curl
اگر
با کامند های انتقالی در شبکه مانند Wget آشنایی داشته باشید، Curl هم در
همین گروه قرار می گیرد. این دسته از دستورات محتوای صفحات وب را برای شما
بازآوری می کنند و آن را نمایش می دهند. تفاوت اصلی بین Curl و Wget این
است که Wget محتوای صفحه را در فایل ذخیره می کند اما Curl آن را در همان
محیط کامند لاین نمایش می دهد و همین امر استفاده از Curl را برای شما
بسیار ساده خواهد کرد. برای مثال با زدن دستور زیر می توانید آی پی ای که
هم اکنون در محیط اینترنت با آن در حال فعالیت هستید را از طریق
ifconfig.me مشاهده کنید:
- $ curl ifconfig.me
- 93.96.101.90
دستور curl -i هدر های صفحه را نیز نمایش داده و دستور curl -I فقط هدر های
صفحه را فراخوانی می کند. این دو دستور بسیار در فهمیدن این که دقیقا HTTP
چه هدری را برای شما می فرستد مفیدند.
- $ curl -I news.ycombinator.com
- HTTP/1.1 200 OK
- Content-Type: text/html; charset=utf-8
- Cache-Control: private
- Connection: close
آپشن L- یک ابزار بسیار مفید است که باعث می شود curl ریدایرکت ها را نیز
دنبال کند. Curl همچنین از HTTP Basic authentication و کوکی ها و بسیاری
از موارد دیگر پشتیبانی می کند.
Ngrep
برای آنالیز پکت ها در شبکه می توان از نرم افزار بسیار قدرتمند Wireshark،
همراه هزاران امکان و تنظیم استفاده کرد. همچنین برای محیط کامند لاین هم
می توانید از نسخه دیگر این نرم افزار تحت عنوان TShark یاد کرد. اما برای
کار های ساده استفاده از این نرم افزار به نظر پیچیده می آید. اگر دنبال یک
ابزار قدرتمند و ساده برای آنالیز بسته های شبکه هستید می توانید از دستور
Ngrep استفاده کنید.
برای استفاده از این ابزار در کنترل بسته های وب همواره از آپشن W byline-
جهت حفظ لاین بریک ها و q- برای حذف برخی از اطلاعات غیر مفید خروجی
استفاده کنید. برای مثال دستور زیر جهت بررسی تمام پکت هایی که از نوع Get و
یا Post هستن، استفاده می شود.
- ngrep -q -W byline "^(GET|POST) .*"
همچنین شما می توانید فیلتر های بیشتری جهت محدود کردن بسته ها به یک آی پی
و یا آدرس خاص را اضافه کنید. برای مثال با دستور زیر تمام بسته های
ارسالی و یا دریافتی از گوگل که شامل "search" هستند را نمایش می دهد.
- ngrep -q -W byline "search" host www.google.com and port 80
Netcat
netcat و یا همان nc ابزاری مانند چاقو های ارتش سوییس در شبکه محسوب می
شود. بسیار ساده اما بسیار قدرتمند است. ابزاریست که به شما این امکان را
می دهد تا کانکشن های دلخواه خود را در شبکه ایجاد کنید. برای مثال در
دستور زیر به عنوان یک پورت اسکنر از آن استفاده شده است:
- $ nc -z example.com 20-100
- Connection to example.com 22 port [tcp/ssh] succeeded!
- Connection to example.com 80 port [tcp/http] succeeded!
علاوه بر یک ایجاد کننده کانکشن های دلخواه می توان از ترکیب nc و tar
برای کپی کردن فایل ها ما بین دو سرور استفاده کرد. برای این کار کافیست از
دستور زیر سمت سرور:
- $ nc -l 9090 | tar -xzf -
و از دستور زیر در سمت کلاینت استفاده کنید:
- $ tar -czf dir/ | nc server 9090
شما همچنین می توانید از nc برای در دسترس قرار دادن یک اپلیکیشن در شبکه
استفاده کنید برای مثال ما در پایین امکان برقراری دسترسی Shell از طریق
پورت 8080 را به می دهیم:
- $ mkfifo backpipe
- $ nc -l 8080 0 backpipe
هم اکنون هر کلاینت به راحتی با دستور زیر به سرور دسترسی خواهد داشت:
- $ nc example.com 8080
- uname -a
- Linux li228-162 2.6.39.1-linode34 ##1 SMP Tue Jun 21 10:29:24 EDT 2011 i686 GNU/Linux
ممکن است مثال های قبل به نظر غیر ضروری بیایند و شما ترجیح دهید برای
دسترسی به سرور مستقیما از ssh استفاده کنید اما این مثال ها بیانگر قدرت
بسیار زیاد Netcat هنگامی که با اپلیکیشن های دیگر ترکیب می شود هستند.
Sshuttle
Sshuttle به شما این امکان را می دهد تا از طریق یک تونل به هر سروری که
دسترسی SSH به آن دارید وصل شوید و ترافیک خود را از طریق این سرور منتقل
کنید. با این کار شما در مقابل ابزار هایی مانند Firesheep و یا dsniff
هنگامی که در یک محیط عمومی از اینترنت استفاده می کنید در امان خواهید
بود. این ابزار می تواند امنیت شما را تا حد زیادی ارتقا دهد. با استفاده
از این ابزار تمام درخواست های شما از جمله درخواست DNS می تواند از طریق
سروری دیگر پاسخ داده شود.
- $ sshuttle -r --dns 0/0
با استفاده از دستور --daemon شما می توانید sshuttle را به صورت پس زمینه
اجرا کرده و با ترکیب با آپشن های دیگر با استفاده از آدرسی ساده به راحتی و
سریع آن را فعال و غیر فعال کنید.
- alias tunnel='sshuttle --D --pidfile=/tmp/sshuttle.pid -r --dns 0/0'
- alias stoptunnel='[[ -f /tmp/sshuttle.pid ]] && kill `cat /tmp/sshuttle.pid`'
شما برای استفاده از این ابزار می توانید از سرور هایی ارزان در هرکدام از
دیتا سنتر های موجود در کشور استفاده کرده و این امکان ساده را برای بالا
بردن امنیت خود استفاده کنید.
برای محدود کردن این سرویس به آی پی ای خاص و یا هاستی خاص به جای ارسال
تمام ترافیک می توانید از دستور زیر استفاده کنید. اما اگر از آدرس هاست می
خواهید استفاده کنید به دلیل اینکه Sshuttle تنها از آی پی پشتیبانی می
کند می توانید از dig ابتدا استفاده کرده تا به آی پی مورد نظر دست پیدا
کنید:
- $ sshuttle -r `dig +short `
Siege
siege یک ابزار بنچ مارک HTTP است که با افزودن آپشن -g که بسیار شبیه -iL
برای curl می باشد هدر های صفحه را نیز نمایش می دهد. برای مثال اجرای این
دستور را برای گوگل در پایین مشاهده می کنید(برخی هدر ها برای راحتی در
خواندن حذف شده اند):
- $$ siege -g www.google.com
- GET / HTTP/1.1
- Host: www.google.com
- User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70)
- Connection: close
-
- HTTP/1.1 302 Found
- Location: http://www.google.co.uk/
- Content-Type: text/html; charset=UTF-8
- Server: gws
- Content-Length: 221
- Connection: close
-
- GET / HTTP/1.1
- Host: www.google.co.uk
- User-Agent: JoeDog/1.00 [en] (X11; I; Siege 2.70)
- Connection: close
-
- HTTP/1.1 200 OK
- Content-Type: text/html; charset=ISO-8859-1
- X-XSS-Protection: 1; mode=block
- Connection: close
یک قابلیت بسیار ستودنی Siege استفاده برای تست لود سرور است. مانند دستور
ab (که یک دستور تست لود سرور با استفاده از آپاچی می باشد) شما می توانید
چند درخواست هم زمان را به سمت سرور فرستاده و نتیجه زیبایی از آن دریافت
کنید. در پایین ما برای مثال ۲۰ کانکشن هم زمان برای ۳۰ ثانیه به گوگل
فرستادیم و نتیجه به صورت زیر بوه است:
- $ siege -c20 www.google.co.uk -b -t30s
- ...
- Lifting the server siege... done.
- Transactions: 1400 hits
- Availability: 100.00 %
- Elapsed time: 29.22 secs
- Data transferred: 13.32 MB
- Response time: 0.41 secs
- Transaction rate: 47.91 trans/sec
- Throughput: 0.46 MB/sec
- Concurrency: 19.53
- Successful transactions: 1400
- Failed transactions: 0
- Longest transaction: 4.08
- Shortest transaction: 0.08
در مطالب آینده ابزارهای بیشتر و پیشرفته تر را نیز معرفی خواهیم کرد.