hdqqq

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  35 随笔 :: 0 文章 :: 104 评论 :: 0 Trackbacks

2014年9月2日 #

自己组装路由器
    很长时间没有更新博客了。这段时间,很多智能化的新产品层出不穷,穿戴设
备,智能路由器啥的,可以说,移动互联的时代正在到来。所以,本着人生苦短,
及时折腾的原则,投身其中,也买了几块板子开始折腾。
先上张图:
个人mini服务器。
    目前,我们的长城越来越强大,google可以算是歇菜了,现在查资料,基本上
靠运气。写个博客、围脖啥的,稍微一不小心,就碰到敏感词,都没啥积极性了,
去年,弄了块pcduino的开发板,征用了儿子几块乐高积木,自己组了个服务器,
上面博客、文件共享、代码管理能带的都带上。空闲的时候,记记日记,贴贴照片,
,顺带文件备份啥的,自娱自乐。当然,光靠开发板自带的存储空间是不够的,需
要附加存储。考虑电源的功率问题和静音要求,弄了个ssd加移动硬盘盒。现在跑
得不错,已经运行了79天。板子买的较早,加上ssd的成本,在800 RMB 左右。
第二张图:
    去年开始,新的,基于ARM芯片可以玩的板子越来越多了。树莓就不说了,
cubieboard、swift board、beaglebone等,性能、接口等都比以前好。所以,又
入手了一块。 banana pi,1G内存,关键是带一个千兆网口,可以配合使用的系统
也多。继续折腾。再配块便宜点的64G ssd,总价格在500 RMB 左右。
    相对来说,用这个开发板组个无线路由器还是很简单的。找个支持的无线网卡,
NAT,配上相关的软件,很容易实现,网上也有教程。
    但是路由器,如果仅仅实现NAT转发上网,qos等功能,其实还算是很简单的。
相比软路由,上网行为管理,应用层协议分析,协议过滤等功能,还是缺很多的。
    我想要的功能,就是记录每个人上网,什么时候,都上了些什么网,做分析和
统计。这个功能,在目前市面上100多的路由器中,因为硬件成本的关系,基本上
都是没有的。尽管刷openwrt系统的路由,如果配上外接存储,能把日志存下来,
但因为内存有限,效果不好。
    但是,如果用linux做软路由,内存足够的情况下,可以通过iptable+squid的
方式实现。现在的开发板,内存可以到1G,芯片都是双核1.6G,性能已经足够强大。
所以,本次折腾的目标就是用开发板,实现透明代理,用以记录所有人员的上网日
志。
一个网口,配合LINUX虚拟网卡,也可以实现路由功能。
操作系统:
Lubuntu for arm,写到SD卡上启动。
接下来介绍步骤:
1、LINUX启动数据包转发。
2、设置网卡eth0的ip地址,网关等。
3、设置虚拟网卡,作为内网网段。
   ifconfig eh0:0 192.168.0.1 netmask 255.255.255.0
   虚拟网卡不用设网关。
4、安装和设置dnsmasq,启动dns cache和dhcp服务
5、安装squid3,设置访问规则和其他参数,作为透明代理使用
   http_port 192.168.0.1:3128 transparent
   考虑日志存在SD卡上较慢,可以把日志存在内存中。
6、设置iptabes,启动NAT和端口转发
   iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
   iptables -t nat -A PREROUTING -p tcp -s 192.168.0.0/24 --dport 80 -j
REDIRECT --to-ports 3128
其他说明:
    因为是一个网口做路由,所以需要一个HUB或交换机,连接上行网络和内网。
吞吐量测试:
使用一台NAS模拟外网机器,计算机模拟内网,都接千兆交换机。拷贝文件测试。
4G数据文件,路由工作在千兆双工模式
下行:
20MB/s 左右,系统负载峰值0.09左右
上行:
16.5MB/s 左右,系统负载峰值0.26左右。
日志分析:
    squid的日志,有现成工具进行分析。sarg,安装后,指定日志文件和输出路
径就可以了。
后记:
    因为功率和静音的需要,硬盘选了低端的64G SSD,190左右。对比前段时间比
较火的小米路由,缺双频的无线WIFI。但内存相对来说高一点,加上软件丰富,可
玩性更高一些。
posted @ 2014-09-02 20:37 hdqqq 阅读(3196) | 评论 (0)编辑 收藏

2012年4月7日 #

    UBUNTU系统缺省安装后,DNS查询很慢,网上大多数的解决办法是改DNS服务器和自己安装dns服务,像dnsmaq和bind服务。用fedora就没有这个问题。实际的解决办法是,修改 /etc/nsswitch.conf文件,把其中的 hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4  修改为 hosts: files dns

posted @ 2012-04-07 09:52 hdqqq 阅读(1176) | 评论 (0)编辑 收藏

2011年3月21日 #

     摘要: cygwin putty vim 编辑器  阅读全文
posted @ 2011-03-21 17:17 hdqqq 阅读(6388) | 评论 (0)编辑 收藏

2010年12月7日 #

VIM实现自动添加新行

         emacs在编辑代码时,有个功能,在输入{};时可以自动追加新的一行。减少敲回车的次数。将下面的代码加入VIM的配置文件后,可以在编辑c,cpp,h后缀的文件时,也同样有这个功能。


function Find_for()
    
if search('^\s*[f]or''b', line('.'))
        
return ""
    endif
 
    
if search('\"''b', line('.'))
        
if searchpair('\"''''\"''b''', line('.'))
            
return "\r"
        
else
            
return ""
        endif
    endif
 
    
if search('\''''b', line('.'))
        
if searchpair('\'''';''\''''b''',  line('.'))
            
return "\r"
        
else
            
return ""
        endif
    endif
 
    
return "\r"
endfunction
 
autocmd BufReadPost 
*.{c,cpp,h} inoremap <expr><buffer> {      '{'."\r"
autocmd BufReadPost 
*.{c,cpp,h} inoremap <expr><buffer> }      '}'."\r"
autocmd BufReadPost 
*.{c,cpp,h} inoremap <expr><buffer> ;  ';'.Find_for()

     缺点,对于“和‘的匹配没有重复,嵌套检测的功能。在某些情况下,会导致自动回车。
   
     如:
      std::cout << "hello world" << "second ;
     有兴趣的话,可以再改进一下。

posted @ 2010-12-07 17:59 hdqqq 阅读(1560) | 评论 (0)编辑 收藏

2010年9月25日 #

NERD_tree是vim的一个插件,支持树形显示目录和文件,此插件支持文件和隐藏文件过滤,可以设置一个文件过滤的表达式列表,来阻止NERD_tree显示这些文件。

但是在有些情况下,想要显示某些特定后缀的文件,如一个h头文件和cpp代码文件混合的目录,想只显示cpp文件,NERD_tree的过滤就显得有些不方便,因为原来实现的是排除过滤。

因此,对NERD_tree做了些改进,可以过滤显示某种类型的文件。

使用方法:

将光标移动到某个文件:

l   只显示此类后缀的文件
L   恢复显示所有文件

安装方法:

filter.vim      复制到vim插件目录的nerdtree_plugin 目录下
NERD_tree.vim   替换原来的plugin目录下的文件

下载地址:

http://www.cppblog.com/Files/hdqqq/nerd_tree_improve.zip


posted @ 2010-09-25 10:49 hdqqq 阅读(1363) | 评论 (0)编辑 收藏

2009年11月20日 #

  自己用模板实现的红黑树,算是对红黑树有了一个深入的了解.
  测试代码如下:
#include <iostream>
#include 
"rb_tree.h"

void test()
{
    rb_tree
<intint> ltree;
    std::cout 
<< "the tree is empty: " << (ltree.empty() ? "true" : "false"<< std::endl;

    
for(int i = 0; i < 15; i++) {
        ltree.insert(i, i);
    }
    ltree.show_tree();
}

int main(int argc, char* argv[])
{
    test();
    
return 0;
}
  红黑树的代码位置:
  http://www.cppblog.com/Files/hdqqq/rb_tree.zip
posted @ 2009-11-20 09:53 hdqqq 阅读(1177) | 评论 (0)编辑 收藏

2008年7月14日 #

     摘要: 界面开发 自定义 list control  阅读全文
posted @ 2008-07-14 12:05 hdqqq 阅读(3536) | 评论 (4)编辑 收藏

2008年6月28日 #

mysqldump 是mysql 用户导出数据的工具,可以把mysql的数据库导出成sql文件.也可以通过管道直接把数据重定向到mysql.

如在两台机器间导数据可以

mysqldump -h host1 --databases db | mysql -h host2

如果导出的数据库很大,就需要在mysqldump 上加 --quick 参数.因为mysqldump缺省的操作是先导出所有数据,然后写入管道,如果数据库很大的话,会因为内存不足,出错.

mysqldump还有其它参数,如果是在数据库之间追加数据, 则需要加 --skip-opt, --no-create-info 等参数,其中和--skip-opt和--quick同时使用,一定要把 --quick 放在 --skip-opt参数后面,否则,会被覆盖.

posted @ 2008-06-28 06:10 hdqqq 阅读(1342) | 评论 (0)编辑 收藏

2008年5月9日 #

     摘要: 一个简单的网络爬虫  阅读全文
posted @ 2008-05-09 14:09 hdqqq 阅读(21675) | 评论 (7)编辑 收藏

2008年4月3日 #

最近在网上爬东西,很多网页需要处理,自己写了个html 到 text 转换的小工具。

dos 命令行下运行,可同时处理多个

html2txt.exe  *.html



下载地址

http://www.cppblog.com/Files/hdqqq/html2txt.rar


posted @ 2008-04-03 11:24 hdqqq 阅读(1538) | 评论 (7)编辑 收藏

仅列出标题  下一页