اطلاعیه

Collapse
No announcement yet.

پهنای باند باقیمانده ؟

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پهنای باند باقیمانده ؟

    درود به همه دوستان

    ماه قبل پهنای باند 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 تون تماس بگیریدو پهنای باند باقیمونده رو سوال کنید

    شاد باشید;-)
    چگونه هوشمندانه بپرسیم

    #2
    پاسخ : پهنای باند باقیمانده ؟

    با سلام
    راستی انی zenity چه چیز جالبی هست! فکرش رو نکرده بودم یه همچین چیز با حالی باشه!
    حالا به نظرم در قدم بعدی بد نیست یه applet واسه گنوم درست کنی که خیلی خوشگل مصرف رو نشون بده این جوری هم با حال میآ‌شه!

    دوستان دقت کنید حمید خان از shell مودم هم استفاده کرده یعنی shellی که به صورت embedded داخل مودم روی یه پردازنده MIPS داره اجرا میآ‌شه. این هم یکی از مثالآ‌های استفاده از لینوکس در سیستمآ‌های نهفته!
    من دوست دارم آزاد فکر کنم، نرمآ‌افزارآ‌ و سختآ‌افزارهای آزاد را به کار ببرم و اگر توانستم نرمآ‌افزار، سختآ‌افزار و محتوای آزاد درست کنم!

    دیدگاه


      #3
      پاسخ : پهنای باند باقیمانده ؟

      آره ، zenity واقعا جالبه
      به قول خارجیها very cool

      مثلا این اسکرپتو برای mount کردن فایل iso میشه استفاده کرد :

      کد:
      #!/bin/bash
      
      source=`zenity --file-selection --title="Select iso file"`
      dest=`zenity --file-selection --directory --title="Select mount point"`
      
      if [ -a $source ] ; then
      	if [ -d $dest ] ; then
      		mount -o loop $source $dest
      	fi
      fi
      چگونه هوشمندانه بپرسیم

      دیدگاه

      لطفا صبر کنید...
      X