在线测试tcpcopy新架构使用方法

新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

    新旧架构详细比较:

    http://blog.csdn.net/wangbin579/article/details/8949315

    

    代码下载地址:

    git clone http://github.com/wangbin579/tcpcopy

    configure:

    ./configure --enable-advanced --enable-combined --enable-pcap

    运行方法参考下面详细例子:

    

    这是一个内网的应用例子,我们的目的是复制下图中adserver应用服务器的请求到测试系统中去。

    

    在线和测试

    在线adserver有2台,重要供nginx调用,所以客户端IP地址来自于nginx地点呆板的IP地址,均为统一网段的IP地址。

    我们假设在线adserver呆板为10.100.10.1,10.100.10.2,nginx地点的呆板ip地址为:10.100.10.11,10.100.10.12,10.100.10.13,

    测试服务器有10.100.10.31,10.100.10.32

    其中,10.100.10.31运行着相似在线adserver的应用,端口为11511,而在线应用端口是11311

    我们在10.100.10.31上面添加如下路由:

    route add -host 10.100.10.11 gw 10.100.10.32

    route add -host 10.100.10.12 gw 10.100.10.32

    route add -host 10.100.10.13 gw 10.100.10.32

    这里的意思就是说,在测试服务器10.100.10.31返回给客户端10.100.10.11~13的响应走默认网关10.100.10.32,但10.100.10.32呆板其实并没有开启路由模式,所以这些响应包到了10.100.10.32呆板后,会在ip层被drop掉,留给我们的机会就是可以在10.100.10.32的数据链路层抓到这些响应包。

    我们在10.100.10.32呆板上面运行intercept,用来捕获响应包,命令如下:

    configure选项:

    ./configure --enable-advanced --enable-combined --enable-pcap

    (enable-advanced代表采用新架构,enable-combined合并响应包,-enable-pcap代表pcap抓包,如果libpcap库为1.0.0以下版本,则最好升级到1.0.0以上版本)

    执行intercept命令(须要root权限):

    ./intercept -i eth0 -F 'tcp and src port 11511' -d

    如果测试端口和在线端口一样的话(11311),须要进一步过滤

    ./intercept -i eth0 -F 'tcp and src host 10.100.10.31 and src port 11311' -d

    

    我们在在线呆板上面运行tcpcopy(root权限):

     configure选项:

         ./configure --enable-advanced --enable-combined --enable-pcap

         

         ./tcpcopy -x 11311-10.100.10.31:11511 -s 10.100.10.32 -i eth0 -d

         这里面采用pcap抓包,因为11311和11511端口不同,就不须要设置filter了,tcpcopy自动就结构有效的filter。

         

         这里tcpcopy的含义是复制在线11311端口的数据包到10.100.10.31上面的11511端口中去,-s指定运行intercept地点呆板的ip地址,-i指定从eth0接受请求数据包。

         如果在线应用端口和测试应用端口一样,那么命令应当这样:

            在线呆板10.100.10.1

            ./tcpcopy -x 10.100.10.1:11311-10.100.10.31:11311 -s 10.100.10.32 -i eth0 -d    

    每日一道理
自己把自己说服了,是一种理智的胜利;自己被自己感动了,是一种心灵的升华;自己把自己征服了,是一种人生的成功。

           在线呆板10.100.10.2

           ./tcpcopy -x 10.100.10.2:11311-10.100.10.31:11311 -s 10.100.10.32 -i eth0 -d    

        或者进一步设置filter

          在线呆板10.100.10.1

          ./tcpcopy -x 11311-10.100.10.31:11311 -F 'tcp and dst port 11311 and dst host 10.100.10.1' -s 10.100.10.32 -i eth0 -d    

          在线呆板10.100.10.2

          ./tcpcopy -x 11311-10.100.10.31:11311 -F 'tcp and dst port 11311 and dst host 10.100.10.2' -s 10.100.10.32 -i eth0 -d    

    这样请求就过去了,测试结果如下:

        

        [root@hz12-26 logs]# grep 'Thu 10:30' access_0516_10.log -c       

        99415

        [root@hz12-25 logs]# grep 'Thu 10:30' access_0516_10.log -c  

        99414

        [root@bgp176-148 logs]# grep 'Thu 10:30' access_0516_10.log -c

        198693

        

        10.100.10.1呆板上面的error_tcpcopy.log:

        2013/05/16 14:05:06 +553 [notice] active:110,rel reqs:29116,obs del:16468

        2013/05/16 14:05:06 +553 [notice] conns:29121,resp packs:23787879,c-resp packs:23697217

        2013/05/16 14:05:06 +553 [notice] send Packets:44041861,send content packets:20270532

        2013/05/16 14:05:06 +553 [notice] reconnect for closed :0,for no syn:3511

        2013/05/16 14:05:06 +553 [notice] retransmit:24

        2013/05/16 14:05:06 +553 [notice] successful retransmit:24

        2013/05/16 14:05:06 +553 [notice] syn cnt:25715,all clt packs:32573317,clt cont:20297550

        2013/05/16 14:05:06 +553 [notice] total captured pakcets:32573317

        

        从日志文件来看,从pcap接口抓的包都是有用的数据包(total captured pakcets==all clt packs),并没有抓到其它应用的数据包,从send content packets和clt cont的数值比拟,也可以看出绝大部分请求都过去了。

    最后,须要注意新架构的多少细节:

    1)发起请求的客户端地点呆板,不能同时运行相应的intercept,因为响应数据包路由返来后,这台呆板的tcp层会发送reset数据包给测试服务器,这样就会干扰测试的进行。

    2)当在线应用服务端口和测试端口一样时,如果采用pcap抓包,须要指明详细的过滤条件,否则pcap会抓到tcpcopy收回的数据包,致使抓包效率低下

    3)当采用pcap抓包时,最好设置详细的网卡(通过-i参数),这样可以减少pcap库(1.0.0以上版本)所占的buffer,而且性能会更高

    4)对于外网应用,由于客户端ip地址来自于世界各地,因此最好有两个网卡,一个外网网卡,一个内网网卡,让外网请求都路由到第二台测试服务器上面去

   比如转变测试服务器上面的默认路由:

   route del default gw 真正的网关ip地址

   route add default gw 第二台测试服务器的ip地址

    

    

文章结束给大家分享下程序员的一些笑话语录: 看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。

posted @ 2013-05-20 22:02  xinyuyuanm  阅读(423)  评论(0编辑  收藏  举报