因为要面对将近200人上网的管理,所以低级的路由器会比较麻烦,没有办法控制带宽,到时候就会带来很大的麻烦。高级路由器可能用不上那么好,那就可以折中考虑好一点的路由器,可以刷第三方固件的,比如刷tomato固件,可以方便的控制带宽的使用问题,相应的,按它支持的型号购买相应的路由器即可。

这里选择了Buffalo WHR-HP-G54-AP,无线效率会高一些,可以满足更多的人使用无线,距离也会更远。
刷固件按照官方的readme似乎总刷不上,可以考虑改名后,自己上传,可以参考以下做法:

引用
下载后的Tomato_1_22.7z 大小有2818K,用最新的winrar解压缩,里面有好几个文件,从其中的readme.htm有描述"tomato.trx is for the Buffalo WHR-G54S, WHR-HP-G54",实际我的WHR-HP-G54-AP和WHR-HP-G54硬件原理是差不多的,除了天线的区别,所以确定解压缩后中的文件"tomato.trx "就是我需要刷的固件的。下面开始刷固件:

下载Tomato的最新固件解压缩, 将tomato.trx 改为 tomato122.bin (有的教程说要改为bin文件,为了安全我把文件后缀改为.bin文件了) 放到C:\  即C盘根目录下(为了后面)

将路由器恢复到原厂设置,具体就是通电状态下用一个东西顶住路由器下部的INIT按钮,至少30秒种, 建议2分钟。

用网线将电脑和路由器的LAN口连接,将电脑的IP地址手动设为固定IP地址,设为192.168.11.2,子网掩码为255.255.255.0,网关为192.168.11.1。请不要用无线来刷 Tomato,因为路由器是在启动过程中被刷新,但是这个启动过程中无线模块是不工作的。

从"开始"菜单→"运行"→键入"cmd",点击"确定"进入到命令行模式。
键入tftp命令:tftp -i 192.168.11.1 put C:\tomato122.bin 千万不要回车 。备注我的tomato122.bin放在C:\路径,如果放在其他路径,必须正确输入。否则后面步骤的回车后会提示tftp命令出错。

拔下路由器电源,确保电脑和路由器的网线连接好,然后把路由器电源插上。等电脑任务栏最右下角的网络连接图标(如果没有看到图标,必须在设置IP地址的时候设置在任务栏显示网络图标)从红叉变成正常连接的时候,在当前的命令行窗口 tftp -i 192.168.11.1 put C:\tomato122.bin 按键盘回车键 。
然后又过一段时间,会出现传送数据成功的字样。

如果你键入回车的时间晚了,在经过一段时间的等候,会给出一个Timeout occurred出错的提示。你只要重复6,7步就行,不会损坏路由器。
当出现传送成功字样后,切记一定要等待至少3分钟,路由器不能断电,也不要对路由器有所操作。

等待3分钟以后,将电脑的IP设为自动获取(DHCP)。电脑会获得一个192.168.1.XXX的地址,网关是192.168.1.1。
然后打开浏览器,http://192.168.1.1,回车,用户名:root 密码:admin。


成功的示例,关键把握网络刚好恢复的时候执行:
Tags: , ,
又搬回了一年前的小区,新屋子比原先的屋子好太多了,有了电视,有了网络,还有24小时热水,还有不用电卡,这个太人性化了,不用想着什么时候该充电卡了。。

点击在新窗口中浏览此图片
乱哄哄的屋子,东西都还没有收拾,厅里的装修简单,但看起来还是不错的

点击在新窗口中浏览此图片
星哥下厨做饭,这顿饭算酒席了吧

点击在新窗口中浏览此图片
去超市逛了逛,买了一些生活用品,这个漂亮的杯子也被收入囊中
Tags:
本项目可以参考google代码工程:

http://code.google.com/p/cacti-memcached-template/

项目的起因:

1 想做memcached的监测
2 找到python版本的template,可是没法用,不太会python
3 修改为php版本的,原先直接调用memcache的模块,可发现监控服务器没有安装
4 再修改为socket方式访问memcached获得数据,这样兼容性很高,不需要监控服务器安装memcached的扩展

项目参考的知识:

1 python的template。
注:可能会和它有冲突,因为模板里的xml节点hash没有修改,所以估计两者不能同时导入到cacti里使用,以后可能的话,也许可以再更新

2 Memcached INFO 的 socket代码
其实socket脚本也很简单,可是既然有现成的,也就借用了,不修改其函数,修改代码适应了它,比如使用全局变量
注:未照顾多组memcached的情况,未照顾其它端口的情况,后面会做升级,可以使用其它端口号

3 官方的脚本编写方式

文件下载:



安装指引:

1 导入template(Console -> Import Templates )
2 上传ss_get_memcached_stats.php到cacti的scripts目录
3 给设备添加一个图 (Create New Graphs)
4 选择你要监控的参数
点击在新窗口中浏览此图片
5 添加即可,十分钟后应该就可以有图像,比如:
点击在新窗口中浏览此图片
如图所示,使用了60M,但只有两个有效项目(注:可能有很多无效的数据)

问题反馈:

可以直接给我email, hqlulu#gmail.com
Tags: , , ,
什么是DHCP服务?

动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址给用户给内部网络管理员作为对所有计算机作中央管理的手段。

安装和配置DHCP

以ubuntu为例,其余linux版本类似。

1 安装dhcp服务软件
apt-get install dhcp3-server


2 修改服务配置

ubuntu下可以指定只监听哪个网卡:

vi /etc/default/dhcp3-server
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"


3 编辑主配置文件:

root@aslibra:~# cat /etc/dhcp3/dhcpd.conf
ddns-update-style none;

log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.253;
        option domain-name-servers 192.168.1.1, 8.8.8.8;
        option routers 192.168.1.1;
        option broadcast-address 192.168.1.255;
        default-lease-time 3600;
        max-lease-time 36000;
}


4 启动服务

/etc/init.d/dhcp3-server start


检查DHCP客户端都有哪些

你可以检查 /var/lib/dhcp3/dhcpd.leases 文件,知道当前的客户端,可这样不方便。
我用PHP写了一个脚本,方便查看客户端列表,大家可以参考:

源代码 source code - 演示地址 demo

参考阅读

1 http://baike.baidu.com/view/7992.htm
2 dhcpd.conf MAN配置手册
3 英文参考 http://www.novell.com/documentation/suse91/suselinux-adminguide/html/ch14s10.html
Tags: , ,
在PHP中,我习惯转换xml为数组,在android里面,我也喜欢这样,可以分配到map类型。
先看看示例数据:

<?xml version="1.0" encoding="UTF-8"?>
<list>
  <site id="65" url="http://www.aslibra.com" >阿权的书房</site>
  <site id="5" url="http://www.google.com" >谷歌</site>
</list>


我们可以用一个Map类型的变量保存最后的结果:

Map<Integer,Map<String,String>> sites = new HashMap<Integer,Map<String,String>>();

try{
  String myurl = "http://www.aslibra.com/teach/android/sites.xml";
  URL url = new URL(myurl);
  HttpURLConnection conn;
  conn = (HttpURLConnection) url.openConnection();
  conn.setDoInput(true);
  conn.connect();
  InputStream is = conn.getInputStream();
  DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
  DocumentBuilder builder = factory.newDocumentBuilder();
  Document doc = builder.parse(is);
  
  NodeList nl = doc.getElementsByTagName("site");
  int sites_number = nl.getLength();
  
  for (int i=0; i<sites_number; i++){
    Node mysite = doc.getElementsByTagName("site").item(i);
    Map<String,String> sitesChild = new HashMap<String,String>();
    sitesChild.put("siteName", mysite.getFirstChild().getNodeValue());
    for(int j=0;j<mysite.getAttributes().getLength();j++){
      sitesChild.put( mysite.getAttributes().item(j).getNodeName(),
          mysite.getAttributes().item(j).getNodeValue() );
    }
    sites.put(i, sitesChild);
  }

}catch(Exception e){
  //Log.e(tag, e.toString() );
}
Log.d(tag, "size:"+sites.size() );


简单的分析一下:

取得xml里site的所有节点 doc.getElementsByTagName("site")
取得某个子节点 doc.getElementsByTagName("site").item(i)
取得节点包含的字符串 mysite.getFirstChild().getNodeValue()
取得属性值 mysite.getAttributes().item(j).getNodeName()
取得属性的值 mysite.getAttributes().item(j).getNodeValue()

这有点复杂,貌似我也不习惯,可记住之后,自己就知道怎么取xml值了,一般xml有如下类型

<A B="C">D</A>


根据A取得此小段,D是此段的getFirstChild().getNodeValue()
B是此段的getAttributes().item(j).getNodeName()
C是此段的getAttributes().item(j).getNodeValue()
当然,有多个,那就循环一下即可

最终得到类似php数组类型,可以自己遍历来用:

Map<Integer,Map<String,String>> sites = XXXX(前面的处理返回值);
int len = sites.size();
Map<String,String> row;
for(int i=0;i<len;i++){
  row = sites.get(i);
  //比如row.get("url")
}
Tags: , ,
分页: 4/53 第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐