您的位置:首页 > 理论基础 > 计算机网络

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

2013-05-20 22:02 399 查看
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正

新旧架构详细比较:
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地址

文章结束给大家分享下程序员的一些笑话语录:

看新闻说中国输入法全球第一!领先了又如何?西方文字根本不需要输入法。一点可比性都没有。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: