

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”以獲取更多詳細信息