自由的生活_软路由论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9075|回复: 25

[其它] ROS API 脚本 E语言,,,新手学习记录

  [复制链接]
发表于 2013-1-28 19:50:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 hmy100 于 2013-1-28 22:24 编辑

开贴之前首先需要说明我刚学习ROS一周左右时间不长很多问题都没搞清楚
比如什么是pcq以及很Ros的常规操作。
E语言使用了很久,但水平也有限。开贴的目的是分享一下我的到的成果希望你能用上。

我发的是根据我自己的情况,实际使用还需要你根据自己的情况。




ROS我安装的目的是需要智能限速,所以我首先学习的重点就是这里。我所理解的智能限速就是,带宽使用保持在90%以上,看了pcq还是没弄懂原理所以我实现的方法就是 简单限速+脚本
思路是这样,带宽30M   带宽使用超过 25M 就“流量监控”调整简单限速里面 下载速度,然后用用计划任务每5分钟获取一次 WAN口的流量如果低于 多少就 调整下载的限制让他们下载更加快速。

未命名.jpg

然后降速脚本
  1. /queue sim;  :if ([get 1 max-limit]= "16M/2M") do={set [find target-addresses=""] max-limit="10400k/2M"; :log warning "hmy - 1.3M"} else={:if ([get 1 max-limit]= "10400k/2M") do={set [find target-addresses=""] max-limit="6400k/2M"; :log warning "hmy - 800K"} else={:if ([get 1 max-limit]= "6400k/2M") do={set [find target-addresses=""] max-limit="4M/2M"; :log warning "hmy - 500K"} else={:if ([get 1 max-limit]= "20M/2M") do={set [find target-addresses=""] max-limit="16M/2M"; :log warning "hmy - 16M"} else={:log warning "hmy -"}}}}};
复制代码
  1. if ([get 1 max-limit]= "16M/2M") do={set [find target-addresses=""] max-limit="10400k/2M"
复制代码
get 1 max-limit 是获取 列表里面第一条记录限制速度  然后判断 是否为 “16M/2” 如果是 就 降速 set [find target-addresses=""] max-limit="10400k/2M";
加速 脚本 和这个基本一样
未命名.jpg

在baidu上面看到这个脚本
  1. :for aaa from 1 to 42 do={/queue sim dis [find max-limit=("800k/800k")]}
复制代码
这种脚本 CPU使用很高,首先他需要循环42次 其次 就是find本来就属于查询命令,所以尽量在循环中不要使用find 不然很吃CPU

降速用的是ros “流量监控”  里面的触发
未命名.jpg



下面的是放ROS的 计划任务 里面 5分钟判断一次 wan的流量 流量低于多少就执行某脚本 希望你们能看明白,再有就是我的脚本 就算1秒钟你执行10次CPU都不会过3%
然后就是 获取wan的流量了
  1. /; :local hmy [:tostr [:pick [/interface monitor-traffic wan as-value] 10]]; :set hmy [:pick $hmy 19 [:len $hmy]]; :set hmy [:tonum $hmy]; :if (hmy < 6400000) do={/system script job .. run hmy+};
复制代码
:tostr [:pick [/interface monitor-traffic wan as-value] 10]  取wan网卡流量数据,取出来的数组文本所以需要用:tostr 转换为文本型,  :set hmy [:pick $hmy 19 [:len $hmy]]  取需要的文本,set hmy [:tonum $hmy]转换为整数类型 方便后面的比较 if (hmy < 6400000) do={/system script job .. run hmy+}   这里的 做一个判断低于多少就执行 脚本。   这段代码花费了我不少时间,最终都用翻译然间去翻译ros的官网论坛。



到这里,我觉得限速的智能化已经完成了,至于如何实施就看自己的网络情况了,还有就是不知道为什么我从新写效率高点的在控制台能用,放脚本里面就不能执行了就是这段
/queue sim    ; :local hmy [get 1 max-limit] ;     :if ($hmy = "20M/2M") do={set [find target-addresses=""] max-limit="16M/2M"};
                                                                        :if ($hmy = "16M/2M") do={set [find target-addresses=""] max-limit="10400k/2M"};
                                                                        :if ($hmy = "10400k/2M") do={set [find target-addresses=""] max-limit="6400k/2M"};
                                                                        :if ($hmy = "6400k/2M") do={set [find target-addresses=""] max-limit="4M/2M"};
routeros
 楼主| 发表于 2013-1-28 19:51:21 | 显示全部楼层
本帖最后由 hmy100 于 2013-1-28 22:16 编辑

看ros官网的时候留意到 ROS 有API,然后就心想要是能自己做一个 能随时查看 ROS里面的流量 以及以后如果做收费的话就可以DIY一个 收费的软件了
本人就用点E语言所以 都是用E语言来实现的。
首先的也是最关键的 就是用E语言调用API登录进去。。
未命名.jpg
直接用E语言里面的组件就行了,没必要用其他的
未命名.jpg
代码有些不好看,这个就是我学习的时候用来测试的。你们就看一下方法吧。
未命名.jpg
这里是登录。。。哦,需要注意的是,你发送过去的第一个字节是你发送数据的长度,比如你发送一个  "/login”  函数过去,那么前面必须要加这个命令的长度 ,也就是 {6}+到字节集 (“/login”) 然后还要加上结束符号{0}
好多人难就难在登录这里服务器返回的钥匙处理,
未命名.jpg
十六进制到十进制 E论坛去搜索一下吧N多 N多。我就是随便找的一个。


现在已经成功用E语言 API 登录上ROS了 剩下的基本就是 如鱼得水了,
分享点我 觉得有点用的 API 吧,就这几个代码我居然用了1天多才研究出来~~~~

禁用ether5
/interface/ethernet/disable
=numbers=ether5

得到ether5 的ID
/interface/ethernet/print
?=name=ether5
=.proplist=.id

禁用ID
Then use returned id to disable
/interface/ethernet/disable
=.id=<returned_id>

获取WAN网卡流量
/interface/monitor-traffic
=interface=wan
=once

获取列表ID
/queue/simple/find
where=target-addresses


获取ID详情
/queue/simple/get
=number=hmy
=value-name=rate

下面的是源码不是“大力丸”
1.rar (2.58 KB, 下载次数: 68, 售价: 20 铜板)
routeros
发表于 2013-1-28 20:25:50 | 显示全部楼层
编毛啊,这跟API有关系吗,我晕,还好不是收费贴,要不真想。。。。
routeros
 楼主| 发表于 2013-1-28 21:10:28 | 显示全部楼层
routeros
发表于 2013-1-28 21:53:35 | 显示全部楼层
无语,5分钟调整一次限速?等你没调整的时候就卡了。1分钟调整一次?还是不够快,要不再快点?CPU又顶不住了。这么不合理的方案亏你想得出来。
routeros
发表于 2013-1-28 21:56:58 | 显示全部楼层
http://www.cat-home.org/?action=show&id=93
这里有我写的API查看网卡和QUEUE TREE列队流量的软件,免费的,如果就这么简单的东西就收费,那钱也太好赚了吧。
routeros
 楼主| 发表于 2013-1-28 22:05:32 | 显示全部楼层
9939781 发表于 2013-1-28 21:53
无语,5分钟调整一次限速?等你没调整的时候就卡了。1分钟调整一次?还是不够快,要不再快点?CPU又顶不住 ...

你当真看了我的源码? 认真看了?  首先我的 降速用的 流量监控 里面的,所以降速是触发,提升速度是用的 时钟 然后判断是否需要提速。  其次我的脚本就算你1秒执行一次 CPU最多也就3%。
routeros
 楼主| 发表于 2013-1-28 22:09:56 | 显示全部楼层
9939781 发表于 2013-1-28 21:56
http://www.cat-home.org/?action=show&id=93
这里有我写的API查看网卡和QUEUE TREE列队流量的软件,免费的 ...

看样子你是老人了?为? 你哪个东西是EXE的,我的是源码。   也许对于你来说简单,但我用了1个通宵才研究出来登录,奇怪的是我在网络上搜索了一晚上居然没有一个这样的源码。
routeros
发表于 2013-1-28 22:23:12 | 显示全部楼层
9939781 发表于 2013-1-28 21:56
http://www.cat-home.org/?action=show&id=93
这里有我写的API查看网卡和QUEUE TREE列队流量的软件,免费的 ...

请问你的软件是用什么语言来写的,很象你写的软件很少被杀毒软件勿杀,而E语言写出来的软件,基本都会被勿杀,所以想问下你用什么语言写的,谢谢
routeros
发表于 2013-1-28 23:23:50 | 显示全部楼层
本帖最后由 9939781 于 2013-1-28 23:31 编辑
persist86 发表于 2013-1-28 22:23
请问你的软件是用什么语言来写的,很象你写的软件很少被杀毒软件勿杀,而E语言写出来的软件,基本都会被勿 ...


我用VS6写的。E语言写的东西编译出的EXE大不说,还占不少内存,容易被杀。

点评

非常感谢...  发表于 2013-1-29 10:18
routeros
发表于 2013-1-28 23:27:56 | 显示全部楼层
本帖最后由 9939781 于 2013-1-28 23:32 编辑
hmy100 发表于 2013-1-28 22:05
你当真看了我的源码? 认真看了?  首先我的 降速用的 流量监控 里面的,所以降速是触发,提升速度是用的 ...


纯粹只是为了监控流量才修改限速不需要任何外接程序,直接用脚本监控就能完成。我有有写好的现成的,不过很久没用了。反复修改限速规则会导致BUG最终掉线重启。
http://www.cat-home.org/?action=show&id=16
这个问题早在2010年我就提出来了。这个功能的脚本也是一样。当然不排除可能4X,5X已经解决了这个BUG,反正我已经不用这个脚本很久了,出了BUG伤不起。
routeros
 楼主| 发表于 2013-1-29 02:49:58 | 显示全部楼层
9939781 发表于 2013-1-28 23:27
纯粹只是为了监控流量才修改限速不需要任何外接程序,直接用脚本监控就能完成。我有有写好的现成的,不 ...

你不说我还根本不知道,网络上我搜索了很多关于限速我就不明白为什么不这样限制,原来有内存问题,我的好好测试这可是一个大问题。谢谢你.
routeros
发表于 2013-1-31 00:13:11 | 显示全部楼层
易语言啊,看着其实挺头晕的。虽我的母语是中文。不习惯,呵呵
routeros
发表于 2013-1-31 01:19:59 | 显示全部楼层
原来一直用TELNET 来实现操作的API  需要
routeros
发表于 2013-4-10 01:56:13 | 显示全部楼层
希望更多些这些交流
routeros
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|软路由论坛 ( 渝ICP备15001194号-1,渝公网安备 50011602500124号 )

GMT+8, 2019-12-8 18:42 , Processed in 0.171423 second(s), 26 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表