http://blog.csdn.NET/wangbin579/article/details/8949315
tcpcopy运行需要intercept的支持,tcpcopy负责抓包和发包工作,而intercept负责截获应答包
tcpcopy代码下载地址:
Git clone http://github.com/session-replay-tools/tcpcopy
configure:
./configure (默认raw socket方式抓包)
或者
./configure --pcap-capture (pcap方式抓包,在某些场景下,丢包率会高于raw socket方式抓包,这时候需要类似pf_ring的支持)
对于intercept:
代码下载地址:
git clone http://github.com/session-replay-tools/intercept
configure方式:
./configure
运行方法参考下面具体例子(tcpcopy采用了configure来编译):
这是一个内网的应用例子,我们的目的是复制下图中adserver应用服务器的请求到测试系统中去。
这里tcpcopy的含义是复制在线11311端口的数据包到10.100.10.31上面的11511端口中去,-s指定运行intercept所在机器的ip地址。
3)对于外网应用,由于客户端ip地址来自于世界各地,路由策略如下:
a)用两个网卡,一个外网网卡,一个内网网卡,让外网请求都路由到第二台测试服务器上面去
比如改变测试服务器上面的默认路由:route add default gw 辅助服务器的ip地址
b)利用tcpcopy的-c参数,修改客户端源ip地址,这样就方便设置路由
比如:./tcpcopy -x 11311-10.100.10.31:11511 -s 10.100.10.32 -c 192.168.100.x
相应路由设置:
route add -net 192.168.100.0 netmask 255.255.255.0 gw 10.100.10.32
4)如果是在同一网段利用外网地址访问,在机器B上面设置去往机器A的响应,走机器C,那么设置默认外网网卡路由不会生效,需要显式指定,比如:
route add -host 机器A的外网ip地址 gw 机器C的外网ip地址
5)如果是内网应用,由于客户端ip地址少,建议采用如下:
6)如果tcpcopy遇到大量“unsend:too many packets”的报警,请采用raw socket方式来抓请求数据包
7)如果客户端来自于同一网段,那么响应包可能会直接通过mac地址返回给客户端,导致路由设置不起作用,响应包不会被intercept所截获,导致复制失败解决策略有两个:
1)检测路由命令是否有冲突,导致响应包直接返回给客户端
8)如果同时有内网访问和外网访问,应该分别针对外网应用和内网应用,设置相应路由
9)运行intercept的辅助服务器,为方便路由设置,最好要和测试服务器在同一个网段,而且不要设置ip_forward
10)本文档更新时间为2014.8.25