tcpcopy用法

目標:

將線上服務lighttpd(8000端口)的流量引流到線下測試機api

1、測試機:

tcpcopy-server,接收流量tcp

modprobe ip_queue
iptables -L
iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE
./intercept -d -l intercept.log
-d:後臺
-l:指定log

2、線上:

tcpcopy-client,複製流量測試

./tcpcopy -x 8000-10.46.43.14:8000 -d -n 1 -l tcpcopy.log
-d:後臺
-l:指定log
-n:流量複製的份數

3、關閉:

killall intercept
killall tcpcopy
iptables -F
注意:
當測試機打開
iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE
將沒法直接訪問測試機的該服務,只能經過日誌觀察
 
tcpcopy-0.9.10 tcpcopy.tar
 
 
抓包發現有意思的地方
A:發起請求的機器:cq02-map-wpng03.cq02
B:線上機器:cq01-map-lbsop-hbase00.cq01
C:測試機器:cq01-map-lbsop-hbase01.cq01
一:正常copy流量,三個機器和測試機的抓包圖
A機器:無和C交互。由於測試機器iptables -I OUTPUT -p tcp --sport 8000 -j QUEUE 把出的流量屏蔽了(放入queue,intercept去捕獲,發給B的tcpcopy進程)
 
B機器:有本身和C的交互,也有假A機器和測試機的交互(假裝的,不然本機怎麼會抓到來源和目的都不是本身的機器呢,說明確定實際是過了本機網卡,不過把協議頭裏的ip改了);每一個發給C的請求都有兩份,兩份的seq徹底同樣,可是全部包的ack不同(ack不同是由於ack須要響應C發的,在測試機發的seq上加1,不然若是照抄本身回覆給真A的,會露餡)
 
C機器:有假A發給個人包(假裝的,實際上是B機器發的),但沒有回覆出任何的包(由於iptables封了)。
 
二:去掉C機器iptables的封禁
A機器:有C機器發給A的第二次握手,和A發給C的復位包(第二次握手莫名奇妙,A並無發給C第一次握手)
B機器:有真A發給B的全部正常包;有假A發給C的第一次握手包。第二次握手沒有,由於剛纔C收到假A第一次握手,回第二次握手給真A(C沒法區分真假),真A莫名奇妙,把此次請求復位了。假A也就無法幹活了。還有假A發給C的復位確認包(133s後)
C機器:有假A發來的第一次握手,會給真A的第二次握手,真A發來的復位包,假A發來的復位響應包。
相關文章
相關標籤/搜索