You are here

دست نوشته‌های حامد

Subscribe to دست نوشته‌های حامد feed
دست نوشته های حامد
Updated: 1 ساعت 42 دقیقه پیش

چجوری برای سایت the coding love‌ کانال تلگرام درست کردم

Fri, 03/10/2017 - 19:17

سایت The Coding Love رو قبلا معرفیش کردم، یک سایت جمع و جور که گیف‌های گیکی میذاره که هرکسی از اون گیف‌ها سردر نمیاره. من هم به این سایت علاقه زیادی دارم و هر روز چکش میکنم ولی مساله‌ای که وجود داشت این بود که گاهی این سایت توی یک ساعت چندتا گیف جدید میذاشت و گاهی هم چند روز خبری نبود که یکم این مورد من رو اذیت میکرد. دیدم الآن که چند وقتیه بازار کانال‌های تلگرامی گرم شده بد نیست که بگردم و ببینم برای این سایت کانال تلگرامی وجود داره یا نه. کمی گشتم و یک کانال تلگرام تونستم براش پیدا کنم ولی این کانالی که پیدا کردم و آدرس دقیقش هم یادم نیست یک مشکل داشت و اون هم این بود که فقط لینک گیف‌های جدید رو میذاشت و باز هم نیاز بود چندتا کلیک انجام بدم و از داخل مرورگر گیف ها رو بینم که اصلا برام جالب نبود. به همین خاطر تصمیم گرفتم یک کانال درست کنم که مطالب داخلش توسط یک بات به صورت خودکار گذاشته میشه و گیف‌ها هم مستقیما داخل کانال گذاشته شده باشن و راحت ببینمشون. خب بریم ببینیم چه کارها کردم!!!

احتمالا اگه شما جای من بودین تصمیم میگرفتین از آخرین گیفی که تو سایت the coding love (از این به بعد خلاصش میکنم به tcl) گذاشته شده شروع کنین و فقط گیف‌های جدید رو اضافه کنین ولی من نمی‌خواستم این کار رو بکنم 🙂 تصمیم گرفتم اول از همه هرچی گیف تو سایت tcl‌ هست رو بذارم رو کانال و بعد از اون هم گیف های جدید رو بذارم. خب از اون جایی که یک بات قراره تو کانال پست بذاره پس اول نیاز به یک بات داریم، بات ساختن هم که کاری ندارهِ، فقط کافیه چندتا پیام به @BotFather بدیم تا باتمون ساخته بشه. چون بات قراره پشت صحنه فقط تو کانالمون پست بذاره پس اسم و توضیحات و بقیه مواردش مهم نیستن، فقط لازمه که یک بات داشته باشیم و توکنش برای این که مدیریتش کنیم. مرحله بعدی هم که مشخصه، ساخت کانالمون، کانالمون رو می‌سازیم و باتمون رو هم به عنوان مدیر بهش اضافه می‌کنیم. برای اضافه کردن بات به عنوان مدیر هم میریم تو بخش اضافه کردن ادمین جدید به کانالمون و از بخش جستجو اسم باتمون رو سرچ می‌کنیم و تمام! حالا کار اصلیمون شروع میشه، نوشته برنامه‌ای که توسط باتمون پست‌های tcl رو بذاره تو کانال! و تا یادم نرفته این نکته رو هم اضافه کنم که وقتی میخوایم با یک بات تو کانال پست بذاریم، chat_it میشه @bot_name.

 

همونطور که اول کار گفتم اول از همه می‌خوام تمام پست‌های tcl‌ رو بذارم رو  کانالی که ساختم و بعد برم سراغ پست‌های جدید. نکته جالبی که متوجه شدم این وسط این بود که تعداد صفحه های سایت tcl‌ روی ۷۷۵ ثابت مونده و صفحه آخر هم یک گیف ثابت داره که تغییر نمیکنه. بگذریم… اولین کاری که میکنم این هست که سورس هر ۷۷۵تا صفحه رو می‌گیرم و تو یه سری فایل که اسمشون از ۱ تا ۷۷۵ هست می‌ریزم تا سورس‌ها برای ادامه کار دم دستم باشن و به علاوه هر ۷۷۵تا صفحه سورسشون رو به صورت هم‌زمان می‌گیرم تا مطمئن بشم که اگه پست جدیدی در حین گرفتن سورس‌ها رو tcl‌ رفت تو سورس‌هایی که من گرفتم مشکلی ایجاد نمی‌شه و باعث نمیشه مثلا یک گیف چندبار تو سورس‌ها باشن. خب کدش میشه این (اگه واستون سواله این کدها چین، بش اسکریپت هستن):

for i in {1..775}
do
	curl "http://thecodinglove.com/page/$i" > $i &
done
wait

 

حالا که سورس‌ها رو دارم لازمه از آخر به اول تو سورس‌ها بگردم و لینک پست‌ها رو از تو سورس صفحه پیدا کنه. با یکم سر و کله زدن با ریجکس و اینجور چیزا تو سورس‌ها می‌گردم تا لینک پست‌ها رو پیدا کنم و بعد لینک‌های پست‌ها که ۴تا تو هر صفحه هست رو میدم به دستور tac تا تریتبشون برعکس بشه و آخرین لینک بیاد بشه اولین لینک تا ترتیب آخر به اول پست‌ها حفظ و بشه و در نهایت هم لینک‌های پست‌ها رو داخل فایل links.txt‌ بذاره و کدش این شد:

for i in {775..1}
do
	egrep 'class="bodytype"' $i | grep -P -o "a href.+?>" | sed -r 's/^.{8}//' | sed -r 's/.{2}$//' | tac >> links.txt
done

 

این نکته رو هم اضافه کنم که من دارم تمام این کدها رو روی یک سرور اجرا می‌کنم که فکر کنم بدیهی باشه چون واقعا اینترنت شاهکارمون پایداری درستی نداره بشه با خیال راحت روش این کدها رو اجرا کرد 😐 حالا ببینیم چندتا لینک داریم

 

اگه یه حساب سر انگشتی کنیم میبینیم که تعداد لینک‌ها باید ۳۰۹۷ باشه یعنی ۳تا بیشتر از این تعداد لینکی که الآن داریم، من هنوز دلیل اون ۳تا اختلاف رو کشف نکردم! شما پیدا کردین حتما زیر همین پست یه کامنت بذارین دلیلش رو بگین 😀 محتوای فایل links.txt لینک مربوط به پست‌ها هست که به این شکلن:

http://thecodinglove.com/post/145704378592/when-i-find-an-unexpected-workaround

بریم ببینیم چجوری میشه توضیحات هر پست و لینک گیف هر پست رو در آورد! به صورت تصادفی فهمیدم اگه آخر لینک هر پست عبارت /xml رو اضافه کنم میتونم محتویات اون صفحه رو با فرمت xml ببینم. آخ جون! با xml خیلی راحت‌تر میتونم اطلاعات لازم رو از صفحه بکشم بیرون تا اینکه بخوام تو html بگردم. خوشبختانه برای کار با xml ابزاری داریم به اسم xml_grep که از اسمش مشخصه برای چه کاریه و تو پکیج (برای اوبونتو) xml-twig-tools هست و در ادامه هم چون درخواست‌هام رو با متد get میخوام به تلگرام بفرستم نیاز به برنامه urlencode‌ هم دارم تا لینک گیف و توضیحاتش رو انکود کنم و خیالم راحت باشه برای ارسالشون مشکلی نخواهم داشت. برنامه urlencode‌ هم تو پکیج gridsite-clients هست که نصبش میکنم. موندم چرا درست یه پکیج به اسم urlencode‌ نداریم و این برنامه باید توسط یه پکیج دیگه با یه اسم عجیب نصب بشه. بریم سراغ خود کد، از داخل xml صفحه لینک فایل گیف و توضیحات رو در میارم، انکود میکنمشون و لینک درخواستی که باید اجرا بشه تا گیف رو کانال توسط بات گذاشته بشه رو به اضافه curl در اولش تو فایل dopost.sh میذارم تا بعد فایل dopost.sh رو مثل یک اسکریپت اجرا کنم و همه گیف‌ها پشت سر هم تو کانال قرار بگیرن. درباره %0A@tclunofficial هم که آخر توضیحات گیف گذاشتم بگم که %0A حکم اینتر رو داره و هرچیزی که ادامش بیاد تو خط بعدی توضیحات نوشته میشه و @tclunofficial هم آدرس کانال هست که در ادامه توضیحات هر گیف میاد.

while read -r LINK
do
	SOURCE="$(curl $LINK/xml)"
	TITLE="$(echo $SOURCE | xml_grep regular-title --text_only)"
	ENCODED_TITLE="$(urlencode $TITLE)"
	IMGLINK="$(echo $SOURCE | xml_grep regular-body --text_only | grep -P -o "(http:\/\/|https:\/\/).+?\/.+?\"" | sed -r 's/.{1}$//')"
	ENCODED_IMGLINK="$(urlencode $IMGLINK)"
		echo "curl \"https://api.telegram.org/botTOKEN/sendDocument?chat_id=@tclunofficial&document=$ENCODED_IMGLINK&caption=$ENCODED_TITLE%0A@tclunofficial\"" >> dopost.sh
done < links.txt

 

حالا کافیه فایل dopost.sh رو اجرا کنیم تا گیف‌ها برن رو کانال. من از برنامه sceen هم استفاده کردم که اگه اتصالم به سرور قطع شد باز هم اسکریپت در حال اجرا بمونه و گیف برن رو کانال و خب دستور نهایی برای اجرای اسکریپت این شد:

screen bash dopost.sh

 

بعد از کمی صبر (برای من ۳ساعت) میبینیم که کانالمون پر از گیف هست! گیف‌ها رو نشمردم و نمیدونم همشون رو کانال رفتن یا نه، امیدوارم که همشون رفته باشن.

حالا تازه می‌رسیم به قسمت اصلی کار! نوشتن یک اسکریپت که پست‌های جدید رو تشخیص بده و پست‌های جدید tcl رو بذاره رو کانال! لازمه که اول از همه اسکریپتی که میخوایم بنویسیم بدونه لینک آخرین پستی که رو کانال هست چیه، یک نگاه به کانال میندازم تا ببینم آخرین گیف چیه و اون گیف رو روی tcl هم پیدا می‌کنم که البته مشخصه تو صفحه اول یا دوم tcl‌ هست. لینک پست مربوط بهش رو برمیدارم و قسمتای اضافه ته لینک که توضیحات گیف هست رو برمیدارم تا به لینکی مثل این برسم

http://thecodinglove.com/post/145704378592

این لینک رو تو فایل

~/.tcllastpostlink

میذارم تا همیشه لینک آخرین پست رو توی این فایل داشته باشم. بریم سراغ کد! من از rss سایت tcl که به فرمت xml‌ هم هست استفاده می‌کنم برای این که ببینم پست جدید اومده یا نه. اول از همه از داخل rss با کمک xml_grep فقط لینک پست‌ها رو میکشم بیرون، ترتیب لینک‌ها رو برعکس میکنم و لینک‌ها رو دونه دونه چک می‌کنم تا ببینم کدوم مثل لینک داخل فایل ~/.tcllastpostlink هست، از اون اون لینک به بعد میشن لینک‌هایی که مربوط به پست‌های جدید هستن و باید برن رو کانال.

POST=0
LASTPOSTLINK=$(cat ~/.tcllastpostlink)
for LINK in $(curl http://thecodinglove.com/rss | xml_grep item | xml_grep link --text_only | tac)
do
	if [ "$POST" = "0" ]
	then
		if [ "$LASTPOSTLINK" = "$LINK" ]
		then
			POST=1
		fi
	else
		SOURCE="$(curl $LINK/xml)"
		TITLE="$(echo $SOURCE | xml_grep regular-title --text_only)"
		ENCODED_TITLE="$(urlencode $TITLE)"
		IMGLINK="$(echo $SOURCE | xml_grep regular-body --text_only | grep -P -o "(http:\/\/|https:\/\/).+?\/.+?\"" | sed -r 's/.{1}$//')"
		ENCODED_IMGLINK="$(urlencode $IMGLINK)"
		curl "https://api.telegram.org/botTOKEN/sendDocument?chat_id=@tclunofficial&document=$ENCODED_IMGLINK&caption=$ENCODED_TITLE%0A@tclunofficial"
		echo "$LINK" > ~/.tcllastpostlink
	fi
done

 

 

لازم هم هست که این اسکریپت رو هر چند دقیقه یکبار اجرا کنیم تا اگه گیف جدیدی رو tcl رفته بود رو کانالمون بذاره. من فرض می‌کنم که این اسکریپت رو تو فایل به اسم poster.sh‌ذخیره کردین. بدیهیه که اول باید به اسکریپت قابلیت اجرایی بدیم و با دستور

chmod +x poster.sh

بهش قابلیت اجرایی میدیم. برای اینکه هر ۱۰ دقیقه هم این اسکریپت اجرا بشه میذارمش رو کرون تب. با دستور

crontab -e

کرون تب رو باز می‌کنم و این خط رو آخر کرون تب اضافه می‌کنم:

*/10 * * * * /path/to/poster.sh > /dev/null 2>&1

 

حالا با خیال راحت پا رو پا میندازم و این اسکریپت وظیفه گذاشتن پست‌های جدید رو کانالی که زدم و یوزرش هم @tclunofficial‌ هست رو انجام میده &#x1f642; دوتا نکته رو هم به عنوان اختتامیه کار بگم و تمام:

۱- به خاطر محدودیتی که تلگرام در حال حاضر برای بات‌ها داره اگه حجم گیفی بیشتر از ۲۰مگ باشه ارسال نمیشه که البته احتمالش خیلی کم هست و تا الآن فقط یک گیف دیدم که حجمش بالای ۲۰مگ بوده و رو کانال نرفته. البته میشه کد رو جوری درست کرد که وقتی حجم گیف بالای ۲۰ مگ باشه لینک پست مربوط به اون گیف رو بفرسته رو کانال ولی خب تا الآن فقط یک گیف دیدم که اینجوری باشه و برای اون یکی نمیصرفه فعلا بشینم کد بزنم :)))

۲- سایت tcl انگشت شمار دیده شده که بجای گیف یک عکس معمولی میذاره که کد فعلی باعث میشه اون عکس به عنوان فایل رو کانال آپلود بشه که مجددا اون رو هم میشه درست کرد ولی برای چندتا عکس در بین چند هزارتا گیف باز هم نمیصرفه کد رو تغییر بدم :)))

برنامه اینستاگرام دانلودر با بش

Sun, 07/17/2016 - 00:06

چند وقت پیش برای استفاده شخصی خودم یک اسکریپت خیلی ساده با بش نوشتم که لینک اینستاگرام رو بهش بدم و عکس و یا فیلم رو دانلود کنه. بعد با خودم گفتم حالا که نوشتمش هرچند که خیلی سادست رو گیت هاب بذارمش شاید به درد کسی خورد. میتونین برنامه insta-dl رو اینجا تو گیت هاب ببینین. البته دوستان پروژه رو فورک کردن و امکان دانلود تمام عکس‌ها و فیلم‌های یک اکانت رو بهش اضافه کردن که کد فورک شده رو هم میتونین اینجا ببینین.

کمپین بهبود خدمت سربازی

Thu, 03/24/2016 - 11:11

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

 

 

سایتشون رو هم میتونین اینجا ببینین…

اسکریپت دریافت ۵۰ فیلم آخر گانول

Fri, 11/20/2015 - 14:29

متاسفانه چند وقته که سایت yts.to تعطیل شده و تیم YIFY دیگه فیلمی رو رلیز نمیکنه. پس فعلا به نظر میاد تنها گزینه موجود برای دانلود فیلم سایت گانول هست (جای خوب دیگه‌ای سراغ دارین خوشحال میشم بگین). برای راحتی خودم یه اسکریپت نوشتم که هر یک ساعت یکبار میاد و لیست ۵۰فیلم آخر گانول رو میگیره و به همراه لینک دانلودشون میذاره توی یک صفحه تا بدون دردسر بتونم رلیزهای جدید گانول رو ببینم. در حال حاظر هم اون صفحه رو میتونین تو این آدرس ببینین.

 

کدها چون با بش اسکریپت نوشته شدن برای اجراشون حتما نیاز به یک سرور لینوکسی دارید. چون حال توضیحات اضافی ندارم، خیلی خلاصه میگم چیکار کردم، جایی مشکل بود بخش نظرات موجوده &#x1f600; اول نیاز به یک فایل دارم تا کدها رو توش بذارم، تو این فایل کدها رو میذارم:

/usr/bin/ganool

 

کدها هم این هست:

echo "" > /var/www/html/movies.html
lastup="$(date -u)"
echo "<title>Latest 50 MOVIES released by Ganool</title>" >> /var/www/html/movies.html
echo "<b>Latest 50 MOVIES released by Ganool</b></br>" >> /var/www/html/movies.html
echo "<b>This list updates every one hour</b></br>" >> /var/www/html/movies.html
echo "<b>Last update: $lastup</b></br><hr>" >> /var/www/html/movies.html
for ganoolurl in 'http://ganool.com/category/movie/' 'http://ganool.com/category/movie/page/2' 'http://ganool.com/category/movie/page/3' 'http://ganool.com/category/movie/page/4' 'http://ganool.com/category/movie/page/5' 'http://ganool.com/category/movie/page/6' 'http://ganool.com/category/movie/page/7' 'http://ganool.com/category/movie/page/8' 'http://ganool.com/category/movie/page/9' 'http://ganool.com/category/movie/page/10'
do
	for movieurl in $(wget -O - $ganoolurl | egrep "Permalink" | egrep -o "a href.+title" | sed -r 's/^.{8}//' | sed -r 's/.{7}$//')
	do
		wget -O - $movieurl > ~/.ganooltemp
		movietitle="$(cat ~/.ganooltemp | egrep "entry-title" | sed -r 's/^.{29}//' | sed -r 's/.{6}$//')"
		echo "<b>"$movietitle"</b></br>" >> /var/www/html/movies.html
		imdblink="$(cat ~/.ganooltemp | egrep -o "Info.+Release" | head -1 | sed -r 's/^.{6}//' | sed -r 's/.{8}$//')"
		echo "IMDb: "'<a href='"$imdblink"'>'"$imdblink"'</a></br>' >> /var/www/html/movies.html
		iduplink="$(cat ~/.ganooltemp | egrep idup | tail -1 | egrep -o "a href.+onclick" | sed -r 's/^.{8}//' | sed -r 's/.{9}$//')"
		if [ "$iduplink" = "" ]; then
			echo "Download From IDUP.IN: Uploading..."'</br>' >> /var/www/html/movies.html
		else
			echo "Download From IDUP.IN: "'<a href='"$iduplink"'>'"$iduplink"'</a></br>' >> /var/www/html/movies.html
		fi
                mylinkgen="$(cat ~/.ganooltemp | egrep mylinkgen | tail -1 | egrep -o "a href.+onclick" | sed -r 's/^.{8}//' | sed -r 's/.{9}$//')"
                if [ "$mylinkgen" = "" ]; then
                        echo "Download From MyLinkGen(MediaFire): Uploading..."'</br></br>' >> /var/www/html/movies.html
                else
                        echo "Download From MyLinkGen(MediaFire): "'<a href='"$mylinkgen"'>'"$mylinkgen"'</a></br></br>' >> /var/www/html/movies.html
                fi
	done
done
rm ~/.ganooltemp

 

این کد خروجیش یک فایل html به اسم movies.html هست که تو مسیر var/www/html قرار میگیره که پوشه مربوط به آپاچی هست تا بشه از طریق مرورگر بهش دسترسی داشت. برای اینکه این فایل رو بتونم روی هاست انتقال بدم یه فایل پی اچ پی تو روت هاست ساختم ساختم و این کدها رو داخلش قرار دادم (فرض میکنم اسم فایل getlist.php باشه):

<?php
file_put_contents("ganool/index.html", file_get_contents("http://server_ip/movies.html"));
?>

 

این دستورات پی اچ پی میان و فایل لیست فیلم‌ها رو از روی سرور میگیرن و روی هاست انتقال میدن. اما برای اینکه این فایل پی اچ پی بعد از هر بار اجرای کد اجرا بشه، این دستور رو آخر کدها اضافه کردم (البته قبلش w3m رو روی سرور نصب کردم):

w3m -dump http://hamedworld.ir/getlist.php

 

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

00 * * * * ganool > /dev/null 2>&1

حالا همه چی به خوبی و خوشی انجام شده و لیست فیلم‌هامون هر یک ساعت به صورت اتومات أپدیت میشه :)

فیلم Citizenfour

Sun, 10/11/2015 - 10:30

hr_Citizenfour_1

 

IMDB

Genre: Documentary

IMDB Rating: 8.1/10

MPR: R

YIFY

Ganool 1080

Ganool 720

 

چیزی که درباره این مستند جالب هست اینه که فیلمی نیست که بر اساس داستان واقعی ساخته شده باشه، بلکه فیلم‌هایی که در زمان واقعی ثبت شدن در کنار هم قرار داده شدن و این مستند رو ساختن. همین باعث میشه که کاملا بتونیم شرایط رو درک کنیم و واقعیات اتفاق افتاده رو ببینیم. شنیدم که کارگردان این مستند قراره یک سری مستند دیگه مشابه همین مستند بسازه و قراره اول هم به سراغ جولین آسانژ بره! من که منتظرم ببینم کی این مستند جذاب آماده میشه!

تولید تمام پسوردهای ممکن nکاراکتری با بش

Sun, 08/30/2015 - 00:05

قبلا اینجایه کد نوشتم که پسورد میگیره و هش میکنه. و برای داشتن پسورد هم از یک سایت تولید پسورد استفاده کردم، اما با خودم گفتم چرا خودم یه چیزی ننویسم که پسورد تولید کنه؟! و در نتیجه…

 

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

 

فرض کنیم که میخوام تمام پسوردهای ممکن ۴ کاراکتری که با حروف الفبای کوچیک و بزرگ انگلیسی و همینطور ارقام ۰ تا ۹ میشه نوشت رو داشته باشم. کدش خیلی سادست

 

for a1 in {{a..z},{A..Z},{0..9}}
do
	for a2 in {{a..z},{A..Z},{0..9}}
	do
		for a3 in {{a..z},{A..Z},{0..9}}
		do
			for a4 in {{a..z},{A..Z},{0..9}}
			do
				echo $a1$a2$a3$a4 >> 4
			done
		done
	done
done

 

حلقه‌هاش که چیزی عجیبی ندارن و مسلما چون میخوام پسوردهام ۴کاراکتری باشن ۴تا حلقه گذاشتم و در انتها هم محتوای ۴تا حلقه در کنار هم در فایلی به اسم ۴ ذخیره میشن. و فایل ۴، ۱۴۷۷۶۳۳۶ خط خواهد داشت که هر کدوم یکی حالا ممکن خواهد بود. خب کد رو تو فایلی به اسم passgen-old.sh ذخیره میکنم و

passgen_old

 

قبل از اجرای کد همونطور که توی عکس مشخص هست از دستور time استفاده کردم تا مدت زمان اجرای کد رو هم داشته باشم! و همونطور که میبینین مدت زمان اجرای این کد ۶ دقیقه و ۵۵ ثانیه هست که عدد بزرگیه. اگه دارین با خودتون میگین ۶-۷ دقیق زمان زیادی نیست به این فکر کنین که اگر پسوردهای ۵کاراکتری رو میخواستیم این زمان حداقل ۶۲ برابر میشد و خیلی وحشتناک میشد! حالا این رو بذارید کنار اینکه الآن اکثرا از پسوردهایی استفاده میکنن که ۸ کاراکتر و یا بیشتر هست. حجم فایلی خروجی هم که اسمش ۴ هستش مشخصه و ۷۱ مگ هست. چون این اسکرین شات رو قبلا گرفتم یادم رفته تعداد خطوط داخل فایل ۴ رو بگیرم، ولی بهم اطمینان کنید، تعداد خطوطش ۱۴۷۷۶۳۳۶ هست &#x1f600; اوه! یه نگاهی هم به وضعیت سی پی یو در طول اجرای برنامه داشته باشیم با این توضیح که سی پی یو من دو هسته داره و با برنامه htop مصرف منابع رو داشتم مانیتور میکردم:

cpu_passgen_old

مشخصه که کد داره فقط از یک هسته سی پی یو استفاده میکنه. پس بریم سراغ کد دوم که خیلی باحالتره  &#x1f61b;

for a1 in {{a..z},{A..Z},{0..9}}
do
	echo "$a1" >> 1 
done
source=1
dest=2
for a in {2..4}
do
        for a1 in {{a..z},{A..Z},{0..9}}
	do
		sed "s/$/$a1/" $source >> $dest &
	done
	wait
	source=$((source+1))
	dest=$((dest+1))
done

 

حلقه اول که مشخصه چیکار میکنه، میاد تمام حروف کوچیک و بزرگ انگلیسی به همرا ارقام ۰ تا ۹ تو یه فایل به اسم ۱ قرار میده. خوشبختانه این دستور زیر یک ثانیه اجراش کار داره پس ما هم دیگه کاریش نداریم. اما بریم سراغ بقیه کد که اصل کار هست و باعث میشه سرعت اجرای کد حسابی بره بالا! ما الآن در واقع لیستی از پسوردهای یک کاراکتری داریم، برای اینکه پسوردهای دو کاراکتری رو بسازیم میایم و در آخر تمام خطوط فایل پسوردهای یک کاراکتریمون کاراکتر a رو قرار میدیم و در فایل دو میریزیم. در مرحله بعد میایم و کاراکتر b رو آخر تمام خطوط فایل پسوردهای یک کاراکتریمون قرار میدیم و در فایل دو میریزیم و الی آخر. همین کار باعث میشه که کلی سرعت کارمون بره بالا. اما چیکار میتونیم بکنیم که کد از تمام توان سی پی یو استفاده بکنه؟قبلش بگم که دو متغییر source و dest مسئول این هستند که کنترل کنند پسوردها از چه فایلی باید خونده بشن و بعد اضافه شدن کاراکتر جدید بهشون داخل چه فایلی قرار بگیرن. خطی هم که اولش با sed شروع شده مسئول اضافه کردن کاراکترا هست. اگر دقت کنین میبینین که در آخر خطش یک علامت & قرار داره و این کاراکتر میگه وای نستا تا کد قبل من به اتمام برسه و بری سراغ ادامه کد، میگه همینجوری که داری اینو اجرا میکنی برو سراغ بقیه کد و بقیه کد هم که یعنی برو ادامه کار حلقه رو انجام بده. و چون قراره که حلقه ۶۲ بار اجرا بشه و عملیات های این ۶۲ حلقه به صورت موازی انجام بشن پس نتیجه این میشه که کد ما از سی پی یویی با ۶۲ هسته پشتیبانی میتونه بکنه و حداکثر سرعت ممکن رو میتونه بگیره. و نکته‌ای که فراموشش کردم درباره خط for a in {2..4} هست. چون ما پسوردهای ۲ تا ۴ کاراکتری رو باید بسازی این حلق رو گذاشتم. اون ۲ که همیشه ثابت هست ولی ۴ رو میشه کم یا زیاد کرد. مثلا میشه بجای ۴ عدد ۱۰ رو گذاشت تا تمام پسوردهای ممکن ۱ کاراکتری تا ۱۰ کاراکتری رو داشته باشیم.

 

یه نگاهی هم داشته باشیم به دستو wait.تو حلقه‌ای که داریم بعد از آخرین باری که حلقه اجرا میشه میرسه به & و این یعنی کار رو ادامه بده در حالی که نباید ادامه بده! چون هنوز کلی حلقه در حال اجرا داریم! اینجاست که دستور wait کد رو نگه میداره تا تمام حلقه‌های قبلش اجراشون به پایان برسه و بعد بره سراغ ادامه کار. اما ببینیم نتیجه اجرای این کد روی سیستم من چی میشه! فعلا حس اسکرین شات گرفتن ندارم پس به نوشته‌هام اعتماد کنید… نتیجه کار میشه چهارتا فایل با اسم‌های 1 و 2 و 3 و 4 که داخلشنون پسوردهایی که میشه ساخت و ۱ یا ۲ یا ۳ یا ۴ کاراکتر داشته باشن قرار داره. قسمت جالب قضیه هم اینه که اجرای کد تنها ۵ثانیه زمان برد! حالا خودتون ۷دقیقه رو با ۵ ثانیه مقایسه کنید و اینکه کد از هر دو هسته سی پی یوم استفاده کرد و لود جفتشون رو برد روی ۱۰۰درصد و اگر تعداد هسته‌های سی پی یوم بیشتر میبود حتما کد سریع‌تر اجرا میشد.

 

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

 

wget http://netix.dl.sourceforge.net/project/crunch-wordlist/crunch-wordlist/crunch-3.6.tgz
tar -xvf crunch-3.6.tgz 
cd crunch-3.6
make

 

 

بعد از نصبش هم اینجوری اجراش کردم:

time ./crunch 1 4 -f "/home/hamed/Desktop/crunch-3.6/charset.lst" mixalpha-numeric -o "/home/hamed/Desktop/crunch-3.6/pass.txt"

 

 

اجرای برنامه ۱۳ ثانیه طول کشید که تقریبا دوبرابر کد من هست و برنامه نتونست از تمام توان سی پی یو استفاده کنه. پس همینجا با افتخار اعلام میکنم که کد من از نظر زمانی بهینه تر هست :) و حالا که از نظر زمانی بهینه تر هست پس بیایم کد رو کامل‌تر کنیم تا تمام کاراکترهایی که crunch باهاشون قادر به تولید پسورد هست رو کد ما هم بتونه باهاشون پسورد درست کنه. crunch با این کاراکترها (بعلاوه فاصله) میتونه پسورد درست کنه

0123456789
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
!@#$%^&*()-_+=~`[]{}|\:;”‘<>,.?/

پس کد رو تغییر میدم تا با تمام این کاراکترها بتونه پسورد درست کنه.

IFS=$'\n'
for a1 in {{a..z},{A..Z},{0..9},' ','!','@','#','$','%','^','*','(',')','-','_','+','=','~','`','[',']','{','}','|',':',';','"',"'",'<','>',',','.','?','&','/','\'}
do
	echo "$a1" >> 1 
done
source=1
dest=2
for a in {2..4}
do
        for a1 in {{a..z},{A..Z},{0..9},' ','!','@','#','$','%','^','*','(',')','-','_','+','=','~','`','[',']','{','}','|',':',';','"',"'",'<','>',',','.','?'}
	do
		sed "s/$/$a1/" $source >> $dest &
	done
	awk '{print $0"&"}' $source >> $dest &
	awk '{print $0"/"}' $source >> $dest &
	awk '{print $0"\\"}' $source >> $dest
	source=$((source+1))
	dest=$((dest+1))
done

 

یه چندتا توضیح کوچیک هم درباره این کد بدم. IFS رو تغییر دادم تا کد بتونه فاصله رو هم به عنوان یک کاراکتر بشناسه و در ساخت پسورد ازش استفاده کنه. اگه خواستین کاراکتر دیگه‌ای رو هم جهت ساخت پسورد اضافه کنین (من خودم چندتا حرف فارسی رو تست کردم و جواب داد) میتونین توی هر دوتا حلقه کاراکتر مورد نظرتون رو در حالی که بین ‘ ‘ قرار داره قرارش بدین. درباره دستور awk هم که استفاده کردم بگم که sed با سه تا کاراکتر / و \ و & مشکل داشت، به همین خاطر مجبور شدم به صورت جدا گانه این سه تا کاراکتر رو با awk اضافه کنم. و چون \ یک کاراکتر با مفهوم خاص هست مجبور شدم در awk سوم دوتا \ کنار هم بذارم تا بفهمه که فقط باید یک \ در آخر خطوط اضافه کنه.

 

توضیحات کد تا اینجا تموم شدست، ولی چون سیستم من اصلا برای اجرای این کد جالب نیست تصمیم گرفتم یه سرور مجازی توپ بگیرم تا کد رو روش اجرا کنم. سروری که گرفتم این مشخصات رو داره:

24 CPU
65536MB MEMORY
700 GB STORAGE (SSD)

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

passgen_in_action

 

همونجور که مشخصه اسکریپت ۴۸ دقیقه زمان برد و فایل پسوردهای ۶کاراکتری‌مون ۳۷۱ گیگ شد! آخر کار هم برای دونستن خودم سرعت هارد سرور رو اندازه گرفتم. یه نگاهی هم به وضعیت سی پی یو بندازیم:

 

passgen_vps_cpu

 

 

هسته‌های سی پی یو که وضعیتشون مشخصه، رم هم در آخر کار یکم رفت بالا و به حدودای ۲/۲گیگ رسید. اگر هم دقت کنید میبینین که تو ستون command کاملا مشخصه که دستورات دارن همزمان انجام میشن و اینکه چه دستوری در حال اجراست.

 

 

وای خدا چقدر زیاد نوشتم… :)))

عکس – ۶ روز سیستم ادمین ها

Fri, 07/31/2015 - 15:11

خب با توجه به شنیده ها امروز روز سیستم ادمین‌ها یا مدیران سیستم هست! منم از فرط بیکاری تو گوگل زدم sys admins meme تا یکم بخندم و این عکس به نظر جالب بود، گفتم شما هم ببینیدش :)

 

When-Bruce-Willis-is-a-Sysadmin_o_40032

اسکریپت انتقال فایل/فولدر بین هاست و سرور

Wed, 07/29/2015 - 22:38

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

 

چند نکته درباره برنامه:

– دوستانی که نگران امنیت برنامه هستند، من یک کد در اختیارتون قرار میدم و توضیحات لازم برای اجرای کد رو هم بهتون میدم تا از امنیت برنامه اطمینان کسب کنید.
– فایل‌های مبدا باید از طریق http/ftp قابل دانلود باشن
– مقصد حتما باید یک سرور لینوکسی باشه و دسترسی روت بهش داشته باشید چون نیاز به نصب چند برنامه برای کار کردن این کد هست
– در مبدا هم نیاز به یک اکانت ftp که روی پوشه‌ای که قصد انتقال اطلاعات داخلش رو داریم نیاز هست
– در حالات خیلی خاص که در عمل کمتر از یک درصد احتمال وجود داشتنش هست اسکریپت بعضی از فایل‌ها با اسم خاص رو نمیتونه انتقال بده، برای مثل فایلی که اسمش با … تموم شده باشه که البته همونطور که گفتم در عمل همچین فایلی نخواهید داشت، ولی اگر داشتید کد در انتها در یک فایل لیست لینک‌هایی که موفق به دانلودشون نشده رو بهتون میده تا به صورت دستی فایل‌ها رو انتقال بدید.

 

علی‌رغم اصرار دوستانم، کد رو به صورت خام و بدون محدودیت در اختیارتون قرار میدم و به شعور خریدارن این کد احترام میذارم و امیدوارم این کد رو که روش زحمت کشیده شده پخش نکنند.

 

برای خرید این کد، به این صفحه مراجعه کنید.

یه سایت پر از گیف های مخصوص برنامه نویس ها

Sat, 07/25/2015 - 14:47

نمیدونم تا حالا عکس‌های متحرکی که زیرشون یه توضیح نوشته که تو شرایط خاص حس همون عکس متحرک بهتون دست میده رو دیدین یا نه! سایت The Coding Love پر از گیف‌هایی هست که لحظات مختلف زندگی برنامه نویس‌ها رو به صورت طنز نمایش میده. البته مراقب مصرف اینترنتتون هم حتما باشین  &#x1f600;  یک نمونه از گیف‌هایی که تو این سایت دیدم و حسابی من رو خندوند رو براتون میذارم تا دقیق‌تر بدونین با چی طرف هستین!

 

وقتی که یه تازه کار یهویی میگه که زبون برنامه نویسی مورد علاقش css هستrAFv3CN

 

دانلود فیلم به شکل گیکی، دانلود خودکار فیلم از YIFY روی کامپیوتر

Sun, 06/28/2015 - 17:01

فکر کنم همینکه یه بخش برای معرفی فیلم دارم نشون بده که اهل فیلم دیدنم و سایت مورد علاقم هم برای دانلود yts.to هست که رلیزهای YIFY توش برای دانلود قرار داره. گاهی که منتظر اومدن یک فیلم هستم خیلی واسم اعصاب خورد کنه که هی هر روز چک کنم ببینم اون فیلم برای دانلود اومده یا نه بعد اگه اومده بود تورنتش رو مستقیم کنم و لینک دانلودش رو از رو سرور خودم بردارم و بذارم تو لیست دانلودهام. برای همین گفتم بیام این فرایند رو خودکار کنم! اما قبل شروع کار بگم که اگه شما هم میخواین دقیقا عین کار من رو انجام بدین لازمه تا اول Deluge رو روی سرورتون نصب کنین و مثل من هم دانلوداتون رو انجام بدین. خب بریم وارد جزئیات کار بشیم!

اول از همه ببینیم دقیقا قراره چیکار کنیم! کدی که میخوایم بنویسیم اول باید بره ببینه اون فیلم مورد نظر برای دانلود اومده یا نه، بعد اگه اومده بود ببینه نسخه مورد نظرمون که برای من ۷۲۰ هست هم رلیز شده یا نه. بعد اگه نسخه مورد نظر هم اومده بود لینک دانلودش رو بده به Deluge تا دانلودش کنه و وقتی دانلودش کامل شد لینک دانلود فیلم بیاد تو لیست دانلودهام! قبل از اینکه بریم سراغ کدهای مورد نیاز این رو بگم که مسلما این روش که من دارم میرم بهترین روش نیست و این کد هم بهینه‌ترین کد ممکن نیست، ولی مهم اینه که در حال حاظر کاری رو که من میخوام بدون هیچ مشکلی انجام میده :))

برای شروع کار یه فایل میسازم که توش قراره لینک دانلود فیلم مورد نظرمون قرار بگیره و البته باید تو مسیری باشه که از مرورگر هم بشه بهش دسترسی داشت. و البته باید سطح دسترسیش رو ۷۷۷ هم بذاریم. حالا اینکه چرا این فایل رو الآن ساختیم و سطح دسترسیش رو کردیم ۷۷۷ رو بعدا بهش میرسیم.

touch /var/www/html/address.txt
chmod 777 /var/www/html/address.txt

 

خب، بریم سراغ اصل کد! لازمه ببینیم که فیلممون برای دانلود اومده یا نه! برای این کار محتویات صفحه اول yts.to رو توی یک فایل میریزیم و داخل اون فایل دنبال اسم فیلممون میگردیم. نیازی نیست که حتما دنبال اسم کامل فیلم بگردیم. برای نوشتن کد فرض رو بر این میذارم که مثل من منتظر فیلم Furious 7 هستین و بر همین اساس میریم جلو. خب اینم کدی که اسم فیلم رو پیدا میکنه:

w3m -dump yts.to > yts
a="$(grep "Furious" yts)"

 

با این کد اگه اسم فیلممون تو سایت باشه یه عبارتی حالا هرچی توی متغییر a ذخیره میشه و خالی نبودن متغییر a فیلم اومده برای دانلود و باید دنبال لینک دانلودش بگیردیم. برای این کار اول از یه شرط استفاده میکنیم تا متغییر a رو چک کنه:

if [ "$a" != "" ]
then

fi

 

از اینجا به بعد کد داخل این شرط قرار میگیره. امیدوارم بتونم بقیه کار رو خوب بتونم توضیح بدم! حالا که فیلم اومده باید ببینیم که نسخه ۷۲۰ هم اومده یا نه. اول بیاین یه نگاهی به سورس سایت yts.to بندازیم برای یک فیلم:

class="browse-movie-title">Cinderella</a> <div class="browse-movie-year">2015</div>  <div class="browse-movie-tags">   <a href="https://yts.to/torrent/download/6EB6804A6A4650FD64C9FC3257C2B2ECB7808F50.torrent">720p</a>    <a href="https://yts.to/torrent/download/93E545F95354D90539C51BC3A59AC685B613C75C.torrent">1080p</a>   </div>  </div> </div>

خب تو سورس قسمتی که مربوط به دانلود فیلم هست در ابتداش اسم فیلم به همراه یک < قبلش قرار داره و در انتها هم سه تا div قرار دارن. پس اول سورس صفحه رو توی یک فایل ذخیره میکنیم:

wget -O - yts.to > yts

 

و تو سورس صفحه هم با دستور egrep دنبال قسمت مربوط به فیلممون میگردیم. آپشن o هم که بکار بردم دلیلش این هست که فقط اون قسمتی که کد فیلم توش هست رو برگردونه نه کل محتویات فایل رو و کد مربوط به بخش دانلود فیلم رو توی متغییر temp‌ میریزیم:

temp="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts)"

درباره قسمت (>Furious).{10,400}(</div>  </div> </div>) هم بگم که یه ساختار regex هست (اسمش رو گوگل کنید تا بتونید هم اطلاعات بیشتری ازش کسب کنید هم یاد بگیرید چجوریه، خودمم با گوگل یاد گرفتمش) که میگه عبارت >Furious رو پیدا کن و بعد ۱۰ تا ۴۰۰ کاراکتر برو جلو تا به عبارت برسی. خب حالا باید ببینیم عبارت 720 توی متغییر temp‌ هست یا نه و اگه بود یعنی نسخه ۷۲۰ برای دانلود آمادست. پس توی متغییر temp رو میگردم:

temp="$(echo $temp | grep 720)"

 

حالا اگه نسخه ۷۲۰ اومده باشه یه چیزی توی متغییر temp‌ ذخیره میشه. پس یه شرط میذاریم تا متغییر temp رو چک کنه و ادامه کدمون رو توی اون شرط میذاریم:

if [ "$temp" != "" ]
then

fi

 

حالا تا اینجای کار میدونیم که فیلممون نسخه ۷۲۰ش برای دانلود اومده و باید از تو سرورس صفحه که توی فایل yts ذخیره شده لینک رو برداریم. برای برداشتن لینک مجددا سراغ egrep و ساختار regex‌میریم و البته قبلش هم با استفاده از mutt یه ایمیل میفرستم که بدونم فیلم روی yts اومده:

mutt -s "Furious 7" address@domain.com <<< "Ready To Download On YTS!"
tlink="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts | egrep -o "(http).{77}(720)" | egrep -o "(http).{1,100}(torrent)" | tail -1)"

درباره ساختار کد پیدا کردن لینک واقعا نمیدونم چجوری توضیح بدم فقط میتونم بگم خودتون مرحله به مرحله اجراش کنین سر در میارین چی به چیه و اون tail -1 آخر هم برای اینه که تو شرایطی خاص ممکنه لینک دانلود ۲ یا ۳ بار برگردونده بشه که با این دستور میکنیمش یکی و در نهایت هم لینک رو توی متغییر tlink داریم. حالا باید لینک رو بدیم به deluge. برای این کار از deluge-console استفاده میکنیم. اول روی سرور نصبش میکنیم که خوشبختانه تو مخازن موجود هست و با نوشتن deluge-console اجراش میکنیم و اخطار زیبای Failed to connect to 127.0.0.1:58846 with reason: Username does not exist مواجه میشیم. با نوشتن exit از برنامه deluge-console خارج میشیم و این دستور رو میزنیم:

cp /var/lib/deluge/.config/deluge/auth ~/.config/deluge/auth

 

حالا مجددا وارد deluge-console میشیم و میبینیم که هیچ پیغام خطایی نمیده. با نوشتن عبارت help هم میتونیم آپشن‌هایی که برای استفاده داره رو ببینیم.

deluge-console

 

کارمون فعلا با سرور تموم شد و میریم سراغ ادامه کدمون.  برای اضافه کردن فایل تورنت به deluge هم از این دستور استفاده میکنیم:

deluge-console add $tlink

لینک به deluge اضافه شده و باید صبر کنیم دانلود بشه. اول یک ساعت صبر میکنیم و اگه فایل دانلود نشده بود دوباره هر ۵دقیقه وضعیتش رو چک میکنیم:

sleep 3600
complete="$(deluge-console info Furious | wc -l)"
while [ "$complete" = "9" ]
do
	sleep 300
	complete="$(deluge-console info Furious | wc -l)"
done

با دستور info‌ میتونیم اطلاعات یک تورنت رو بگیریم و اگه تورنت کامل دانلود نشده باشه خروجیش میشه ۹ خط که تعداد خطوط خروجی رو هم با wc -l میشمریم و تا زمانی که دانلود تورنت کامل نشده باشه کد رو این قسمت گیر میکنه.‌حالا که دانلودش روی سرور کامل شده دوباره به خودم یه ایمیل میرفستم که بدونم دانلودش تموم شده:

mutt -s "Furious 7" address@domain.com <<< "Ready To Download On Your Computer!"

حالا باید برم سراغ تولید لینک دانلود فایل. من تورنت‌هام تو مسیر var/www/html/torrents دانلود میشن پس از این دستور برای ساخت لینک دانلود فایل و ذخیرش در متغییر address استفاده میکنم:

address="http://server_ip/torrents/""$(cd /var/www/html/torrents && ls | grep Furious)""/""$(cd /var/www/html/torrents/Furious* && ls | grep mp4)"

اینم توضیح خاصی نداره &#x1f600; حالا لینک دانلود رو تو فایل address.txt که اول کار ساختیم میریزیم:

echo $address > /var/www/html/address.txt

خب باید به سیستم هم بفهمونیم که بره از این فایل لینک دانلود رو برداره. برای این کار این دستور رو توی کرون تب یک دقیقه قبل از شروع دانلود شبانه میزنیم:

w3m -dump http://server_ip/address.txt >> /home/hamed/dllinks

دلیل این هم که فایل address.txt رو اول کار رو سرور درست کردم این بود که اگه این فایل وجود نداشته باشه و سیستم سعی کنه محتویاتش رو بگیره ارور ۴۰۴ دریافت میکنه و نوشته‌های ارور ۴۰۴ تو لیست دانلودم قرار میگیره و این اصلا جالب نیست ولی اگه این فایل وجود داشته باشه و داخلش خالی باشه همون هیچی تو لیست دانلودهام قرار میگیره و هیچ مشکلی ایجاد نمیشه! اما یه مشکل دیگه هم هست! اومدیم و این فایل داخلش لینک دانلود فیلممون قرار گرفت و ما هم این فیلم رو دانلود کردیم، شب‌های بعد هم سیستم میره دوباره از اینجا لینک دانلود فیلم رو برمیداره و میذاره تو لیستمون! برای اینکه این کار انجام نشه میام و از تابع shell_exec‌ تو php استفاده میکنم که باهاش میشه دستورات خط فرمان رو اجرا کرد. دلیل تغییر سطح دسترسی فایل address.txt به ۷۷۷ هم این بود که بتونیم راحت از طریق فایل php تغییرش بدیم. خب فایل php مورد نیاز رو ایجاد میکنیم:

nano /var/www/html/rmadr.php

و داخلش این کد رو قرار میدم:

<?php
shell_exec('echo "" > address.txt');
?>

حالا هر دفعه که این فایل رو اجرا کنیم متویات فایل حاوی لینک خالی میشه. روی سیستم خودم هم این آدرس رو درست بعد از اینکه محتویات فایل address.txt رو دریافت کردم اجرا میکنم تا فایل آدرس خالی بشه و نتیجه این دستور میشه که یک دقیقه قبل از شروع دانلود شبانه اجرا میشه:

w3m -dump http://server_ip/address.txt >> /home/hamed/dllinks && w3m -dump http://server_ip/rmadr.php

اوه! تقریبا یادم رفت کد کاملی که قراره روی سرور اجرا بشه رو بذارم. کدنهایی که روی سرور باید اجرا بشه این هست:

w3m -dump yts.to > yts
a="$(grep "Furious" yts)"
if [ "$a" != "" ]
then
	wget -O - yts.to > yts
	temp="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts)"
	temp="$(echo $temp | grep 720)"
	if [ "$temp" != "" ]
	then
		mutt -s "Furious 7" address@domain.com <<< "Ready To Download On YTS!"
		tlink="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts | egrep -o "(http).{77}(720)" | egrep -o "(http).{1,100}(torrent)" | tail -1)"
		deluge-console add $tlink
		sleep 3600
		complete="$(deluge-console info Furious | wc -l)"
		while [ "$complete" = "9" ]
		do
			sleep 300
			complete="$(deluge-console info Furious | wc -l)"
		done
		mutt -s "Furious 7" address@domain.com <<< "Ready To Download On Your Computer!"
		address="http://server_ip/torrents/""$(cd /var/www/html/torrents && ls | grep Furious)""/""$(cd /var/www/html/torrents/Furious* && ls | grep mp4)"
		echo $address > /var/www/html/address.txt
	fi
fi

این کد نهایی هست که باید هر چند دقیقه اجرا بشه و چک کنه که فیلم برای دانلود اومده. که میشه این کار رو با crontab‌کرد که هر چند دقیقه یکبار اجرا بشه. البته باید یکم تغییرات ایجاد کنین که وقتی یکبار کد اجرا شد و لینک دانلود نسخه۷۲۰ رو داد به deluge‌کد دیگه اجرا نشه. نمیدونم چرا ولی من نتونستم از طریق crontab این کد رو اجرا کنم. برای همین کل کد رو داخل یک حلقه while قرار دادم که تا زمانیکه نسخه ۷۲۰ رو پیدا میکنه و به deluge‌ میدش در حال اجرا باشه!

work=0
while [ "$work" = 0 ]
do
	sleep 900
	w3m -dump yts.to > yts
	a="$(grep "Furious" yts)"
	if [ "$a" != "" ]
	then
		wget -O - yts.to > yts
		temp="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts)"
		temp="$(echo $temp | grep 720)"
		if [ "$temp" != "" ]
		then
			work=1
			mutt -s "Furious 7" address@domain.com <<< "Ready To Download On YTS!"
			tlink="$(egrep -o "(>Furious).{10,400}(</div>  </div> </div>)" yts | egrep -o "(http).{77}(720)" | egrep -o "(http).{1,100}(torrent)" | tail -1)"
			deluge-console add $tlink
			sleep 3600
			complete="$(deluge-console info Furious | wc -l)"
			while [ "$complete" = "9" ]
			do
				sleep 300
				complete="$(deluge-console info Furious | wc -l)"
			done
			mutt -s "Furious 7" address@domain.com <<< "Ready To Download On Your Computer!"
			address="http://server_ip/torrents/""$(cd /var/www/html/torrents && ls | grep Furious)""/""$(cd /var/www/html/torrents/Furious* && ls | grep mp4)"
			echo $address > /var/www/html/address.txt
		fi
	fi
done

برای این هم که کد حتی بعد از قطع اتصال ssh درحال اجرا بمونه اول برنامه screen رو از تو مخازن نصب کردم. بعد از اون با نوشتن screen وارد برنامه شدم و برای رد کردنم توضیحات هم space رو زدم و داخل برنامه screen کد رو اجرا کردم. حالا برنامه همیشه درحال اجرا میمونه روی سرور و هر ۱۵ دقیقه یکبار سایت yts.to رو چک میکنه تا اگه فیلم اومد کارای مورد نیاز رو انجام بده.

فیلم Ex Machina

Thu, 05/28/2015 - 18:18

ex_machina

 

 

IMDB

Genre: Drama | Sci-Fic

IMDB Rating: 7.9/10

MPR: R

YIFY

Ganool 1080

Ganool 720

 

داستان از این قراره که یه برنامه نویس انتخاب میشه تا تستی مشابه تست تورینگ رو روی یک روبات که هوش مصنوعیه فوق‌العاده قوی‌ای دار انجام بده. و خب مسئله اینه که این هوش مصنوعی خیلی قدرتمنده و … فیلم ارزش یکبار دیدن رو برای گیک‌ها داره و اندکی ذهن رو درگیر مسائل مربوط به هوش مصنوعی میکنه.

افزایش بازدید وب سایت با آی پی واقعی از شبکه تور

Fri, 05/15/2015 - 15:46

اگه صاحب وبلاگ یا وب سایت هستید حتما میدونید که یکی از عواملی که رو رنک گوگل تاثیر گذار هست تعداد بازدیدها هست. راه هم برای افزایش بازدید زیاده که معمولا هم هزینه ی زیادی دارن. اما میخوام یه ترفند ساده بهتون معرقی کنم که باهاش به راحتی و با استفاده از شبکه تور میتونید کلی بازدید بدست بیارید. تنها پیش نیاز این کار یه سرور لینوکسی هست یا کامپیوتر خودتون که اینترنت درست و حسابی داشته باشه و روش یه توزیع لینوکسی نصب باشه. البته وبلاگ یا وب سایتتون هم نباید از سرویسی مثل Cloud Flare استفاده کنه که آی پی های تور رو بلاک میکنن. اگه پیش نیازها رو دارین و کلی بازدید میخواین در ادامه کار با من همراه باشید!!!

 

برای شروع کار به برنامه Tor و Screen  و w3m نیاز داریم. تور که مشخصه برای چی هست و برنامه اسکرین هم برای این هست که بتونیم کدی که میخوایم باهاش بازدید بگیریم رو بتونیم بدون مشکل در پس ضمینه اجرا کنیم و w3m هم که یک مرورگر تحت ترمینال هست و وظیفش انجام بازدید هست. چون سروری که من باهاش کار میکنم اوبونتو هست برای نصب این سه تا برنامه از این کد استفاده میکنم:

sudo apt-get install tor w3m screen -y

 

حالا که پیش نیازها رو داریم میریم سراغ کد اصلی. این کد رو توی یک فایل با پسوند sh ذخیره میکنیم و بجای آدرس وبلاگ من هم آدرس مورد نظر خودتون رو وارد کنین.

service tor start
while true
do
	sleep 60
	torify w3m -dump http://hamedworld.ir
	service tor restart
done

 

و با دستور

chmod +x file.sh

 

به فایلمون قابلیت اجرا شدن میدیم و با دستور

screen ./file.sh

 

کد رو اجرا میکنیم و شاهد بالا رفتن بازدید خواهیم بود :) برای اینکه کد حتی در زمان وصل نبودن به ssh کار کنه از دستور screen استفاده کردیم و اگه از screen استفاده نمیکردم بعد از قطع اتصال ssh برنامه هم متوقف میشد. و برای خروج از پنجره screen‌ هم باید اول Ctrl + A و بعد D رو بزنید. حالا از پنجره screen خارج شدید ولی برنامه در پشت صحنه در حال اجراست &#x1f600; حالا ببینیم این کد هر خطش چیکار میکنه!

 

service tor start: تور رو واسمون اجرا میکنه.

 

while true: یه حلقه نامحدود هست که تمام دستورات بین do و done رو بی‌نهایت بار اجرا میکنه.

 

sleep 60: با این دستور یه توقف ۶۰ ثانیه‌ای ایجاد میکنم تا بین بازدیدها فاصله باشه و اینکه گاهی بدلیل کیفیت پایین اینترنت ممکنه مدتی طول بکشه تا تور کامل راه بیفته و با این دستور زمان لازم رو بهش میدیم.

 

torify w3m -dump http://hamedworld.ir: خب عبارت torify میگه اگه دستورات جلوش نیاز به استفاده از اینترنت داشتن از شبکه تور استفاده کنن و این طوری با آی پی های واقعی و مختلف بازدید انجام میگیره. درباره دستور w3m -dump باید بگم من برای دریافت محتوای یک سایت توی ترمینال یا به عبارتی انجام بازدید یه سرچ زدم و به این صفحه رسیدم. بین روش‌هایی که توضیح داده بود و من تستشون کردم به نظر من بهترینشون استفاده از w3m برای انجام بازدید هست.

 

service tor restart: تور رو ری‌استارت میکنه تا با یک آی پی جدید بازدید دوباره صورت بگیره.

آموزش دانلود صدای مترجم گوگل

Tue, 04/28/2015 - 19:57

مترجم گوگل که نیاز به معرفی نداره؟!؟! و حتما هم میدونین متون انگلیسی (بقیه زبون ها رو نمیدونم!) رو وقتی بهش میدیم میتونه این متن ها رو برامون بخونه. خب من برای کاری نیاز داشتم تا صدای خروجی مترجم گوگل که متن رو داره میخونه ضبط کنم. اولین راهی که ممکنه به ذهن بیاد استفاده از برنامه‌هایی هستن که صدای خروجی کامپیوتر رو ضبط میکنن ولی احتیاج به یه برنامه اضافی و اینکه ممکنه فایل ضبط شده نیاز به ادیت داشته باشه منو از این راه منصرف کرد. پس یکمی سرچ انجام دادم و به این لینک رسیدم:

http://translate.google.com/translate_tts?tl=en&q=”I can say whatever you want me to say”

اگه رو لینک کلیک کنین کاملا قضیه رو متوجه میشین :) با تغییر متن I can say whatever you want me to say با متن مورد نظر خودتون هم میتونین صدایی رو که دوست دارین بشنوین. برای ذخیره کردن صدا هم کافیه روی صفحه راست کلیک کنید و گزینه Save As رو بزنید.

نجات سرور با استفاده از حالت Rescue Mode

Sun, 04/19/2015 - 16:51

جالب بود برای این مورد سرچ زدم ولی چیزی حداقل به فارسی پیدا نکردم! پس هم مینویسمش که برای خودم داشته باشمش و هم برای کسانی که به دنبال این مطلب هستن… حالت Rescue Mode در مواقعی استفاده میشه که وی پی استون به هر دلیلی به مشکلی بربخوره و نتونین از طریق ssh بهش متصل بشین. در این حالت با استفاده از Rescue Mode یه توزیع لینوکس میاد و کنار سیستم عامل اصلی وی پی اس اجرا میشه و بهمون اجازه میده دوباره به وی پی اس دسترسی داشته باشیم. البته باید امکان استفاده از Rescue Mode رو هم داشته باشید. پس اگه پنل مشابه پنل زیر برای وی پی استون دارید در ادامه مطلب با ما باشید تا ببینیم چجوری میشه سرور رو نجات داد!

virtualizor_panel

 

روی گزینه Rescue Mode میزنیم و پنجره‌ای مشابه پنجره زیر باز میشه.

virtualizor_enabe_rescue_mode

 

 

توی این پنجره پسورد مورد نظرمون رو برای سیستم عاملی که قراره باهاش وی پی اسمون رو نجات بدیم انتخاب میکنیم و روی Enable Rescue Mode میزنیم. بعد از اینکه پیغام فعال شدن Rescue Mode  رو گرفتیم با یوزر root و پسوردی که دادیم به سرور متصل میشیم.

connected_to_rescue_mode

 

 

حالا به سرورمون دسترسی داریم. منتها مسئله‌ای که پیش میاد اینه که ما یه سیستم عامل دیگه رو کنار سیستم عامل اصلی سرور نصب کردیم. از کجا باید به اطلاعات سرور دسترسی داشته باشیم؟ برای این کار اول دستور fdisk -l رو میزنیم.

fdisk_list

 

 

حالا اگه به خروجی دقت کنیم میبینیم که دوتا هارد رو برامون لیست کرده. یکی به آدرس /dev/vda با حجم ۱۰۷۳ مگ که مال همون سیستم عاملی هست که برای نجات سرور ازش استفاده کردیم و هارد دیگه با آدرس /dev/vdb که هارد اصلی سرور هست و روش اطلاعات سرور قرار داره. اما این فقط آدرس هارد هست و ما به آدرس پارتیشنی که اطلاعات روش هست نیاز داریم. از پایین خط سوم میبینیم که نوشته شده Device Boot و پارتیشن اصلی هارد اصلی سرورمون هست و همونطور که مشخصه آدرسش /dev/vdb1 هست. پس باید این پارتیشن رو روی یک فولدر مونت کنیم برای اینکار یک فولدر با دستور mkdir درست میکنیم و با دستور mount پارتیشن اصلی رو روی فولدر مونت میکنیم.

mounted_partition

 

 

حالا فولدری که ساختیم که توی این مثال main_hard هست حاوی اطلاعات سرور هست و میتونیم به اطلاعات سرور دسترسی داشته باشیم و مشکلات سرور رو برطرف کنیم. یه نکته رو هم تذکر بدم که موقع استفاده از دستور mount باید نوع پارتیشنی که میخوایم مونت کنیم رو هم مشخص کنیم که معمولا همون ext4 هست و اگه نسخه لینوکس سرور خیلی قدیمی باشه نوع پارتیشن میشه ext3. بعد از اینکه کارتون با سرور تموم شد و مشکلاتش رو حل کردین با رفتن به بخش Rescue Mode تو پنل سرور حالت نجات رو غیر فعال کنید تا به سیستم عامل اصلی سرور دسترسی داشته باشید :)

عکس – ۵

Fri, 04/10/2015 - 23:08

1622239_914170288616849_971619164039035660_n

ترکوندن رم و سی پی یو با یه بش اسکریپت

Thu, 04/02/2015 - 00:58

کلا از وقتی با بش اسکریپت آشنا شدم به طور کل دارم یه جور دیگه با کامپیوتر کار میکنم &#x1f600; یه بش ساده نوشتم که هیچ کار انجام نمیده جز اینکه رم و سی پی یو رو تا ته پر میکنه و خودم که بعد از اجرای این بش مجبور شدم سخت افزاری سیستمم رو ری‌استارت کنم. برای نوشتن این بش اومدم به تعداد هسته‌های سی پی یو حلقه بینهایت درست کردم (البته میشه بیشتر هم حلقه درست کرد ولی حداقل تعداد حلقه‌ها باید به تعداد هسته‌های سی پی یو باشه) و اسکریپت رو به شکلی تنظیم کردم که حلقه‌ها رو به صورت موازی اجرا کنه و به این شکل هرکدوم از حلقه‌ها روی یکی از هسته‌های سی پی یو انجام میشه و لود اون هسته رو به صد درصد میرسونه. اما برای رم کاری که کردم این بود که یه متغییر تعریف کردم و گفتم که تو هر بار اجرا شدن این حلقه‌ها اون متغییر رو چندبار دوباره تو خودش بریزه. کد نهایی هم برای سیستم من که سی پی یوم دو هسته داره این شد:

z=q
while true; do
	z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z
done &
while true; do
	z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z
done

 

که این کد رو تو یه فایل با پسوند sh ذخیره کردم و با دستور

chmod +x file.sh

 

بهش قابلیت اجرایی دادم و با دستور

./file.sh

 

اجراش کردم و شاهد لود صد درصدی سی پی یو و رم بودم &#x1f600; کد هم کلیاتش نکته خاصی نداره. اما در مورد خط

z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z

 

باید بگم که این خط وظیفه پر کردن رم رو داره. چون در ابتدای کد تو متغییر z فقط کاراکتر q رو قرار دادیم ولی به محض اینکه به حلقه میرسه ۲۲تا کاراکتر q توی متغییر z ذخیره میشن و تو بار دوم اجرا شدن حلقه ۴۸۴تا کاراکتر q توی متغییر z ذخیره و میشن و الی آخر. حالا این رو هم درنظر بگیرین که دوتا حلقه به صورت همزمان و چندصد بار در ثانیه دارن اجرا میشن! با این کار رم به سرعت پر میشه :) تو آخر خط ۴ هم یک کاراکتر & قرار داره که باعث میشه دوتا حلقه به صورت موازی اجرا بشن و اگه اون کاراکتر & رو نذاریم فقط یک هسته سی پی یو لودش میره رو صد. اگه میخواین این کد رو رو روی سیستمی مثلا با سه هسته پردازش اجرا کنین (البته با مسئولیت خودتون!) باید خط‌های دو و سه و چهار رو کپی کنید و آخر خط چهار پیست کنید تا سه‌تا حلقه به صورت موازی اجرا بشن و هر سه هسته لودشون بره رو صد.

z=q
while true; do
	z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z
done &
while true; do
	z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z
done &
while true; do
	z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z
done

 

آپدیت:

برای اینکه مجبور نشین تو یه فایل جداگانه دستورات رو قرار بدین، میتونین دستورات رو توی یک خط بنویسین و مستقیم تو ترمینال وارد کنید تا سیستم بترکه. برای مثال رو سیستم من دستور به این شکل میشه:

z=q && while true; do z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z; done & while true; do z=$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z$z; done

 

عکس – ۴

Wed, 03/25/2015 - 15:05

خودم درست کردمش &#x1f600;

 

the_desert_prairie_by_kate_fox-d6tpyh5_final

فیلم The Imitation Game

Mon, 03/23/2015 - 14:53

The_Imitation_Game_3051179c

 

 

IMDB

Genre:  Biography | Drama | Thriller

IMDB Rating: 8.1/10

MPR: PG-13

YIFY

Ganool 1080

Ganool 720

 

در ادامه فیلم Codebreaker تماشای این فیلم رو حتما توصیه میکنم! نیازی به تعرف از فیلم نیست… امتیاز بالای فیلم، اسکاری بودنش و همینطور بازی خوب بازیگرها، این فیلم رو به فیلمی کاملا تماشایی بدل میکنه!

ساخت لیستی از پسوردهای هش شده

Wed, 03/18/2015 - 23:01

حوصلم سر رفته بود گفتم یه اسکریپت بنویسم که یه سری پسورد بهش بدیم و هششون رو بهمون بده! البته اگه سایت قابل قبولی دیتابیسش رو بدست آوردین دنبال این نباشین که با این روش بتونید پسوردهای هش نشده رو بدست بیارین چون سایت‌های درست حسابی از الگوریتم سالت هم استفاده میکنن که کار رو حسابی سخت میکنن! البته اگه به دیتابیس فیس نما دسترسی پیدا کردین راحت میتونین با این روش به اصل پسوردها برسین :)) خب بریم سراغ اسکریپت! کاری که این اسکریپت میکنه خیلی سادست! به اسکریپت یه فایل میدیم که تو هر خطش یه پسورد و جود داره و اسکریپت دونه دونه پسوردها رو میخونه و هششون میکنه و هش رو به همراه اصل پسورد درکنار هم در یک فایل جدید ذخیره میکنه :) کد اسکریپت اینه، که من فرض میکنم شما اون رو با اسم md5.sh در پوشه home ذخیره کردین.

 

declare -i n
n=1
while [ $n -lt 11 ]; do
        a="$(head -n $n passwords.txt | tail -1 | tr -d '\n' | md5sum)"
        a=$a"$(head -n $n passwords.txt | tail -1)"
        echo $a >> md5_hashed_pass.txt
        n=n+1
done

 

بعد از ذخیره کردن اسکریپت با این کد بهش قابلیت اجرایی میدیم:

chmod +x md5.sh

 

قبل از اجرا کردن اسکریپت نیاز داریم تا یه سری پسورد داشته باشیم. من برای تولید پسورد تصادفی از این سایت استفاده کردم و باهاش ۱۰تا پسورد تصادفی تولید کردم. اینم لیست پسوردها:

dATbiRfe3A
qv1jc3nrL1
D3KE0l4hXK
ZdKNZYiPdV
RuUDqMPdeb
BCsymPThp3
fRcMg90R9Q
XXwhBHsc52
M4ptoRQ2sn
jMcmOMPn5O

 

و این پسوردها رو در پوشه home در فایلی به اسم passwords.txt ذخیره کردم. حالا اسکریپت رو با دستور

./md5.sh

اجراش میکنم و خروجی اسکریپت تو یه فایل به اسم md5_hashed_pass.txt ذخیره میشه. برای ۱۰تا پسورد من محتوای فایل خروجی این هست:

6987404a8b25b210092d34d3a4099128 -dATbiRfe3A
94112bbf50b7c5221d283a812bc4416f -qv1jc3nrL1
c911472169610dc0eb1a883b5ad33148 -D3KE0l4hXK
65ca15681092ff48f82881d041be99c4 -ZdKNZYiPdV
64aa4dc460ccea292d0513aae8e099bd -RuUDqMPdeb
61203cf80c95f56293e38075cd746407 -BCsymPThp3
ad9648522a71fb8d43654dfc03a26098 -fRcMg90R9Q
0ac7e69b159016281db5882cef1822a9 -XXwhBHsc52
caf660424941472f5a16bbc79cf42772 -M4ptoRQ2sn
78814e5c3333e0530c849a08b35a0763 -jMcmOMPn5O

 

همونطور که میبینین در هر خط ابتدا هش شده پسورد که با الگوریتم md5 تولید شده قرار داره و بعد از اون هم خود پسورد. اما ببینیم هر خط این اسکریپت چیکار میکنه!

 

declare -i n: متغییر n رو به عنوان یک متغییر عددی تعریف میکنیم.

 

n=1: و داخل این متغییر مقدار 1 رو ذخیره میکنیم.

 

while [ $n -lt 11 ]; do: یه حلقه درست میکنیم تا ۱۰بار عملیات خوندن خطوط رو انجام بده و درواقع ۱۰بار کدهای بین این خط و خط آخر یعنی done رو انجام میده. دقیق کنید که حلقه while تا زمانی که شرط جلوش درست باشه انجام میشه! و اینجا شرطش این هست که محتوای متغییر n کوچکتر از 11 باشه. و با توجه به اینکه n برابر با 1 هست و در انتهای هر بار انجام شدن حلقه (خط n=n+1) یک واحد به متغییر n اضافه میشه پس این حلقه ۱۰ بار انجام میشه. اگه خواستین تعداد بیشتری پسورد رو هش کنید حتما مقدار 11 رو تغییر بدید. مثلا اگه خواستید ۲۰تا پسورد رو هش کنید مقدار 11 رو به 21 تغییر بدین.

 

a=”$( )”: این خط میاد میگه خروجی دستورات داخل پرانتز رو داخل متغییر a بریز. اما دستورات داخل پرانتز چیکار میکنن؟ head -n $n passwords.txt | tail -1 میاد میگه خط nام فایل پسوردهارو برو بخون. اما هربار که یک پسورد از فایل پسوردها خونده میشه یک کاراکتر \n هم اضافی خونده میشه. برای حذف این کاراکتر اضافی خروجی رو با | به tr -d ‘\n’ میدیم تا اون کاراکتر اضافه آخری را پاک کنه و مجددا با | خروجی رو به دستور md5sum میدیم تا پسورد رو برامون هش کنه! و اگه نفهمیدین چی شد این خط میاد خط nام فایل پسوردها رو میگیره و هش شدش رو تو متغییر a میریزه!

 

a=$a”$()”: این میاد میگه درانتهای متغییر a که حاوی هش هست خود پسورد رو هم قرار بده.

 

echo $a >> md5_hashed_pass.txt: حالا ما پسورد و هشش رو در متغییر a داریم و با این دستور محتوای متغییر a رو تو فایل خروجی ذخیره میکنیم.

 

خب این توضیحات به نظرم کافیه! اگه قسمتیش رو خوب متوجه نشدین حتما کامنت بذارید :)

انجام کانفیگ سرور

Sat, 03/14/2015 - 15:06

خب دوستانی که نیاز به کانفیگ سرور دارن از این به بعد میتونن باهام تماس بگیرن تا کانفیگ سرور رو براشون انجام بدم و هزینه هم به صورت توافقی دریافت میشه. کانفیگ هایی که در حال حاضر انجام میدم عبارتن از:
نصب LAMP (اوبونتو و سنت او اس)
نصب LEMP (اوبونتو و سنت او اس)
نصب Deluge (اوبونتو)
نصب ruTorrent (اوبونتو)
تنظیم رپیدلیچ برای ذخیره فایل ها در سرور دیگه
اگه کانفیگ دیگه ای لازم داشتین باهام تماس بگیرین تا در صورت امکان براتون انجام بدمش.

Pages

Trigup Fanap O'Reilly Media
iranserver

زبان‌ها