linux下網路發包工具,linux網路發包工具

來源:互聯網
上載者:User

linux下網路發包工具,linux網路發包工具
第1章.     說明

本文檔只適用於Tcpreplay3.x。

第2章.     Tcpreplay系列工具2.1. 概述

首先推薦一個網站:http://tcpreplay.synfin.net/,上面有Tcpreplay的安裝包和很多文檔,包括手冊、man頁和FAQ等。本文也是在參考這個網站的基礎上,通過一些實驗而得出的。

Tcpreplay是一系列工具的總稱,包括tcpreplay、tcprewrite和tcpprep等工具,這也是Tcpreplay的第一個字母大寫的原因。它用來在Unix系統或類Unix系統上重放網路包。這些包是由tcpdump、ethereal和wireshark等軟體抓取到的,即pcap格式的資料包。

正因為Tcpreplay有重放資料包的功能,所以它常被用來類比IDS攻擊等測試環境,被廣泛地用來測試防火牆和IDS工具的安全性。

2.2. 功能

安裝Tcpreplay包時,預設情況下是安裝了如表1所示的這些工具的。表 1還給出了各個工具的功能。

工具

功能

tcpreplay

重發pcap檔案中的資料包。

tcprewrite

改寫pcap資料包的2-4層的頭部資訊,即MAC地址、IP地址和PORT等。

tcpprep

區分pcap資料包的流向,即區分出用戶端和伺服器。

表 1 Tcpreplay系列工具的功能

2.3. 各工具的組合

從表1可以看出tcpreplay負責發送資料包,tcprewrite用來改寫資料包,tcpprep用來區分用戶端和伺服器。

1)        因為資料包中的內容都是雙向的(用戶端->伺服器,伺服器->用戶端),tcprewrite改寫資料,tcpreplay發送資料包時都應該區分方向(即區分用戶端和伺服器),因此這兩個工具一般是工作在tcpprep的基礎上的。

2)        tcpreplay可以發送任意pcap資料包,如果它想改變發送內容,就必須先用tcprewrite來改寫資料包,然後再發送改寫後的資料包。

2.4. 補充說明

Tcpreplay2.x中的tcpreplay將區分用戶端和伺服器、改寫資料包,發送資料包等功能都整合在一起。Tcpreplay3.x為了設計的簡單和使用的方便性而做了上述的改進。

第3章.     Tcpreplay的安裝、配置3.1. 相關的準備

Tcpreplay要實現它的功能要用到其它一些庫。

1)        libpcap庫。libpcap庫是推薦而且幾乎是必須的。Tcpreplay用它來發送資料包。請下載安裝libpcap0.7.2及以上版本。

2)        tcpdump。強烈推薦但不是必需的一個工具。Tcpreplay用它來解碼資料包,而且我們也可以用它的抓包功能來配合Tcpreplay的使用。當然,ethereal等軟體也可以實現這樣的功能,但tcpdump無疑是性價比最高的。

3)        libnet庫。不推薦的一個庫。Tcpreplay也可用它來發送資料包,但由於libnet自身的bug比較多且已不再有人維護,Tcpreplay未來版本有可能取消對它的支援。

更詳細的說明請參看http://tcpreplay.synfin.net/上的相關內容

3.2. 安裝步驟

首先,下載安裝包。Tcpreplay的源碼安裝包可以在http://tcpreplay.synfin.net/上下載到。

然後解壓安裝包。假設安裝包名字為tcpreplay-3.3.0.tar.gz,所在的目錄為/urs/local/src,所用的作業系統為redhat9,解壓安裝包可以直接輸入“tar –xzvf tcpreplay-3.3.0.tar.gz”。

進入解壓後的檔案夾。輸入指令“cd tcpreplay-3.3.0”。

遵循一般的軟體安裝步驟,如下所示。

$./configure

$make      

$make install

上面是最簡化的安裝。如果你還有其它安裝和配置需求,請查看安裝包中的INSTALL和README文檔。

第4章.     Tcpreplay的使用

本部分將結合一個執行個體來講解。先說明一下這個執行個體的運行環境和測試思路。本執行個體採用的是tcpreplay-3.3.0,運行在遠程linux伺服器上,用來發送http.pcap中的內容,同時在伺服器上我用tcpdump來抓取tcpreplay發出的包;在本地windows中我用wireshark(ethereal的增強版本)來觀察從伺服器上下載過來的各種資料包(即tcpdump抓取到的包、tcprewrite修改後的包,這些包是通過ftp或ssh下載過來的)。

4.1. 指令風格簡介

Tcpreplay系列工具的指令風格一致,都比較簡潔。你可以鍵入“man tcpreplay”或“tcpreplay -h”類似指令來查得相關協助。下面的講述以tcpreplay為例。

指令的選項分簡短的和完整兩種形式。如查詢版本的簡短選項是“-V”,完整形式則是“--version”。

有的選項帶有參數,而且兩種選項的輸入參數的形式不同。如以快取檔案選項為例,對於簡短選項,形式是“-c pathname”;對於完整選項,形式是“--cachefile=pathname”。pathname是快取檔案的路徑。

4.2. 區分用戶端和伺服器

輸入如下指令。

$tcpprep –-port –cachefile=cache_test.cache --pcap=http.pcap

tcpprep的詳細使用請參看相關手冊(如man手冊)。

--port是指tcpprep用port-split模式來區分用戶端和伺服器。在這種模式下,所有目的連接埠<1024的,將被視作用戶端->伺服器的包,否則視為伺服器->用戶端的包。tcppgrep有auto,cidr,regex,port和mac等多種模式,各種模式的詳細情況請查看相關手冊(如man手冊)。

--pcap=http.pcap是指tcpprep處理的是http.pcap這個檔案。

--cachefile=cache_test_cache是指tcpgrep處理後的資訊存放在cache_test_cahe這個檔案中。這個檔案在tcprewrite和tcpreplay中將用到。

整個指令的意思就是採用port-spllit模式來處理http.pcap檔案(區分http.pcap中的用戶端和伺服器),然後將處理結果存到cache_test_cache檔案中。

4.3. 改寫資料包的的內容

輸入如下指令。

$tcprewrite --endpoints=192.168.0.1:192.168.0.2 --cachefile=cache_test.cache \

--infile=http.pcap --outfile=http_rewrite.pcap

tcprewrite的詳細使用請參看相關手冊(如man手冊)。

--endpoints=192.168.0.1:192.168.0.2是指將用戶端ip修改為192.168.0.1,將伺服器ip修改為192.168.88.0.2,注意3.x版本的Tcpreplay自動地將IP的校正和修改好。用wireshark查看http_rewrite.pcap可以得到這個修改結果。

--cachefile=cache_test_cache是指tcprewrite用tcpprep 上步的處理結果——cache_test.cache來區分方向。

--infile=http.pcap是指要處理的pcap檔案是http.pcap。

--outfile=http_rewrite_pcap是指處理結果存在http_rewrite_pcap檔案中。這個檔案將是tcpreplay發送資料包的來源。

4.4. 發送資料包

輸入如下指令。

$tcpreplay –intf1=eth0 –intf2=eth0 –t –cachefile=cache_test.cache http_rewrite_pcap

tcpreplay的詳細使用請參看相關手冊(如man手冊)。

--intf1=eth0是指主介面是eth0,用戶端->伺服器的資料包通過這個介面發送。伺服器和用戶端的區分是從tcpprep的處理結果cache_test.cache中得到的。

--intf2=eth0是指從介面是eth0,伺服器->用戶端的資料包通過這個介面發送。

--cachefile=cache_test_cache是指tcpreplay用tcpprep 上步的處理結果——cache_test.cache來區分方向。

http_rewrite.pcap是指tcpreplay發送的是來自http_rewrite.pcap這個檔案中的資料包。

4.5. 合理使用tcpdump

我們可以合理地使用tcpdump來配合tcpreplay的使用。舉兩個例子。

4.5.1. 抓包

用tcpdump 抓取tcpreplay在eth0連接埠發出的tcp包,並要求這些包的目的地址是192.168.0.2,可輸入如下的指令。

tcpdump –i eth0 –w tcpdump.pcap –s 0 '(tcp and (dst host 192.168.0.2) ) '

-w tcpdump.pcap是指將抓取到的包存到tcpdump.pcap這個檔案中,-s 0是指儘可能大的抓取每個包(盡量不截斷),最後面的單引號裡的內容是過濾規則。

4.5.2. 選包

又如你只想把test.pcap檔案中連接埠號碼為80的tcp包(http包)提取出來,再轉交給tcpreplay去發送,可以這樣做。

$ tcpdump -r test.pcap -w http_only.pcap –s 0 tcp port 80

-r test.pcap是指從test.pcap中讀包。這個指令的意思是從test.pcap中讀包後,根據“tcp port 80”這個過濾規則篩選出滿足要求的包,將這些包存到http_only.pcap這個檔案中去。

此後我們就可以用tcpreplay來發送http_only.pcap中的http包了。

4.6. TCPReplay使用TCPReplay主要功能是將PCAP包重新發送,用於效能或者功能測試。但是在測試環境與原轉包系統結構一般是不同的。比如被測試機的二層MAC地址與抓包機器的MAC不同,所以被測試機在二層處理時發現目的MAC不是自己,就會把packet丟棄。協議棧把目的MAC與原生MAC匹配,才會將packet交給上層處理。為了實現測試,需要使用TCPReplay的兩個配套工具,TCPPrep和TCPRewrite。這兩個工具和TCPReplay的詳細用法可以通過MAN來查詢,這裡不再細講。此處通過一個經過測試的執行個體來介紹他們的用法。測試拓撲圖如所示
其中TCPReplay機器的配置為:
OS: Ubuntu9.04
核心版本:2.6.28
TCPReplay版本:3.3.2(不同版本命令可能稍有不同,具體請通過MAN查詢)
網卡:Intel e1000e 雙千兆
PCAP檔案:test.tcpdump

測試第一步:預先處理產生Cache,命令為
tcpprep -a client -i test.tcpdump -o test.cache

這條命令將PCAP檔案分成用戶端和服務端,預設為用戶端。發送時packet將分別從用戶端和服務端發出。

測試第二步:重寫IP地址和MAC地址,命令為:
tcprewrite -e 192.85.1.2:192.85.2.2 --enet-dmac=00:15:17:2b:ca:14,00:15:17:2b:ca:15 --enet-smac=00:10:f3:19:79:86,00:10:f3:19:79:87 -c test.cache -i test.tcpdump -o 1.pcap

這條命令將eth0設為服務端介面,eth1設為用戶端介面,重寫了IP和MAC,可通過wireshark等工具開啟1.pcap,查看修改是否成功。

測試第三步:重放packet,首先為了擷取更高的發送速度,可以把檔案放到/dev/shm目錄下,最高速度有1倍左右的加速。重放命令為:
tcpreplay -i eth0 -I eth1 -l 1000 -t -c /dev/shm/test.cache /dev/shm/1.pcap

這條命令將檔案以最高速率迴圈發送1000次。


上述步驟通過測試,保證能夠通過。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.