免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 10069 | 回复: 36
打印 上一主题 下一主题

[网络相关] 请教一些问题?望大家能指点一下!关于合理使用网络资源 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-05 10:33 |只看该作者 |倒序浏览
本帖最后由 qingyuan0o0 于 2013-08-05 12:11 编辑

我是打算想写一个shell来实现网速提升而这里遇到的问题一直没能解决,在论坛里看了好多帖子的一些用法,都还是没能看明白套用上。

因为需要上网的设备比较多,在高峰期10M完全不够用,
所以希望在openwrt路由系统实现在网速超过9.5M达到30秒之后开始执行获取和提速。
反之流量下来之后30s也自动关闭提速。
这里是不是要涉及到数组?就我理解,目前有涉及到的命令awk、eval用来处理文本信息,网络下载用到wget,不知道要不要curl来实现POST

而文本需要使用wget通过一个网站获取,因为内容是一个js文件,得到的值也附带了参数,怎么套用到脚本里成为参数呢?
  1.          var dialAccount='xxxxx@xxxxx'  #这里是账户信息,有的是邮件格式,有的是手机号码
  2. var bandWidth='10240'   #这里是原来的网速10M
  3. var maxBandWidth='20480'   #这里是提升后的网速20M
  4. var errorNum='0'  #应该是提供给网页用的,如果值为1说明不能提速,其他值也是空的
  5. var restMinutes='204'   #每月免费提供300分钟(5小时),剩下的值为分钟数,就因为免费,所以要智能的充分利用
  6. var resourceId='None'   #目前不知道这个参数的作用
  7. var speedup_url='http://ts.oooxm.com/speedup?by=oooxm.com'    #提速需要使用到的网址
复制代码
以上是获取到的参数,但是我一直都不知道怎么取到想要信息(单引号里的值)来实现判断(后来一边看http://bbs.chinaunix.net/thread-674903-1-1.html,貌似找到类似的方法套用一下,可以了,感谢)
  1. #!/bin/bash
  2. #智能判断提速shell
  3. #原理:通过判断目前网速使用情况
  4. #进行网络提速操作

  5. wget http://c.oooxm.com/ext/gkd/ts.jsp
  6. [ -f "/root/ts.jsp" ] && echo "提速页面分析开始"
  7. eval $(awk '{print $2}' ts.jsp) #原先语句有问题
  8. echo 账号:$dialAccount
  9. echo 基础网速:$bandWidth,最高网速 $maxBandWidth。
  10. # echo $errorNum
  11. echo 剩余分钟速:$restMinutes。
  12. # echo $resourceId
  13. echo 提速网址:$speedup_url
复制代码


已下是我在网上找的测速语句
  1. #!/usr/bin/env bash

  2. # Program: netspeed.sh
  3. # Author: LeslieChu
  4. # Date: 2012-02-04
  5. # Version: 1.0
  6. # Usage:
  7. #    sh netspeed2.sh eth1            开始运行,接口eth1

  8. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  9. export PATH

  10. if [ -z "$1" ];
  11. then
  12.         echo
  13.         echo "Usage:  $0   eth0";
  14.         exit  1
  15. fi

  16. while true;
  17. do
  18.         R_1=`cat /sys/class/net/$1/statistics/rx_bytes`;          #这一秒的RX值
  19.         T_1=`cat /sys/class/net/$1/statistics/tx_bytes`;          #这一秒的TX值

  20.         sleep 1;

  21.         R_2=`cat /sys/class/net/$1/statistics/rx_bytes`;          #下一秒的RX值
  22.         T_2=`cat /sys/class/net/$1/statistics/tx_bytes`;          #下一秒的TX值

  23.         R_Byte_PerSec=$(expr   $R_2  -   $R_1);                   #每秒的RX变化
  24.         T_Byte_PerSec=$(expr    $T_2  -   $T_1);                  #每秒的TX变化

  25.          R_KB_PerSec=$(expr     ${R_Byte_PerSec}   /    1024);    #记得“/”左右需要空格,否则无效
  26.          T_KB_PerSec=$(expr      ${T_Byte_PerSec}   /  1024);     #变化除以1024换算单位

  27.          R_MB_PerSec=$(expr     ${R_KB_PerSec}      /     1024);  #记得“/”左右需要空格,否则无效
  28.          T_MB_PerSec=$(expr      ${T_KB_PerSec}     /     1024);  #变化除以1024换算单位

  29.         echo -en "$1->\tTX:\t${T_KB_PerSec} KB/s, \t${T_MB_PerSec}MB/s; "
  30.         echo -e     " \tRX:\t${R_KB_PerSec}KB/s,  \t${R_MB_PerSec}MB/s."

  31. done
复制代码
我应该怎么把这些零散的信息给整合起来呢
即使获取了实时网速流量,我应该怎么去计算比较准确,还要套用时间进行分析,比如到达0的时候不执行脚本
一个脚本能实现这些操作吗?
点击智能提速,估计是通过数组来分析秒速看平均速度
达到30秒的时候就开始取这30秒的平均值了

达到10M持续30秒就触发提速了,触发提示开始后计算1分钟,超过1秒也算是第二分钟,所以最好是以30秒或者60秒为一个周期断开会合理一些。
可惜电信没有放出linux系统小或者shell脚本,想办法拼凑一个了,放在路由器比较好统计全部的流量来合理智能的提速
有没有大神帮忙看一下呢?给点意见,万分感谢!

论坛徽章:
0
2 [报告]
发表于 2013-08-05 10:33 |只看该作者

这里是修改后的信息,继续跟进谢谢大家了

本帖最后由 qingyuan0o0 于 2013-08-07 20:19 编辑
  1. #!/bin/bash
  2. #智能判断提速shell
  3. #原理:通过判断目前网速使用情况
  4. #进行提速操作
  5. #!/usr/bin/env bash

  6. time=1
  7. rxman=0
  8. txman=0
  9. R_KB_PerSec=0
  10. T_KB_PerSec=0
  11. while true;
  12. do
  13. R_1=`cat /sys/class/net/pppoe-wan/statistics/rx_bytes`;   #提取1秒前值     因为现在是在测试模式,为了方便直接把pppoe-wan给写进去,到时候直接换成$1就好了
  14. T_1=`cat /sys/class/net/pppoe-wan/statistics/tx_bytes`;   #提取1秒前值     然后直接打上所需要的网络接口即可
  15. R_C_1=${R_KB_PerSec};   #提取1秒前值
  16. T_C_1=${T_KB_PerSec};
  17. sleep 1;
  18. STRX=`cat /sys/class/net/pppoe-wan/statistics/rx_bytes`;   #提取当前值
  19. STTX=`cat /sys/class/net/pppoe-wan/statistics/tx_bytes`;   #提取当前值
  20. R_Byte_PerSec=$(expr    $STRX  -   $R_1);
  21. T_Byte_PerSec=$(expr    $STTX  -   $T_1);
  22. R_KB_PerSec=$(expr      ${R_Byte_PerSec}   /    1024);
  23. T_KB_PerSec=$(expr      ${T_Byte_PerSec}   /  1024);
  24. STRRX=${R_KB_PerSec};   #提取当前值
  25. STRTX=${T_KB_PerSec};
  26. rxman=$(expr $rxman + $STRRX)   #无限增大值来平均
  27. txman=$(expr $txman + $STRTX)
  28. pjjrx=$(expr   $rxman   +   $R_C_1);   #增加下一秒的值
  29. pjjtx=$(expr   $txman   +   $T_C_1);
  30. pjrx=$(expr   $pjjrx   /   $time);   #得到平均值
  31. pjtx=$(expr   $pjjtx   /   $time);
  32. if [ $time -ge '30' ] ; then time=0 && rxman=0 && txman=0 ;fi
  33. time=$(expr    $time  +   1);    #每滚动1秒需要增大一个值来平均
  34. echo `date +%Y-%m-%d\ %H:%M:%S`
  35. echo 实时速率:上行${T_KB_PerSec}KB,下行${R_KB_PerSec}KB
  36. echo 30s 流量: 上行 $pjjtx, 下行 $pjjrx t=$time
  37. echo 平均速率: 上行 $pjtx, 下行 $pjrx
  38. done
复制代码
现在实现简单不用生成文件来进行判断时间,虽然不是很完美,但是这几天的学习还是有所改进,谢谢大家指点
现在烦恼的是怎么POST提速和关闭提速,以及如何触发,我先保存一下,下班回家后继续研究

论坛徽章:
0
3 [报告]
发表于 2013-08-05 10:56 |只看该作者
没有勇气看完 

论坛徽章:
0
4 [报告]
发表于 2013-08-05 10:57 |只看该作者
回复 3# dahaoshanhe
额,为什么,我写的太乱了吗?


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
5 [报告]
发表于 2013-08-05 14:44 |只看该作者
本帖最后由 rdcwayx 于 2013-08-05 17:03 编辑

netspeed.sh  这个程序没有提速功能,只是进入死循环,反复查看每秒RX/TX的差额。

至于后面给的智能提速,是个图形界面的软件,它有没有支持命令行啊?

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
6 [报告]
发表于 2013-08-05 15:30 |只看该作者
本帖最后由 rdcwayx 于 2013-08-06 12:32 编辑

记录到文件:
  1. $ cat netspeed.sh

  2. echo `date +%s` `cat /sys/class/net/$1/statistics/rx_bytes ` `cat /sys/class/net/$1/statistics/tx_bytes ` >>/root/record
复制代码
把 netspeed.sh 放入 cronjob里
  1. * * * * * cd /root; ./netspeed.sh
复制代码
这样的话,就会自动产生一个记录网卡进出包大小的文件。(至于太旧的记录,你以后再写个脚本自动清除)

/root/record文件包含每秒网速记录 (用 epoch 记录),按照你后面给的数据,形成如下的记录文件。
  1. 1375663009 287 259
  2. 1375663010 68 96
  3. 1375663011 68 0
  4. 1375663012 488 1364
  5. 1375663013 0 0
  6. 1375663014 556 1556
  7. 1375663015 556 1460
  8. 1375663016 0 0
  9. 1375663017 744 904
  10. 1375663018 0 0
  11. 1375663019 151 179
  12. 1375663020 0 0
  13. 1375663021 151 179
  14. 1375663022 0 0
  15. 1375663023 151 179
  16. 1375663024 0 0
  17. 1375663025 0 0
  18. 1375663026 151 179
  19. 1375663027 0 0
  20. 1375663028 68 96
  21. 1375663029 0 0
  22. 1375663030 76 40
  23. 1375663031 0 0
  24. 1375663032 0 0
  25. 1375663033 0 0
  26. 1375663034 0 0
  27. 1375663035 0 0
  28. 1375663036 151 179
  29. 1375663037 0 0
  30. 1375663038 151 179
复制代码
再往下需要另写脚本判断30秒之间的数据是否用到90%, 如果是,就提速。

论坛徽章:
0
7 [报告]
发表于 2013-08-05 16:28 |只看该作者
本帖最后由 qingyuan0o0 于 2013-08-06 00:40 编辑

回复 6# rdcwayx


    哦,好的,非常感谢版主指点,再次修改结果
  1. #!/usr/bin/env bash
  2. t=0
  3. dt=`date +%Y%m%d%H%M%S`
  4. while true;
  5. do
  6.         R_1=`cat /sys/class/net/pppoe-wan/statistics/rx_bytes`;          #这一秒的RX值
  7.         T_1=`cat /sys/class/net/pppoe-wan/statistics/tx_bytes`;          #这一秒的TX值
  8.         sleep 1;
  9.         R_2=`cat /sys/class/net/pppoe-wan/statistics/rx_bytes`;          #下一秒的RX值
  10.         T_2=`cat /sys/class/net/pppoe-wan/statistics/tx_bytes`;          #下一秒的TX值
  11.         R_Byte_PerSec=$(expr   $R_2  -   $R_1);                   #每秒的RX变化
  12.         T_Byte_PerSec=$(expr    $T_2  -   $T_1);                  #每秒的TX变化
  13. t=$(expr $t + 1)
  14. echo time=\'${t}s\' RX=\'${R_Byte_PerSec}\' TX=\'${T_Byte_PerSec}\' >>/root/$dt
  15. #定义提速时间
  16. done
复制代码
单文件每秒都在持续输出
  1. time='1s' RX='287' TX='259'
  2. time='2s' RX='68' TX='96'
  3. time='3s' RX='68' TX='0'
  4. time='4s' RX='488' TX='1364'
  5. time='5s' RX='0' TX='0'
  6. time='6s' RX='556' TX='1556'
  7. time='7s' RX='556' TX='1460'
  8. time='8s' RX='0' TX='0'
  9. time='9s' RX='744' TX='904'
  10. time='10s' RX='0' TX='0'
  11. time='11s' RX='151' TX='179'
  12. time='12s' RX='0' TX='0'
  13. time='13s' RX='151' TX='179'
  14. time='14s' RX='0' TX='0'
  15. time='15s' RX='151' TX='179'
  16. time='16s' RX='0' TX='0'
  17. time='17s' RX='0' TX='0'
  18. time='18s' RX='151' TX='179'
  19. time='19s' RX='0' TX='0'
  20. time='20s' RX='68' TX='96'
  21. time='21s' RX='0' TX='0'
  22. time='22s' RX='76' TX='40'
  23. time='23s' RX='0' TX='0'
  24. time='24s' RX='0' TX='0'
  25. time='25s' RX='0' TX='0'
  26. time='26s' RX='0' TX='0'
  27. time='27s' RX='0' TX='0'
  28. time='28s' RX='151' TX='179'
  29. time='29s' RX='0' TX='0'
  30. time='30s' RX='151' TX='179'
复制代码
但是做出了这个文件我应该怎么来进行计算呢?
超过30s自动成为-1的值,也就是29s,以此类推,一直计算这个30s的值,这个数组怎么写呢?

论坛徽章:
0
8 [报告]
发表于 2013-08-06 00:04 |只看该作者
openwrt测试后无法使用array的数组,我临时找了一下有个方案,但是不是很会用,有人帮忙解释一下吗?
  1. - To set varibles:
  2.     for index in 1 2 3 ; do
  3.       setvar myvar$index "Index: $index"
  4.       eval myothervar$index=\"Index: $index\"
  5.     done

  6. - To use variables:
  7.     for index in 1 2 3 ; do
  8.       eval echo \$myvar$index
  9.     done

  10.     index=2
  11.     eval assign="\$myvar$index"
  12.     echo $assign
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
9 [报告]
发表于 2013-08-06 08:44 |只看该作者
本帖最后由 rdcwayx 于 2013-08-06 10:47 编辑

不知道你上面两个帖子要做什么,openwrt 不了解。 继续我的帖子, 6楼按照你后面给的数据,定制了个模拟记录,还给改成用epoch 来记录,这个对你的要求比较适合。

开始提问:

如果一条记录是:
  1. 1375663012 488 1364     # EpochTime RX TX
复制代码
在判断的时候,30秒内的流量你是如何计算出来的?而且要判断进来或者出去的流量,还是两者相加后一起考虑? 假设你的记录文件record已经包含了最近30秒的记录
  1. awk '{s1+=$2;s2+=$3}END{print s1,s2}' record
  2. 3817 6849
复制代码
我计算出,RX 总和是 3817, TX 总和是6849,你要和9.5M判断的是那个数据? 9.5M 可能就是9500 的意思?

论坛徽章:
0
10 [报告]
发表于 2013-08-06 10:02 |只看该作者
回复 9# rdcwayx


    事实上主要判断RX的流量的平均值就好了,不用涉及到上传流量,RX是下载流量还有就是那个命令
root@OpenWrt:~# epoch
-ash: epoch: not found
我这里无法使用,因为openwrt事实上就是一个附带有BusyBox v1.19.4的一个路由器,一些简单的命令是有,就是数组不支持,所以比较麻烦就在这里。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP