一.Tcpreplay功能簡(jiǎn)介 首先推薦一個(gè)網(wǎng)站:http://tcpreplay./ ,上面有Tcpreplay的安裝包和很多文檔,包括手冊(cè)、man頁和FAQ等。 Tcpreplay是一系列工具的總稱,包括tcpreplay、tcprewrite和tcpprep等工具,它可以用來在Unix系統(tǒng)或者linux系統(tǒng)上重放網(wǎng)絡(luò)包。這些包是由tcpdump、ethereal和wireshark等軟件抓取到的,即pcap格式的數(shù)據(jù)包。 安裝Tcpreplay包時(shí),默認(rèn)情況下是安裝了下面這些工具的, 用于準(zhǔn)備發(fā)包的cache, 重寫報(bào)文等: (1)tcpprep: 這個(gè)工具的作用就是劃分客戶端和服務(wù)器,區(qū)分pcap數(shù)據(jù)包的流向,即劃分那些包是client的,哪些包是server的,一會(huì)發(fā)包的時(shí)候client包從一個(gè)網(wǎng)卡發(fā),另一個(gè)server的包可能從另一個(gè)網(wǎng)卡發(fā)。 (2)tcprewrite:這個(gè)工具的作用就是來修改報(bào)文,主要修改2層,3層,4層報(bào)文頭,即MAC地址,IP地址和PORT地址。 (3)tcpreplay: 這是最終真正發(fā)包使用的工具,可以選擇主網(wǎng)卡、從網(wǎng)卡、發(fā)包速度等。 一.Tcpreplay安裝條件 Tcpreplay要實(shí)現(xiàn)它的功能要用到其它一些庫: 1)libpcap庫:由于tcpreplay在使用過程中主要依賴于libpcap庫,因此在安裝tcpreplay之前需要先安裝libpcap,否則在安裝tcpreplay的時(shí)候會(huì)提示你libpcap沒有安裝而安裝失敗。但如果希望libpcap能在linux上正常工作,則必須使內(nèi)核支持"packet"協(xié)議,也即在編譯內(nèi)核時(shí) 打開配置選項(xiàng) CONFIG_PACKET(選項(xiàng)缺省為打開)。 Libpcap可以從以下鏈接下載:http://www./ 可以用源碼安裝,比較簡(jiǎn)單。 2)tcpdump: 這個(gè)不是必須的,這個(gè)工具的主要作用就是來解碼數(shù)據(jù)包,在linux系統(tǒng)下查看pcap文件內(nèi)的數(shù)據(jù)包,也可以用它來進(jìn)行抓包。在安裝tcpreplay時(shí)可以選擇安裝它也可以不選擇安裝。(個(gè)人建議也一起安裝,以防止在使用tcpreplay時(shí)發(fā)生其他錯(cuò)誤。) 3)libnet庫。也不是必須的一個(gè)庫。Tcpreplay也可用它來發(fā)送數(shù)據(jù)包,但由于libnet自身的bug比較多且已不再有人維護(hù),Tcpreplay未來版本有可能取消對(duì)它的支持。(目前的版本還需要這個(gè)庫的支持,因此建議也安裝) 另外,你所使用的linux系統(tǒng)需要安裝了GCC編譯器,否則無法安裝所有工具。 二.Tcpreplay安裝過程 (1)首先來說明一下如何安裝libpcap庫(在安裝tcpreplay之前需要先安裝libpcap),安裝libpcap之前需要首先安裝m4、bison,flex,否則會(huì)出現(xiàn)錯(cuò)誤: 1)打開網(wǎng)址:www./ 下載 libpcap-1.1.1.tar.gz (512.0KB) 軟件包,通過命令 tar zxvf libpcap-1.1.1.tar.gz 解壓文件,并將其放入自定義的安裝目錄。 2)打開網(wǎng)址:flex./ 下載 flex-2.5.35.tar.gz (1.40MB) 軟件包,通過 tar zxvf flex-2.5.35.tar.gz 解壓文件,并將其放入上述自定義的安裝目錄中。 注意:如果沒有編譯安裝此文件,在編譯安裝libpcap時(shí),就會(huì)出現(xiàn) “configure: error: Your operating system's lex is insufficient to compile libpcap.”的錯(cuò)誤提示。 3)打開網(wǎng)址:ftp./gnu/bison/ 下載 bison-2.4.1.tar.gz (1.9MB) 軟件包,通過 tar zxvf bison-2.4.1.tar.gz 解壓文件,并將其放入上述自定義的安裝目錄中。 注意:如果沒有編譯安裝此文件,在編譯安裝libpcap時(shí),就會(huì)出現(xiàn) "configure: WARNING: don't have both flex and bison; reverting to lex/yacc checking for capable lex... insufficient" 的錯(cuò)誤提示。 4)打開網(wǎng)址:ftp./gnu/m4/ 下載 m4-1.4.13.tar.gz (1.2MB)軟件包,通過 tar zxvf m4-1.4.13.tar.gz 解壓文件,并將其放入上述自定義的安裝目錄中。 注意:如果沒有編譯安裝此文件,在編譯安裝bison-2.4.1時(shí),就會(huì)出現(xiàn) “configure: error: GNU M4 1.4 is required”的錯(cuò)誤提示。 然后,依次進(jìn)入m4-1.4.13,bison-2.4.1,flex-2.5.35,libpcap-1.1.1 并執(zhí)行以下命令: # ./configure # make # make install 命令完成后,libpcap才能正常使用。 (2)安裝完libpcap后就可以安裝tcpreplay了,從這個(gè)鏈接http://tcpreplay./下載 tcpreplay-3.4.4.tar.gz軟件包,通過 tar zxvf tcpreplay-3.4.4.tar.gz 解壓文件,并將其放入上述自定義的安裝目錄中。然后進(jìn)入tcpreplay-3.4.4,并執(zhí)行以下命令: # ./configure # make # make install 執(zhí)行完后,tcpreplay 就可以使用了,可以通過命令:tcpreplay –vesion來查看它的版本信息,tcpreplay –h來查看幫助內(nèi)容。 三.Tcpreplay使用的各種參數(shù) (1)tcpprep使用的參數(shù): Usage: # tcpprep [-a -n <mode> -N <type> | -c <cidr> | -p | -r <regex>] -o <out> -i <in> <args> -a Split traffic in Auto Mode 一般情況下都需要該參數(shù),表示按模式自動(dòng)分離的通訊流量生成cache文件,表示自動(dòng)分離采取的拓?fù)淠J?,來決定采取那種模式分離通訊流量的雙方。 -c CIDR1,CIDR2,... Split traffic in CIDR Mode 可選參數(shù),表示分離流量時(shí)采用CIDR(無類別域間路由選擇)模式。格式:tcpprep -ac -C <comment> Embed comment in tcpprep cache file 可選參數(shù),表示在cache文件中嵌入注釋內(nèi)容,可以用于注釋說明cache文件的內(nèi)容,注意使用時(shí)參數(shù)位置,不要放在最后,我測(cè)試時(shí)放在-o參數(shù)值的后面就報(bào)錯(cuò),放到-i參數(shù)之前就可以。生成cache文件后使用-P可以查看寫入的內(nèi)容。(這個(gè)參數(shù)一般用不著) -h Help 顯示幫助文件 -i <capfile> Input capture file to process 生成cache文件的必帶參數(shù),后面緊跟pcap文件名,表示這個(gè)pcap文件需要處理。 -m <minmask> Minimum mask length in Auto/Router mode 可選參數(shù),在選用router模式時(shí)使用,表示最小掩碼,默認(rèn)是30(2個(gè)有效ip地址)。 -M <maxmask> Maximum mask length in Auto/Router mode 可選參數(shù),在選用router模式時(shí)使用,表示最大掩碼,默認(rèn)是8(1600萬個(gè)ip地址)。 -n <auto mode> Use specified algorithm in Auto Mode 生成cache文件的必帶參數(shù),后面緊跟模式名稱,可選項(xiàng)有(bridge|router|client|server),目前的版本只支持這4種模式。模式的選擇很關(guān)鍵,例如在客戶端使用ftp軟件下載文件,那么你在客戶端抓到的報(bào)文生成的pcap文件,那么就選用client模式,在服務(wù)器端抓到的報(bào)文生成的pcap文件就選用server模式。只有模式選對(duì)了,才能正確的分離流量從正確的接口發(fā)出正確的報(bào)文。注意:Server端的報(bào)文由主網(wǎng)卡發(fā)送出去,Client端的報(bào)文由從網(wǎng)卡發(fā)送出去。怎么確定主從網(wǎng)卡由tcpreplay的命令(-i –I兩個(gè)參數(shù))來決定。 -o <outputfile> Output cache file name 生成cache文件的必帶參數(shù),后面緊跟cache文件名,表示這個(gè)輸出的cache文件以這個(gè)名字命名。 -p Split traffic based on destination port 可選參數(shù),基于目的端口來分離通訊流量,它區(qū)分的依據(jù)是認(rèn)為0-1023端口都是服務(wù)器的端發(fā)出的報(bào)文,其它的端口都是客戶端發(fā)出的報(bào)文,具體的端口對(duì)應(yīng)的/etc/services文件里的的內(nèi)容。使用的格式:-p /etc/services,可以根據(jù)自己的需要來制作一個(gè)文件也可以。 -r <regex> Split traffic in Regex Mode 可選參數(shù),表示使用Regex模式分離通訊流量,有點(diǎn)類似于CIDR模式,但是它匹配的是服務(wù)器的源IP。man文件提示不能和-a、-c參數(shù)一起使用。 -R <ratio> Specify a ratio to use in Auto Mode 可選參數(shù),一個(gè)比例值,這個(gè)比例值的意義是服務(wù)器端發(fā)起的連接數(shù)和客戶端發(fā)起的連接數(shù)的比例,這個(gè)值大于2的話就視為server端。這個(gè)英文原意我也不是太肯定,大家可以參考一下原文: The ratio of server connections to client connections necessary to be classified as a server in auto mode. A system is classified as a server if [# server connections] >= ([# client connections] * [ratio]). Default is: 2.0 -x <match> Only send the packets specified 重要的可選參數(shù),表示按照參數(shù)定義的需求來定義發(fā)送報(bào)文。后面還有具體的參數(shù),因?yàn)樵谖覀兊淖グ^程中,可能會(huì)由于網(wǎng)絡(luò)環(huán)境原因,抓到了許多我們不需要回放的報(bào)文,我們就可以根據(jù)這個(gè)參數(shù)決定我們需要回放哪些報(bào)文內(nèi)容。具體的參數(shù)意思如下: S:<CIDR1>,... - Src IP must match specified CIDR(s) 在CIDR模式下必須匹配源IP,格式:-xS:100.1.1.0/24, D:<CIDR1>,... - Dst IP must match specified CIDR(s) 在CIDR模式下必須匹配目的IP,格式同上。 B:<CIDR1>,... - Both src and dst addresses must match 必須同時(shí)匹配源和目的IP,格式同上。 E:<CIDR1>,... - Either src or dst address must match 匹配源或目的IP,格式同上。 Ex: -xP:1-5,9,15 would only send packets 1 through 5, 9 and 15. 根據(jù)參數(shù)后的參數(shù)值(報(bào)文編號(hào))發(fā)送指定的報(bào)文??梢栽?/SPAN>ethereal中確認(rèn)報(bào)文的編號(hào),然后把需要的報(bào)文發(fā)送??梢杂糜谂懦?/SPAN>ARP報(bào)文。 Tcpprep使用小結(jié):在使用過程中,很多參數(shù)都沒有用到,用的比較多的選項(xiàng)參數(shù)就-v、-P、-xB、-xP,一般都是client和server的模式,其它兩種模式?jīng)]有實(shí)驗(yàn)過,暫時(shí)還不知道怎么使用。 Tcpprep區(qū)分模式舉例: 1)tcpprep -e 00:00:00:00:00:05 --include=P:1,2,3 -i test.pcap -o test.cache &(mac模式include) 2)tcpprep -e 00:1e:c9:4c:03:0a --exclude=P:1,2-5 -i test.pcap -o test.cache &(mac模式exclude) 3)tcpprep -a server --exclude=P:1,2-5 -i test.pcap -o test.cache &(auto模式) 4)tcpprep --cidr=192.168.0.0/16,10.0.0.0/8 --include=P:1,2-5 -i test.pcap -o test.cache & (CIDR) 5)tcpprep -p --include=P:1,2-5 -i test.pcap -o test.cache & (port模式) (2)tcprewrite使用的參數(shù) -r rewrite TCP/UDP ports 重寫TCP/UDP端口 -e rewrite IP addresses to be between two endpoints 重寫兩個(gè)端點(diǎn)之間的IP地址 -b skpi rewriting broadcast/multicast IPv4/IPv6 addresses 跳過重寫廣播/多播IPv4/IPv6地址 --enet-dmac Override destination Ethernet MAC addresses 修改目的MAC地址 --enet-smac Override source Ethernet MAC addresses 修改源端MAC地址 -i Input pcap file to be processed 輸入被處理的pcap文件 -o out pcap file 輸出pcap文件 (這里這個(gè)生成的文件我還沒有弄清楚到底是什么作用) -c Split traffic via tcpprep cache file 發(fā)送的文件,即tcpprep處理生成的cache文件 -h help 顯示幫助 (tcprewrite 工具還沒有真正的使用測(cè)試過,因此具體功能還要驗(yàn)證) (3)tcpreplay使用的參數(shù): Usage: tcpreplay [args] <file(s)> -c <cachefile> Split traffic via cache file 雙網(wǎng)卡回放報(bào)文必選參數(shù),后面緊跟cache文件名,該文件為tcpprep根據(jù)對(duì)應(yīng)的pcap文件構(gòu)造出來。 -F Fix IP, TCP, UDP and ICMP checksums 可選參數(shù),在發(fā)送報(bào)文時(shí),自動(dòng)糾正錯(cuò)誤的校驗(yàn)和。對(duì)測(cè)試DUT的校驗(yàn)和檢驗(yàn)還是有用的。 -i <nic> Primary interface to send traffic out of 雙網(wǎng)卡回放報(bào)文必選參數(shù),指定主接口。 -I <nic> Secondary interface to send traffic out of 雙網(wǎng)卡回放報(bào)文必選參數(shù),指定從接口。 -L <limit> Specify the maximum number of packets to send 可選參數(shù),指定最大的發(fā)包數(shù)量。可以在確認(rèn)連接的調(diào)試時(shí)使用。 -x <multiple> Set replay speed to given multiple 可選參數(shù),指定一個(gè)倍數(shù)值,就是必默認(rèn)發(fā)送速率要快多少倍的速率發(fā)送報(bào)文。加大發(fā)送的速率后,對(duì)于DUT可能意味著有更多的并發(fā)連接和連接數(shù),特別是對(duì)于BT報(bào)文的重放,因?yàn)檫B接的超時(shí)是固定的,如果速率增大的話,留在session表中的連接數(shù)量增大,還可以通過修改連接的超時(shí)時(shí)間來達(dá)到該目的。 -p <packetrate> Set replay speed to given rate (packets/sec) 可選參數(shù),指定每秒發(fā)送報(bào)文的個(gè)數(shù),指定該參數(shù),其它速率相關(guān)的參數(shù)被忽略,最后的打印信息不會(huì)有速率和每秒發(fā)送報(bào)文的統(tǒng)計(jì)。 這是是主要的一些參數(shù),從網(wǎng)上查找的一些資料跟具體的tcpreplay中的參數(shù)有很大出入,因此建議想要使用其他參數(shù)時(shí),使用命令:# tcpreplay –h 查看幫助。 四.Tcpreplay使用舉例: 試驗(yàn)過程:從客戶端上抓取的訪問butterfly的原始包,tcp.pcap,通過TCPreplay回方后,在交換機(jī)上抓取的包result.pcap,可以看出,兩個(gè)文件中的包順序完全相同。 配置實(shí)例: 如圖: 將DUT設(shè)備的兩個(gè)接口和PC的兩個(gè)接口使用網(wǎng)線連接,使用tcpreplay重放報(bào)文。注意防火墻的配置為網(wǎng)橋(透明)模式。PC機(jī)的一個(gè)網(wǎng)卡連接DUT的端口1,另一個(gè)網(wǎng)卡連接DUT的端口2,DUT內(nèi)的MAC地址設(shè)為靜態(tài)映射。 1) 在客戶端利用Ethreal抓取客戶端訪問butterfly的TCP包,目的IP地址為:10.1.145.249,本機(jī)地址為:10.1.145.96; 2) 將抓取的包文件存為:tcp.pcap,然后拷貝到linux系統(tǒng)中,放到你安裝tcpreplay目錄中。 3) 使用tcpprep區(qū)分client和server端,生成cache文件。 # tcpprep –a client –i tcp.pcap –o tcp.cache (這里采用自動(dòng)客戶端模式區(qū)分) 4) 使用tcpreplay重放報(bào)文 #tcpreplay –p 1000 –c tcp.cache –i eth0 –I eth1 tcp.pcap 結(jié)論:在慢速重放包時(shí),可以按照原有報(bào)文的交互順序 通過被測(cè)設(shè)備。即完全模擬了客戶端和服務(wù)器的交互過程。 該軟件默認(rèn)是線速發(fā)包,試驗(yàn)發(fā)現(xiàn)會(huì)有錯(cuò)誤的包和亂序的包。配置為1000個(gè)包/s時(shí),不會(huì)失序。 推測(cè)失序原因:在高速發(fā)包時(shí),特別依賴于網(wǎng)卡,只要網(wǎng)卡有抖動(dòng),可能會(huì)導(dǎo)致client端和服務(wù)器端發(fā)送的包在通過DUT時(shí),排序有問題。 安裝tcpreplay需要的所有安裝包文件,我已經(jīng)上傳到//pmd-3/測(cè)試部/tools目錄下。如果大家在使用中發(fā)現(xiàn)什么問題歡迎互相交流。 使用經(jīng)驗(yàn)總結(jié): 如果不對(duì)包文件進(jìn)行改寫,則重發(fā)包流程為: 1. 先對(duì)包進(jìn)行區(qū)分客戶端和服務(wù)器端: tcpprep -a client -i http. pcap -o http. cache 2. 重放包文件,命令為: tcpreplay –p 1 -c http.cache -i eth0 -I eth1 http.pcap 如果對(duì)包文件進(jìn)行改寫,則重發(fā)包文件流程為: 1. 先對(duì)包進(jìn)行區(qū)分客戶端和服務(wù)器端: tcpprep -a client -i http. pcap -o http. Cache 2. 對(duì)包文件進(jìn)行改寫: tcprewrite -e 192.85.1.2:192.85.2.2 --enet-dmac=00:15:17:2b:ca:14,00:15:17:2b:ca:15 --enet-smac=00:10:f3:19:79:86,00:10:f3:19:79:87 -c test.cache -i test.tcpdump -o 1.pcap 3. 重放包文件: tcpreplay -i eth0 -I eth1 -l 1000 -t -c /dev/shm/test.cache /dev/shm/1.pcap |
|