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

2022-03-22 09:34 更新

tcpreplay

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

補(bǔ)充說明

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

選項

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

實例

**1、重放在客戶端 ftp 連接的報文 **

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è)備的兩個接口和 PC 的兩個接口使用網(wǎng)線連接,使用 tcpreplay 重 放報文。注意防火墻的配置為網(wǎng)橋(透明)模式。 

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

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

**2、重放在客戶端 BT 連接的報文 **

a、在實驗室 BT 下載一些臺灣的娛樂節(jié)目和熱門的大片,使用 ethereal 抓包, 存為 bt.pcap 文件。注意 pcap 文件大小的控制,對 pc 的內(nèi)存要求比較高,我保 存了一個 600 多 M 的 pcap 文件用了 40 多分鐘,大家有需要可以直接從實驗室 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 重放報文。 

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

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

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

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

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

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

c、使用 tcpreplay 重放報文。 

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


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號