درود به همه دوستان
ماه قبل پهنای باند 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 خودشو بده !
پس کاری باید کرد که اون خطوط مثلا با تاخیر ۱ ثانیه به ۱ ثانیه توی مودم اجرا بشن.
اگه گفتید چی واسه اینکار خوبه ؟ آره گربه ملوس اینترنتی
یا netcatاینطوری :
کد:
# 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 تون تماس بگیریدو پهنای باند باقیمونده رو سوال کنید

شاد باشید;-)


دیدگاه