將PCAP包重新發送,用于性能或者功能測試
簡單的說, tcpreplay 是一種pcap包的重放工具,它可以將用ethreal、wireshark工具抓下來的包原樣或經過任意修改后重放回去。它允許你對報文做任意的修改(主要是指對2層、3層、4層報文頭),指定重放報文的速度等,這樣tcpreplay就可以用來復現抓包的情景以定位bug,以極快的速度重放從而實現壓力測試。
-A "<args>" 在使用 tcpdump 風格打印輸出信息時,同時再調用tcpdump中的參數, 默認已經帶有“-n,-l”,所以一般看到的都是ip地址,而沒有主機名的打印,注意這個是在tcpreplay使用了-v參數時才能使用,不帶-v不會報錯,但是沒有實際意義。格式:-vA “nnt”表示以tcpdump風格輸出報文信息,并且不打印時間戳、主機名、端口服務名稱。注意不要使用-c參數來指定打印的數據報文的個數,這樣發送出去的報文也會變少。
-c <cachefile> 雙網卡回放報文必選參數,后面緊跟cache文件名,該文件為tcpprep根據對應的pcap文件構造出來。
-D 把應用層的數據,使用dump mode寫入到指定文件中去,和-w、-W 參數一起使用。
-e <ip1:ip2> 指定端點的ip,即把發送報文的和接收的報文的ip都修改稱對應的參數值中指定的ip,但是這樣發送的出的報文不會區分client和server。。
-f <configfile> 指定配置文件。
-F 在發送報文時,自動糾正錯誤的校驗和。對測試DUT的校驗和檢驗。
-h 顯示幫助文件。
-i <nic> 雙網卡回放報文必選參數,指定主接口。
-I <mac> 重寫主網卡發送出報文的目的MAC地址。
-j <nic> 雙網卡回放報文必選參數,指定從接口。
-J <mac> 重寫從網卡發送出報文的目的MAC地址。
-k <mac> 重寫主網卡發送報文的源MAC地址。
-K <mac> 重寫從網卡發送報文的源MAC地址。
-l <loop> 指定循環的次數。
-L <limit> 指定最大的發包數量。可以在確認連接的調試時使用。
-m <multiple> 指定一個倍數值,就是必默認發送速率要快多少倍的速率發送報文。 加大發送的速率后,對于DUT可能意味著有更多的并發連接和連接數,特別是對于BT報文的重放, 因為連接的超時是固定的,如果速率增大的話, 留在session表中的連接數量增大,還可以通過修改連接的超時時間來達到該目的。
-M 表示不發送“火星”的ip報文,man文件中的定義是 0/8、172/8、 255/8。
-n 在使用-S參數,不對混雜模式進行偵聽。
-N <CIDR1:CIDR2,...> 通過偽造的NAT,重寫IP地址。這個參數應該有很重要的應用,目前沒有測試使用。
-O 沒有測試使用。
-p <packetrate> 指定每秒發送報文的個數,指定該參數,其它速率相關的參數被忽略,最后的打印信息不會有速率和每秒發送報文的統計。
-P 表示在輸出信息中打印PID的信息,用于單用戶或單帳戶模式下暫停和重啟程序。
-r <rate> 指定發送的速率。目前-m/-r/-p這3個參數的相互關系。
-R 讓網卡極限速度發數據包。
-t <mtu> 指定MTU,標準的10/100M網卡的默認值是1500。
-T Truncate packets > 截去報文中MTU大于標準值的部分再發送出去,默認是不發送,skip掉。
-v 每發送一個報文都以 tcpdump 的風格打印出對應的信息。
-V 查看版本號。
-w <file> 將主網卡發送的報文寫入一個文件中,參數后緊跟文件名。
**1、重放在客戶端 ftp 連接的報文?**
a、在客戶端使用 ethereal 抓包,存為 ftp.pcap 文件。
b、 將 ftp.pcap 文件進行 tcpprep 操作,制作 cache 文件。
[root@A ~]# tcpprep -an client -i ftp.pcap -o ftp.cache –v
c、 將 DUT 設備的兩個接口和 PC 的兩個接口使用網線連接,使用 tcpreplay 重 放報文。注意防火墻的配置為網橋(透明)模式。?
[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 文件。
[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 -v –R
**3、重放 tftp 服務器上抓到的報文?**
a、在 tftp 服務器上使用 ethereal 抓包,存為 tftp.pcap 文件。?
b、將 pcap 文件進行 tcpprep 的操作,制作 cache 文件。?
[root@A ~]# tcpprep -an server -i tftp.pcap -o tftp.cache –v
注意:我在測試的時候犯了一個錯誤,使用 DUT 的 tftp 升級來做實驗,同時穿 過 DUT 重放報文,結果在網卡發送報文的后,DUT 的 mac 地址做了的回應,導致 交互過程沒有穿過 DUT,這個問題比較搞笑,上午弄了半天才發現原因,開始還 以為 udp 的連接不能重放。?
c、使用 tcpreplay 重放報文。?
[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcap –v