在採用tcpreplay對包實施回放前,須要對包執行預處理,tcpprep就是完成這個任務的。
tcpprep要作的處理就是生成一個cache文件,根據tcpprep wiki的介紹http://tcpreplay.synfin.net/wiki/tcpprep,
其做用是將數據包兩部分,通俗點講就是區分下數據包中的服務端和客戶端。當tcpreplay採用多網卡進行發送時,也能夠採用tcpprep對包進行處理,
以決定回放包時,數據包走那一塊網卡。同時,預處理過的數據包在進行發送時,採用tcpprep處理事後,能夠以更高的速度回放。linux
這裏主要介紹下回放IPv6數據包時,如何區分實施數據包的tcpprep工做。基本的tcpprep這部分就不具體介紹了。
經過tcpprep的wiki瞭解到,目前採用tcpprep進行包處理的模式有8種,包括Auto/Bridge、Auto/Router、Auto/Client、Auto/Server、IPv4/v6 matching CIDR、IPv4/v6 matching Regex、TCP/UDP Port、MAC address。正則表達式
依照wiki上的文檔介紹,目前新版本的tcpprep 3.4.2以上才支持IPv6數據包的處理。而且,auto模式(Bridge、Router、Client、Server)還不可以支持IPv6處理。
按照該說明,就依次驗證測試下在對IPv6數據包下的處理過程。tcp
一、IPv4/v6 matching CIDR
經過CIDR(無類別域間路由)的方式,經過手工的方式對數據包中的ip地址進行劃分。
只要IPv6的CIDR書寫的沒有問題,tcppre能夠按照設定好的路由規則進行數據包分類。
對於IPv6,其CIDR與IPv4比較類似:
好比:tcpprep --cidr=2001:da8:215:833:bce9:8592:cb2f:56be/128 --pcap=pure6-1.pcap --cachefile=pure6-1.cache
數據包就可以以這個IP爲標示分紅兩部分了。
CIDR的IPv6規則條數仍是能夠有多條的,好比:
tcpprep --cidr=2001:da8:215:833:bce9:8592:cb2f:56be/128 --pcap=pure6-1.pcap --cachefile=pure6-1.cache測試
二、IPv4/v6 matching Regex
經過IPv6的地址的正則表達式將須要實施IP分類的地址,以正則表達式進行區分。不過在這裏,正則表達式只能夠有一條。.net
tcpprep --regex="(2001:da8:215:833:bce9:8592)\:*" --pcap=pure6-1.pcap --cachefile=pure6-1.cache
將以2001:da8:215:833:bce9:8592開頭的IP地址做爲一類。這裏只是比較簡單的IP分類,能夠按照本身的須要斟酌下正則表達式了。ip
三、TCP/UDP Port
這裏依據的是IP層以上的部分了。只要可以正常解析數據包就能夠。ci
tcpprep --port --pcap=pure6-1.pcap --cachefile=pure6-1.cache
依照端口劃分的依據是一些經常使用的服務端口是肯定的,好比經常使用的80端口,443端口。1024一下的端口均可以認爲是服務端口。依據端口特徵就能夠區分服務端和客戶端了。
在linux上,能夠參考下/etc/services中服務端口一些介紹。路由
四、MAC address
依照MAC的地址進行數據包的分類。由於這是鏈路層的,與IP層的關係就比較小了,IPv4與IPv6在這種方式下,也就沒有什麼分別了。
這裏示例一個簡單的小例子:
tcpprep --mac=c4:ca:d9:a1:22:1f --pcap=pure6-1.pcap --cachefile=pure6-1.cache
這樣就能夠依照MAC地址的不一樣,實施數據包回放時的分類了。這裏的MAC地址能夠指定多個,多個之間以逗號分類就行。文檔
總結下,對與IPv6數據包進行數據包預處理,自動模式是不可以用了。不過能夠採用4中方式進行服務、客戶端的區分。
具體採用哪種處理方式,能夠依據回放包的特徵來選擇。從而爲tcpreplay的實施作好前期的準備。get