新舊架構詳細對比:
tcpcopy執行需要intercept的支援,tcpcopy負責抓包和發包工作,而intercept負責截獲應答包
git clone
configure:
./configure (預設raw socket方式抓包)
或者./configure --pcap-capture (pcap方式抓包,在某些場景下,丟包率會高於raw socket方式抓包,這時候需要類似pf_ring的支援)
對於intercept:
git clone
configure方式:
./configure
執行方法參考下面具體例子(tcpcopy採用了configure來編譯):
這是乙個內網的應用例子,我們的目的是複製下圖中adserver應用伺服器的請求到測試系統中去。
測試伺服器有10.100.10.31,10.100.10.32(輔助伺服器)
我們在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,用來捕獲響應包,命令如下:
執行intercept命令(需要root許可權):
./intercept -i eth0 -f 'tcp and src port 11511' -d
./tcpcopy -x 11311-10.100.10.31:11511 -s 10.100.10.32 -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
最後,需要注意新架構的若干細節:
1)發起請求的客戶端所在機器,不能同時執行相應的intercept,因為響應資料報路由回來後,這台機器的tcp層會傳送reset資料報給測試伺服器,這樣就會干擾測試的進行。
3)對於外網應用,由於客戶端ip位址來自於世界各地,路由策略如下:
a)用兩個網絡卡,乙個外網網絡卡,乙個內網網絡卡,讓外網請求都路由到第二台測試伺服器上面去
比如改變測試伺服器上面的預設路由:
route del default gw 真正的閘道器ip位址
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 gw10.100.10.32
4)如果是在同一網段利用外網位址訪問,在機器b上面設定去往機器a的響應,走機器c,那麼設定缺省外網網絡卡路由不會生效,需要顯式指定,比如:
route add -host 機器a的外網ip位址 gw 機器c的外網ip位址
5)如果是內網應用,由於客戶端ip位址少,建議採用如下:
route add -host 內網客戶端ip位址 gw 輔助伺服器的ip位址
或者//如果客戶端ip位址來自於其它網段的話
route add -net ***.***.***.0 netmask 255.255.255.0 gw 輔助伺服器的ip位址
不要採用預設閘道器的方式
6)如果tcpcopy遇到大量「unsend:too many packets」的報警,請採用raw socket方式來抓請求資料報
7)如果客戶端來自於同一網段,那麼響應包可能會直接通過mac位址返回給客戶端,導致路由設定不起作用,響應包不會被intercept所截獲,導致複製失敗
解決策略有兩個:
1)檢測路由命令是否有衝突,導致響應包直接返回給客戶端
2)tcpcopy執行的時候通過-c引數來改變客戶端的ip位址為不同網段的ip位址,就可以解決此問題。
8)如果同時有內網訪問和外網訪問,應該分別針對外網應用和內網應用,設定相應路由
9)執行intercept的輔助伺服器,為方便路由設定,最好要和測試伺服器在同乙個網段,而且不要設定ip_forward
10)本文件更新時間為2014.8.25
tcpcopy1 0系列使用方法
新舊架構詳細對比 tcpcopy執行需要intercept的支援,tcpcopy負責抓包和發包工作,而intercept負責截獲應答包 git clone configure configure 預設raw socket方式抓包 或者.configure pcap capture pcap方式抓包,...
Linux系列 命令 vmstat 使用方法
r 表示執行佇列 就是說多少個進 的分配到cpu 我測試的伺服器目前cpu比較空閒,沒什麼程式在跑,當這個值超過了cpu數目,就會出現cpu瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,伺服器的狀態很危險。top的負載類似每秒的執行佇列。如果執行佇...
Git系列三之GitHub使用方法
github 是乙個面向開源及私有 軟體專案的託管平台,因為只支援 git 作為唯一的版本庫格式進行託管,故名 github。1 https方式 不需要認證 總用量 8drwxr xr x 3 root root 4096 5月 8 22 05 bastion of machine rw r r 1...