Linux命令 tcpreplay - 將PCAP包重新發(fā)送,用于性能或者功能測(cè)試

2022-03-22 09:34 更新

tcpreplay

將PCAP包重新發(fā)送,用于性能或者功能測(cè)試

補(bǔ)充說(shuō)明

簡(jiǎn)單的說(shuō), tcpreplay 是一種pcap包的重放工具,它可以將用ethreal、wireshark工具抓下來(lái)的包原樣或經(jīng)過(guò)任意修改后重放回去。它允許你對(duì)報(bào)文做任意的修改(主要是指對(duì)2層、3層、4層報(bào)文頭),指定重放報(bào)文的速度等,這樣tcpreplay就可以用來(lái)復(fù)現(xiàn)抓包的情景以定位bug,以極快的速度重放從而實(shí)現(xiàn)壓力測(cè)試。

選項(xiàng)

-A "<args>" 在使用 tcpdump 風(fēng)格打印輸出信息時(shí),同時(shí)再調(diào)用tcpdump中的參數(shù), 默認(rèn)已經(jīng)帶有“-n,-l”,所以一般看到的都是ip地址,而沒(méi)有主機(jī)名的打印,注意這個(gè)是在tcpreplay使用了-v參數(shù)時(shí)才能使用,不帶-v不會(huì)報(bào)錯(cuò),但是沒(méi)有實(shí)際意義。格式:-vA “nnt”表示以tcpdump風(fēng)格輸出報(bào)文信息,并且不打印時(shí)間戳、主機(jī)名、端口服務(wù)名稱。注意不要使用-c參數(shù)來(lái)指定打印的數(shù)據(jù)報(bào)文的個(gè)數(shù),這樣發(fā)送出去的報(bào)文也會(huì)變少。
-c <cachefile> 雙網(wǎng)卡回放報(bào)文必選參數(shù),后面緊跟cache文件名,該文件為tcpprep根據(jù)對(duì)應(yīng)的pcap文件構(gòu)造出來(lái)。 
-D 把應(yīng)用層的數(shù)據(jù),使用dump mode寫入到指定文件中去,和-w、-W 參數(shù)一起使用。 
-e <ip1:ip2> 指定端點(diǎn)的ip,即把發(fā)送報(bào)文的和接收的報(bào)文的ip都修改稱對(duì)應(yīng)的參數(shù)值中指定的ip,但是這樣發(fā)送的出的報(bào)文不會(huì)區(qū)分client和server。。 
-f <configfile> 指定配置文件。
-F 在發(fā)送報(bào)文時(shí),自動(dòng)糾正錯(cuò)誤的校驗(yàn)和。對(duì)測(cè)試DUT的校驗(yàn)和檢驗(yàn)。
-h 顯示幫助文件。 
-i <nic> 雙網(wǎng)卡回放報(bào)文必選參數(shù),指定主接口。
-I <mac> 重寫主網(wǎng)卡發(fā)送出報(bào)文的目的MAC地址。 
-j <nic> 雙網(wǎng)卡回放報(bào)文必選參數(shù),指定從接口。
-J <mac> 重寫從網(wǎng)卡發(fā)送出報(bào)文的目的MAC地址。 
-k <mac> 重寫主網(wǎng)卡發(fā)送報(bào)文的源MAC地址。 
-K <mac> 重寫從網(wǎng)卡發(fā)送報(bào)文的源MAC地址。
-l <loop> 指定循環(huán)的次數(shù)。
-L <limit> 指定最大的發(fā)包數(shù)量??梢栽诖_認(rèn)連接的調(diào)試時(shí)使用。 
-m <multiple> 指定一個(gè)倍數(shù)值,就是必默認(rèn)發(fā)送速率要快多少倍的速率發(fā)送報(bào)文。 加大發(fā)送的速率后,對(duì)于DUT可能意味著有更多的并發(fā)連接和連接數(shù),特別是對(duì)于BT報(bào)文的重放, 因?yàn)檫B接的超時(shí)是固定的,如果速率增大的話, 留在session表中的連接數(shù)量增大,還可以通過(guò)修改連接的超時(shí)時(shí)間來(lái)達(dá)到該目的。
-M 表示不發(fā)送“火星”的ip報(bào)文,man文件中的定義是 0/8、172/8、 255/8。
-n 在使用-S參數(shù),不對(duì)混雜模式進(jìn)行偵聽(tīng)。
-N <CIDR1:CIDR2,...> 通過(guò)偽造的NAT,重寫IP地址。這個(gè)參數(shù)應(yīng)該有很重要的應(yīng)用,目前沒(méi)有測(cè)試使用。
-O 沒(méi)有測(cè)試使用。
-p <packetrate> 指定每秒發(fā)送報(bào)文的個(gè)數(shù),指定該參數(shù),其它速率相關(guān)的參數(shù)被忽略,最后的打印信息不會(huì)有速率和每秒發(fā)送報(bào)文的統(tǒng)計(jì)。
-P 表示在輸出信息中打印PID的信息,用于單用戶或單帳戶模式下暫停和重啟程序。
-r <rate> 指定發(fā)送的速率。目前-m/-r/-p這3個(gè)參數(shù)的相互關(guān)系。
-R 讓網(wǎng)卡極限速度發(fā)數(shù)據(jù)包。 
-t <mtu> 指定MTU,標(biāo)準(zhǔn)的10/100M網(wǎng)卡的默認(rèn)值是1500。 
-T Truncate packets > 截去報(bào)文中MTU大于標(biāo)準(zhǔn)值的部分再發(fā)送出去,默認(rèn)是不發(fā)送,skip掉。
-v 每發(fā)送一個(gè)報(bào)文都以 tcpdump 的風(fēng)格打印出對(duì)應(yīng)的信息。
-V 查看版本號(hào)。
-w <file> 將主網(wǎng)卡發(fā)送的報(bào)文寫入一個(gè)文件中,參數(shù)后緊跟文件名。

實(shí)例

**1、重放在客戶端 ftp 連接的報(bào)文 **

a、在客戶端使用 ethereal 抓包,存為 ftp.pcap 文件。

b、 將 ftp.pcap 文件進(jìn)行 tcpprep 操作,制作 cache 文件。

[root@A ~]# tcpprep -an client -i ftp.pcap -o ftp.cache –v 

c、 將 DUT 設(shè)備的兩個(gè)接口和 PC 的兩個(gè)接口使用網(wǎng)線連接,使用 tcpreplay 重 放報(bào)文。注意防火墻的配置為網(wǎng)橋(透明)模式。 

[root@A ~]# tcpreplay -c ftp.cache -i eth0 -j eth1 ftp.pcap -Rv 

-R 參數(shù)表示全速發(fā)送,-v 顯示打印信息。 

**2、重放在客戶端 BT 連接的報(bào)文 **

a、在實(shí)驗(yàn)室 BT 下載一些臺(tái)灣的娛樂(lè)節(jié)目和熱門的大片,使用 ethereal 抓包, 存為 bt.pcap 文件。注意 pcap 文件大小的控制,對(duì) pc 的內(nèi)存要求比較高,我保 存了一個(gè) 600 多 M 的 pcap 文件用了 40 多分鐘,大家有需要可以直接從實(shí)驗(yàn)室 copy。 

b、將 bt.pcap 文件進(jìn)行 tcpprep 操作,制作 cache 文件。

 [root@A ~]# tcpprep -an client -i bt.pcap -o bt.cache -C "100M BT Packet" –v

制作 cache 文件,在 cache 文件中寫入“100M BT Packet”的注釋。 

c、使用 tcpreplay 重放報(bào)文。 

[root@A ~]# tcpreplay -c bt.cache -i eth0 -j eth1 bt.pcap -vR 

**3、重放 tftp 服務(wù)器上抓到的報(bào)文 **

a、在 tftp 服務(wù)器上使用 ethereal 抓包,存為 tftp.pcap 文件。 

b、將 pcap 文件進(jìn)行 tcpprep 的操作,制作 cache 文件。 

[root@A ~]# tcpprep -an server -i tftp.pcap -o tftp.cache –v 

注意:我在測(cè)試的時(shí)候犯了一個(gè)錯(cuò)誤,使用 DUT 的 tftp 升級(jí)來(lái)做實(shí)驗(yàn),同時(shí)穿 過(guò) DUT 重放報(bào)文,結(jié)果在網(wǎng)卡發(fā)送報(bào)文的后,DUT 的 mac 地址做了的回應(yīng),導(dǎo)致 交互過(guò)程沒(méi)有穿過(guò) DUT,這個(gè)問(wèn)題比較搞笑,上午弄了半天才發(fā)現(xiàn)原因,開(kāi)始還 以為 udp 的連接不能重放。 

c、使用 tcpreplay 重放報(bào)文。 

[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcapv


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)