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