tcpreplay

將保存在 PCAP 文件包重新發送,用於性能或者功能測試

補充說明

tcpreplay 用於重放保存在 pcap 文件中的網絡流量,它支持按照捕獲 pcap 文件時數據包的速度、或者指定速度去重放網絡流量,只要在硬件承受的範圍內即可。

它可以根據需要,使流量可以在兩個網卡直接拆分、寫入文件、進行篩選、以各種方式進行編輯,從而爲測試防火牆、NIDS和其他網絡設備提供了方法。

命令參數

-d number, --dbug=number

啓用調試輸出。此選項最多可出現1次。此選項將整數作爲參數。 number的值被限制爲:在0到5的範圍內 此選項的默認輸入number爲:0 如果使用--enable-debug進行配置,則可以爲調試輸出指定詳細級別。數字越大,越詳細。

-q, --quiet

靜默模式。除了運行結束時的統計數據外,不打印任何內容

-T string, --timer=string

選擇數據包計時模式:select,ioport,gtod,nano。此選項最多可出現1次。此選項的默認string是:gtod 允許您選擇要使用的數據包計時方法:

nano - 使用 nanosleep() API

select - 使用 select() API

ioport - 寫入 i386 IO 端口 0x80

gtod [default] - 使用 gettimeofday() 循環

--maxsleep=number

設置數據包之間休眠不超過X毫秒。此選項將整數作爲參數。此選項的默認輸入number爲:0 設置tcpreplay在數據包之間休眠的最大毫秒數限制。有效防止數據包之間的長時間延遲,而不會影響大多數數據包。默認爲禁用。

-v, --verbose

通過tcpdump將解碼後的數據包打印到標準輸出。此選項最多可出現1次

-A string, --decode=string

傳遞給tcpdump解碼器的參數。此選項最多可出現1次。此選項必須與-v參數以前使用。 當啓用詳細模式(-v)時,您還可以指定一個或多個附加參數以傳遞給tcpdump來修改數據包的解碼方式。默認情況下,使用-n和-l。確保string用雙引號引起來,如:-A“-axxx”,否則會被tcpreplay作爲參數誤用。有關選項的完整列表,請參見tcpdump(1)手冊頁

-K, --preload-pcap

在發送之前將數據包預加載到RAM中。 此選項在開始發送之前將指定的pcap加載到RAM中,以便提高啓動性能,進而提高重放性能。預加載可以使用或不使用--loop。此選項還會控制每次迭代的流統計信息收集,這可以顯着減少內存使用量。基於所提供的選項和從第一循環迭代收集的統計來預測流(flow)統計。

-c string, --cachefile=string

通過tcpprep緩存(cache)文件拆分流量。此選項最多可出現1次。此選項必須與以下選項一起使用:intf2。此選項不得與以下選項一起使用:dualfile。 如果你有一個pcap文件,你想用它來通過一個設備(防火牆,路由器,IDS等)發送雙向流量,然後使用tcpprep你可以創建一個緩存文件,tcpreplay將用它來分割兩個網絡接口的流量。

-2, --dualfile

從 network tap 一次重放兩個文件。此選項最多可出現1次。此選項必須與以下選項一起使用:intf2。此選項不得與以下任項一起使用:cachefile。 如果您使用網絡分流器捕獲網絡流量,那麼您最終可以獲得兩個pcap文件 - 每個方向一個。此選項將同時重放這兩個文件,每個接口一個,並使用每個文件中的時間戳混合它們

-i string, --intf1=string

客戶端到 server/RX/primary(主要) 流量輸出接口。該選項最多可出現 1 次。 用於發送所有流量或通過 tcpprep 標記爲 "primary" 流量的所需網絡接口。primary 流量通常是客戶端到服務器或 khial 虛擬接口上的入站(RX)流量。

-I string, --intf2=string

服務器到 client/TX/secondary(輔助) 流量輸出接口。該選項最多可能出現 1 次。

用於發送通過 tcpprep 標記爲 “secondary” 流量的可選網絡接口。輔助(secondary)流量通常是服務器到客戶端或 khial 虛擬接口上的出站 (TX)。一般來說,只有將此選項與 --cachefile 一起使用纔有意義。

--listnics

列出所有可用的網卡並退出。

-l number, --loop=number

循環捕獲文件X次。此選項最多可出現1次。此選項將整數作爲輸入參數。 number的值被限制爲: 大於或等於0,此選項的默認輸入number爲:1

--loopdelay-ms=number

循環之間的延遲(以毫秒爲單位)。此選項必須與以下選項一起出現:--loop。此選項將整數作爲輸入參數。 number的值被限制爲:大於或等於0,此選項的默認輸入number爲:0

--pktlen

覆蓋snaplen並使用實際的數據包len。此選項最多可出現1次。 默認情況下,tcpreplay將根據pcap文件中存儲的“snaplen”的大小發送數據包,這通常是正確的做法。但是,偶爾,工具會存儲更多的字節。通過指定此選項,tcpreplay將忽略snaplen字段,而是嘗試根據原始數據包長度發送數據包。如果指定此選項,可能會發生錯誤。

-L number, --limit=number

限制要發送的數據包數量。此選項最多可出現1次。此選項將整數作爲輸如參數。 number的值被限制爲:大於或等於1,此選項的默認輸如number爲:-1 默認情況下,tcpreplay將發送所有數據包。或者手工指定要發送的最大數據包數。

--duration=number

限制發送的秒數。此選項最多可出現1次。此選項將整數作爲輸入參數。 number的值被限制爲:大於或等於1,此選項的默認number爲:-1 默認情況下,tcpreplay將發送所有數據包。或者手工指定要傳輸的最大秒數。

-x string, --multiplier=string

將重放速度修改爲指定倍數。此選項最多可出現1次。此選項不得與以下任何選項一起出現:pps,mbps,oneatatime,topspeed。 指定一個值以修改數據包重放速度。例子: 2.0:將以捕獲速度的兩倍重放流量 0.7:將以捕獲的速度的70%重放流量

-p string, --pps=string

以給定的packets/sec重放數據包。此選項最多可出現1次。此選項不得與以下任何選項一起出現:multiplier, mbps, oneatatime, topspeed.。 指定一個值以將數據包重放調整爲特定的packets/sec速率。例子: 200:將以每秒200個數據包重放流量 0.25:將以每分鐘15個數據包重放流量

-M string, --mbps=string

以給定的Mbps重放數據包。此選項最多可出現1次。此選項不得與以下任何選項一起出現:multiplier,pps,oneatatime,topspeed。 可爲tcpreplay設定其發送數據包的Mbps速率,該值可以指定爲浮點值

-t, --topspeed

儘可能快地重放數據包。此選項不得與以下任何選項一起出現: mbps, multiplier, pps, oneatatime.

-o, --oneatatime

根據用戶輸入重放每個數據包。此選項不得與以下任何選項一起出現:mbps,pps,multiplier,topspeed。 允許您一次單步執行一個或多個數據包。

--pps-multi=number

指定每個時間間隔要發送的數據包數。此選項必須與以下選項一起使用:pps。此選項將整數作爲輸入參數。 number的值被限制爲:大於或等於1,此選項的默認值爲:1 當嘗試以非常高的速率發送數據包時,每個數據包之間的時間可能很短,以至於不可能在所需的時間段內準確地休眠。此選項允許您一次發送多個數據包,從而允許更長的睡眠時間,這可以更準確地實現。

--unique-ip

修改每個循環迭代的IP地址以生成唯一流。此選項必須與以下選項一起使用:loop。 確保每個--loop迭代的IPv4和IPv6數據包都是唯一的。這是以不會改變數據包CRC的方式完成的,因此通常不會影響性能。此選項將顯着增加多次循環迭代生成的flow/sec。

--unique-ip-loops=string

分配新的唯一 IP 之前的 --loop 迭代次數。默認值爲 1。假定同時使用 --loop 和 --unique-ip。

--netmap

將數據包直接寫入啓用netmap的網絡適配器。 此功能將檢測Linux和BSD系統上支持netmap的網絡驅動程序。如果檢測到,則會在執行期間繞過網絡驅動程序,並直接寫入網絡緩衝區。這將允許您在商用網絡適配器上實現全線速率,類似於商用網絡流量生成器實現的速率。請注意,繞過網絡驅動程序將中斷通過測試接口連接的其他應用程序。

還可以通過將接口指定爲netmap:<intf>vale:<intf> 來啓用此功能。例如,netmap:eth0 指定接口 eth0 上的網絡映射。

--nm-delay=number

Netmap啓動延遲。此選項將整數作爲參數。此選項的默認輸入爲:10 加載netmap後延遲的秒數。在netmap傳輸之前確保接口完全開啓工作。需要netmap選項。默認值爲10秒。

--no-flow-stats

阻止打印和跟蹤流量,速率和到期

禁止收集和打印流量統計信息。 不使用--preload-pcap選項時,此選項可以提高性能,否則它的唯一功能是禁止打印。

流功能將跟蹤和打印正在發送的流的統計信息。 簡單來講,一個流是由5元組進行唯一區分的,即源IP、目的IP、源端口、目的端口和協議。 如果指定了--loop,則從一次迭代到下一次迭代的流將不是唯一的,除非數據包被更改。 使用--unique-ip或tcpreplay-edit在迭代之間更改數據包。

--flow-expiry=number

流被視爲過期前的非活動秒數。此選項不得與以下選項一起使用:no-flow-stats。此選項將整數作爲輸入參數。 number的值被限制爲:大於或等於0 此選項的默認值爲:0 此選項將根據流的idle time來跟蹤和報告流的過期。 pcap文件中的時間戳用於確定到期時間,而不是重放數據包的實際時間戳。例如,值30表示如果流上沒有流量持續30秒,則任何後續流量都將被視爲新流量,從而將增加流量和每秒流量(fps)統計量。

(例如,值 30 表示如果某個流在 30 秒內沒有看到任何流量,則任何後續流量都將被視爲新流,從而增加流量和每秒流量 (fps) 統計數據。)

此選項可用於優化流產品的流超時設置。當實際流量響應速度很慢時,將超時設置較低可能會導致流量被丟棄。將流量超時配置得過高可能會增加流量產品所需的資源。 請注意,在高於原始速度的重放時使用此選項可能會導致流量和fps計數膨脹。 默認值爲0(無到期),典型值爲30-120秒

-P, --pid

在啓動時打印tcpreplay的PID

--stats=number

每X秒打印統計信息,如果爲'0'則打印每個循環。此選項將整數作爲輸入參數。number 的值被限制爲:大於或等於 0

請注意,定時延遲是"best effort",發送數據包之間的長延遲可能會導致打印統計數據之間同樣長的延遲。

-V, --version

打印版本信息

-h, --less-help

打印簡單的幫助信息

-H, --help

打印幫助信息

-!, --more-help

打印詳細幫助信息

--save-opts [=cfgfile]

將選項狀態保存到cfgfile。默認值是下面的OPTION PRESETS章節中列出的最後一個配置文件。該命令在更新配置文件後退出。

--load-opts=cfgfile, --no-load-opts

從 cfg 文件加載選項。 no-load-opts 形式將禁止加載早期的 config/rc/ini 文件。--no-load-opts 提前處理,無序。

實例

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

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

b、 將 ftp.pcap 文件進行 tcpprep 操作,製作 cache 文件。

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

c、 將 DUT 設備的兩個接口和 PC 的兩個接口使用網線連接,使用 tcpreplay 重 放報文。注意防火牆的配置爲網橋(透明)模式。 

1[root@A ~]# tcpreplay -c ftp.cache -i eth0 -j eth1 ftp.pcap -R –v 

-R 參數表示全速發送,-v 顯示打印信息。 

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

a、在實驗室 BT 下載一些臺灣的娛樂節目和熱門的大片,使用 ethereal 抓包, 存爲 bt.pcap 文件。注意 pcap 文件大小的控制,對 pc 的內存要求比較高,我保 存了一個 600 多 M 的 pcap 文件用了 40 多分鐘,大家有需要可以直接從實驗室 copy。 

b、將 bt.pcap 文件進行 tcpprep 操作,製作 cache 文件。

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

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

c、使用 tcpreplay 重放報文。 

1[root@A ~]# tcpreplay -c bt.cache -i eth0 -j eth1 bt.pcap -v –R 

**3、重放 tftp 服務器上抓到的報文 **

a、在 tftp 服務器上使用 ethereal 抓包,存爲 tftp.pcap 文件。 

b、將 pcap 文件進行 tcpprep 的操作,製作 cache 文件。 

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

注意:我在測試的時候犯了一個錯誤,使用 DUT 的 tftp 升級來做實驗,同時穿 過 DUT 重放報文,結果在網卡發送報文的後,DUT 的 mac 地址做了的回應,導致 交互過程沒有穿過 DUT,這個問題比較搞笑,上午弄了半天才發現原因,開始還 以爲 udp 的連接不能重放。 

c、使用 tcpreplay 重放報文。 

1[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcap –v

4、重放pcap包,並指定速率和 loop 次數

1[root@A ~]# tcpreplay -i eth1 -M 10 -l 0 /home/demo/LSDK/LSDK.pcap

以速率10Mbps,0爲無限次循環進行重放 來源:https://github.com/jaywcjlove/linux-command

最後修改於: Wednesday, January 31, 2024

相關文章:

翻譯: