引流测试-tcpcopy安装和使用
tcpcopy架构:
实验拓扑:
TCPCopy 是一种请求复制(复制基于 TCP 的 packets)工具 ,通过复制在线数据包,修改 TCP/IP 头部信息,发送给测试服务器,达到欺骗测试服务器的TCP 程序的目的,从而为欺骗上层应用打下坚实基础。
一、安装
online server安装Tcpcopy:
1. 下载Tcpcopy
git clone git://github.com/session-replay-tools/tcpcopy.git
2. 安装(需要root权限)
yum -y install gcc gcc-c++
yum install libpcap-devel
./configure --pcap-capture
make
make install
cd /usr/local/tcpcopy/sbin
3. tcpcopy可配置参数
编译参数:可以不设置,默认安装在/usr/local/tcpcopy/sbin
--offline 从pcap文件重放TCP流
--pcap-capture 在数据链路层抓包(默认在网络层)
--pcap-send 在数据链路层发包(默认在网络层)
--with-pfring=PATH 将路径设置为PF_RING库源
--set-protocol-module=PATH 设置tcpcopy为外部协议模块工作
--single 如果intercept和tcpcopy都设置为单机模式,只有一个tcpcopy和一个intercept一起工作,将会获得更好的性能
--with-debug 以debug模式编译tcpcopy(保存在日志文件中)
辅助服务器安装intercept:
1. 安装Intercept(需要root权限)
git clone git://github.com/session-replay-tools/intercept.git
yum -y install gcc gcc-c++
yum install libpcap-devel
./configure (可选择适当的配置参数)
make
make install
cd /usr/local/intercept/sbin
2. intercept的配置参数
--single intercept运行在单机情况下
--with-pfring=PATH 将路径设置为PF_RING库源
--with-debug 以debug模式编译intercept(保存在日志文件中)
二、配置环境
1、online server和test server开启一样的服务,这里开启了web服务
online服务端口为80,test server服务端口为3389
2、在test server配置路由,将test server的响应包发送到辅助服务器;
route add -host 10.0.4.172 netmask 255.255.255.255 gw 192.168.39.49
三、开启tcpcopy和intercept:
首先在辅助服务器上开始intercept:(intercept是tcpcopy服务的server端,)
语法:
./intercept -F <filter> -i <device,>
本测试环境执行命令:
intercept -i eth3 -F 'tcp and src port 3389' -d
intercept将捕获基于TCP应用的响应,该应用监听在设备的3389端口上
另外:默认监听端口36525,tcpcopy连接辅助服务器时使用
参数说明:
-i 指定捕获响应包的网卡
-F 过滤响应包内容
-d 执行demo
请注意:
过滤器格式与pcap过滤器相同;
辅助服务器要确保没有开启路由模式 cat /proc/sys/net/ipv4/ip_forward,为0表示没有开启。
一次性配置:echo "0">/proc/sys/net/ipv4/ip_forward
永久性配置:/etc/sysctl.conf里面的net.ipv4.ip_forward=1注释,sysctl -p 立即生效
在online server端开启tcpcopy:
语法:
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server,> [-c <ip range,>]
本测试环境执行命令:
tcpcopy -x 80-192.168.39.47:3389 -s 192.168.39.49
含义:复制在线服务器80端口的数据包到192.168.39.47上面的3389端口,-s 指定运行intercept服务的机器地址;
“-c”参数,可以将客户端ip地址伪装成指定的ip,虽然是可选的,但在此设置以便简化路由命令
本测试中未使用此参数
三、测试效果:
10.0.4.174访问online server 192.168.39.48 的80端口;
在test server抓包可以看到复制过来的请求包;
四、注意事项
1)只能在linux上测试(kernal 2.6 or above)
2)tcpcopy可能丢包,因此丢失请求
3)root权限或socket权限是必须的(例如 setcap CAP_NET_RAW = ep tcpcopy)
4)TCPCopy现在只支持客户端启动的连接
5)TCPCopy不支持使用SSL / TLS的服务器应用程序的重放
6)对于MySQL会话重放,请参考 https://github.com/session-replay-tools
7)不应该在辅助服务器上设置ip转发
8)请执行“./tcpcopy -h”或“./intercept -h”以获取更多详细信息