tcpcopy1 0系列使用方法

2021-07-10 02:49:01 字數 2851 閱讀 9990

新舊架構詳細對比:

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

由於1.0系列已經不建議使用傳統iptables的方式來截獲響應包,因此只書寫route的使用方式

使用方式和其它應用類似,但需要注意的是:

1)一定要讓lvs監控程式能夠訪問lvs的real servers,其它響應路由到執行intercept的機器上面

2)輔助伺服器,壓力比較大的時候,interept可以採用多個例項甚至採用多台伺服器來承擔應答包的截獲工作

3)本文件只對1.0系列有效

4)文件更新時間為2014.8.2

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...