درود به همه دوستان
ماه قبل پهنای باند ADSL ام بی هوا تموم شد :cry:
شرکت ADSL م هم راه درستی برای نشون دادن پهنای باند نداده
خلاصه آستینارو زدم بالا گفتم که یه کاری بکنم.
از سر بیکاری و تفریح اسکریپت سادهآای نوشتم که پهنای باند مصرفی رو لاگ کنه.
لازم به توضیحه که این تقریبا اولین اسکریپت تقریبا به درد بخوریه که نوشتم ، ایرادی چیزی داشت به بزرگی خودتون ببخشید !
من معولا با وایرلس لپ تاپ وصل میشم به مودم ADSL ام
ایده اولیم این بود که بیام و مقدار TX/RX عبوری از وایرلس لپآتاپ رو لاگ کنم.
ولی خب اگر یه موقع با سیم وصل شدم با اگه یه موقع با کامپیوتر رومیزی کار کردم چی ! اون موقع که چیزی ثبت نمیشه
به این فکر افتادم که مقدار TX/RX اینترفیس ADSL مودمو لاگ کنم.
دیده بودم که توی نمایش webbase مودم مقدار مصرف نشون داده میشه.
یه تلنت به مودم کردم و با اجرای دستور ifconfig دیدم بله ، چه خبره !
یه اینترفیس بنام ppp0 وجود داشت که مصرفش با نمایش webbase تطابق داشت .
IP ون هم به همین اینترفیس اختصاص داشت .
خب ، پس به اینجا رسیدم که مقدار TX/RX اینو از دل مودم بکشم بیرون و توی یه فایل ذخیره کنم . ولی چطوری ؟
خب کار زیاد مشکلی نبود ، کافی بود بهش تلنت بشه ، یوزر/پسورد داده بشه ، یه ifconfig اجرا بشه ، و نتیجه رو پردازش کنیم. یه کاری شبیه این :
این دستورو در نظر بگیرید :
خط به خط این خروجی باید بعد از تلنت ، توی مودم اجرا بشه .
ولی مثلا همچین چیزی جواب نداد :
چرا ؟ جواب معلومه ، چون اون خطوطی که echo به telnet میده ، با سرعت توی مودم اجرا میشن . مثلا قبل از اینکه مودم اعلان login خودشو بده !
پس کاری باید کرد که اون خطوط مثلا با تاخیر ۱ ثانیه به ۱ ثانیه توی مودم اجرا بشن.
اگه گفتید چی واسه اینکار خوبه ؟ آره گربه ملوس اینترنتی
یا netcat
اینطوری :
سوییچ i به netcat میگه خطوط ورودی رو با چه تاخیری پشت سر هم اجرا کن که در اینجا روی یک ثانیه تنظیم شده .
خیلی جالبه ، ببینید چه اتفاقی میافته :
البته قبول دارم که بهترین راه نیست ، یکی از دلایلشم اینه که پسوردها بصورت ناامن بین ما و مودم رد و بدل میشن که اگر ارتباط بی سیم باشه که چه بدتر !
----------------
حالا میزان مصرف اینترفیس ppp0 دستمونه ، تنها کاری که باید ابنجام بدیم ، اینه که الگویی برای ذخیره مقدار مصرف بنویسیم و اونو توی یه فایل روی کامپیوترمون ذخیره کنیم.
و احیانا یزره زرق و برق به اسکریپت بدیم که مثلا هر موقع مصرفمون به یه حدی رسید یه جوری بهمون هشدار بده و از این کارا .
کد کامل اسکریپتو ببینید :
به چند تا متغیر اولش دقت کنید.
* modemIP برای تعیین IP مودم هست .
* modemPass پسورد مودم برای لوگین هست .
* device اینترفیسی هست که مصرف ADSL رو نشون میده .
* interval برای تعیین زمان به روز کردن فایل لاگ هست .
* logfile هم مسیر فایل لاگ برای ذخیره میزان مصرفه .
* maxBW حداکثر میزان مصرف به مگابایت هست که اگر بیشتر از اون مصرف کنید یه پنجره اینطوری باز میشه و بهتون اخطار میده :

حالا برای اینکه این اسکریپت بطور خودکار بعد از بوت سیستم اجرا بشه ، اونو با نام S99bwlogger توی مسیر زیر گذاشتم :
( میدونم اینم بهترین راه نیست ، ولی خب من معمولا توی runlevel دو هستم )
و در نهایت همچین فایل لاگی دارید :
که مثلا با اجرای این دستور میتونید مقدار مصرفتونو ببینید :
* توجه ۱ : این اسکریپت من ممکنه ( حتما ) یه سری مشکلات داره . شما به دل نگیرید
** توجه ۲ : این بیشتر جنبه سرگرمی داشت . بهتره از برنامهآهای آماده برای اینکار استفاده کنید یا یا ISP تون تماس بگیریدو پهنای باند باقیمونده رو سوال کنید
شاد باشید;-)
ماه قبل پهنای باند ADSL ام بی هوا تموم شد :cry:
شرکت ADSL م هم راه درستی برای نشون دادن پهنای باند نداده
خلاصه آستینارو زدم بالا گفتم که یه کاری بکنم.
از سر بیکاری و تفریح اسکریپت سادهآای نوشتم که پهنای باند مصرفی رو لاگ کنه.
لازم به توضیحه که این تقریبا اولین اسکریپت تقریبا به درد بخوریه که نوشتم ، ایرادی چیزی داشت به بزرگی خودتون ببخشید !
من معولا با وایرلس لپ تاپ وصل میشم به مودم ADSL ام
ایده اولیم این بود که بیام و مقدار TX/RX عبوری از وایرلس لپآتاپ رو لاگ کنم.
ولی خب اگر یه موقع با سیم وصل شدم با اگه یه موقع با کامپیوتر رومیزی کار کردم چی ! اون موقع که چیزی ثبت نمیشه
به این فکر افتادم که مقدار TX/RX اینترفیس ADSL مودمو لاگ کنم.
دیده بودم که توی نمایش webbase مودم مقدار مصرف نشون داده میشه.
یه تلنت به مودم کردم و با اجرای دستور ifconfig دیدم بله ، چه خبره !
یه اینترفیس بنام ppp0 وجود داشت که مصرفش با نمایش webbase تطابق داشت .
IP ون هم به همین اینترفیس اختصاص داشت .
کد:
# ifconfig br0 Link encap:Ethernet HWaddr 00:1E:58:82:3F:E9 .... RX bytes:11583219 (11.0 Mb) TX bytes:158654804 (151.3 Mb) br1 Link encap:Ethernet HWaddr 00:00:00:00:00:00 .... RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) eth0 Link encap:Ethernet HWaddr 00:1E:58:82:3F:E9 .... RX bytes:0 (0.0 b) TX bytes:43852 (42.8 kb) lo Link encap:Local Loopback .... RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) nas0 Link encap:Ethernet HWaddr 00:1E:58:82:3F:E9 .... RX bytes:157433982 (150.1 Mb) TX bytes:13096979 (12.4 Mb) ppp0 Link encap:Point-Point Protocol inet addr:89.144.179.251 P-t-P:89.144.179.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 ASYMMTU:1500 RX packets:155336 errors:0 dropped:0 overruns:0 frame:0 TX packets:118097 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:156113132 (148.8 Mb) TX bytes:9142981 (8.7 Mb) wlan0 Link encap:Ethernet HWaddr 00:1E:58:82:3F:EA .... RX bytes:9817847 (9.3 Mb) TX bytes:158654804 (151.3 Mb)
خب ، پس به اینجا رسیدم که مقدار TX/RX اینو از دل مودم بکشم بیرون و توی یه فایل ذخیره کنم . ولی چطوری ؟
خب کار زیاد مشکلی نبود ، کافی بود بهش تلنت بشه ، یوزر/پسورد داده بشه ، یه ifconfig اجرا بشه ، و نتیجه رو پردازش کنیم. یه کاری شبیه این :
این دستورو در نظر بگیرید :
کد:
# echo -e "root\n$123456\nifconfig ppp0\nexit" root 23456 ifconfig ppp0 exit
خط به خط این خروجی باید بعد از تلنت ، توی مودم اجرا بشه .
ولی مثلا همچین چیزی جواب نداد :
کد:
# echo -e "root\n$123456\nifconfig ppp0\nexit" | telnet 192.168.1.1
چرا ؟ جواب معلومه ، چون اون خطوطی که echo به telnet میده ، با سرعت توی مودم اجرا میشن . مثلا قبل از اینکه مودم اعلان login خودشو بده !
پس کاری باید کرد که اون خطوط مثلا با تاخیر ۱ ثانیه به ۱ ثانیه توی مودم اجرا بشن.
اگه گفتید چی واسه اینکار خوبه ؟ آره گربه ملوس اینترنتی

اینطوری :
کد:
# echo -e "root\n$123456\nifconfig ppp0\nexit" | netcat -i 1 192.168.1.1 23
سوییچ i به netcat میگه خطوط ورودی رو با چه تاخیری پشت سر هم اجرا کن که در اینجا روی یک ثانیه تنظیم شده .
خیلی جالبه ، ببینید چه اتفاقی میافته :
کد:
hamid-laptop:~# echo -e "root\n123456\nifconfig ppp0\nexit" | netcat -i 1 192.168.1.1 23 BusyBox on (none) login: root Password: BusyBox v0.61.pre (2007.05.16-05:50+0000) Built-in shell (ash) Enter 'help' for a list of built-in commands. # ifconfig ppp0 ppp0 Link encap:Point-Point Protocol inet addr:89.144.179.251 P-t-P:89.144.179.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1 ASYMMTU:1500 RX packets:166053 errors:0 dropped:0 overruns:0 frame:0 TX packets:125378 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:170644982 (162.7 Mb) TX bytes:9617567 (9.1 Mb) # exit hamid-laptop:~#
البته قبول دارم که بهترین راه نیست ، یکی از دلایلشم اینه که پسوردها بصورت ناامن بین ما و مودم رد و بدل میشن که اگر ارتباط بی سیم باشه که چه بدتر !
----------------
حالا میزان مصرف اینترفیس ppp0 دستمونه ، تنها کاری که باید ابنجام بدیم ، اینه که الگویی برای ذخیره مقدار مصرف بنویسیم و اونو توی یه فایل روی کامپیوترمون ذخیره کنیم.
و احیانا یزره زرق و برق به اسکریپت بدیم که مثلا هر موقع مصرفمون به یه حدی رسید یه جوری بهمون هشدار بده و از این کارا .
کد کامل اسکریپتو ببینید :
کد:
#!/bin/bash # modem settings modemIP="192.168.1.1" modemPass="123456" device="ppp0" # max band width for notice maxBW=3072 # refresh interval interval=5s # logfile dir logfile="/root/bwlog.txt" # initial some variables req="root\n$modemPass\nifconfig $device\nexit" temp_rx=0 temp_tx=0 warning=0 # show startup message echo "Bandwidth logger started" # Check for log file exist or not [ -a $logfile ] || echo -e "RX bytes: 0\nTX bytes: 0\n" > $logfile while [ 1 ] ; do # Get current RX, TX bytes from modem temp=`echo -e $req | netcat -i 1 $modemIP 23 | grep "RX bytes"` cur_rx=${temp##*RX bytes:} cur_rx=${cur_rx%%(*} cur_tx=${temp##*TX bytes:} cur_tx=${cur_tx%%(*} rx=`expr $cur_rx - $temp_rx` tx=`expr $cur_tx - $temp_tx` # Read previos RX, TX bytes from log file temp=`cat $logfile | grep RX` prev_rx=${temp##RX bytes:} temp=`cat $logfile | grep TX` prev_tx=${temp##TX bytes:} # Calculate total RX, TX bytes total_rx=`expr $rx + $prev_rx` total_tx=`expr $tx + $prev_tx` # Save total values in logfile echo "RX bytes: $total_rx" > $logfile echo "TX bytes: $total_tx" >> $logfile echo >> $logfile echo "-------- Extra information --------" >> $logfile echo "Recieve in MiB = $(($total_rx/1024/1024))" >> $logfile echo "Transmit in MiB = $(($total_tx/1024/1024))" >> $logfile # show Warning if BandWidth is finishing ! ----------------------- temp=`echo $(($total_rx/1024/1024))` if [ $temp = $maxBW ] ; then if [ $warning = 0 ] ; then zenity --warning --text "hey! your internet bandwidth is finishing" --title "BandWidth Logger" & warning=1 fi fi # Initial values for next loop temp_rx=$cur_rx temp_tx=$cur_tx sleep $interval done
به چند تا متغیر اولش دقت کنید.
* modemIP برای تعیین IP مودم هست .
* modemPass پسورد مودم برای لوگین هست .
* device اینترفیسی هست که مصرف ADSL رو نشون میده .
* interval برای تعیین زمان به روز کردن فایل لاگ هست .
* logfile هم مسیر فایل لاگ برای ذخیره میزان مصرفه .
* maxBW حداکثر میزان مصرف به مگابایت هست که اگر بیشتر از اون مصرف کنید یه پنجره اینطوری باز میشه و بهتون اخطار میده :

حالا برای اینکه این اسکریپت بطور خودکار بعد از بوت سیستم اجرا بشه ، اونو با نام S99bwlogger توی مسیر زیر گذاشتم :
کد:
/etc/rc2.d/
( میدونم اینم بهترین راه نیست ، ولی خب من معمولا توی runlevel دو هستم )
و در نهایت همچین فایل لاگی دارید :
کد:
RX bytes: 142331828 TX bytes: 8751719 -------- Extra information -------- Recieve in MiB = 135 Transmit in MiB = 8
که مثلا با اجرای این دستور میتونید مقدار مصرفتونو ببینید :
کد:
cat /root/bwlog.txt
* توجه ۱ : این اسکریپت من ممکنه ( حتما ) یه سری مشکلات داره . شما به دل نگیرید
** توجه ۲ : این بیشتر جنبه سرگرمی داشت . بهتره از برنامهآهای آماده برای اینکار استفاده کنید یا یا ISP تون تماس بگیریدو پهنای باند باقیمونده رو سوال کنید

شاد باشید;-)
دیدگاه