1. 程式人生 > >包嗅探和包回放 —tcpdump、tcpreplay--重放攻擊

包嗅探和包回放 —tcpdump、tcpreplay--重放攻擊

攻擊方式:tcpdump 進行嗅探,獲取報文訊息;然後用tcpreplay回放攻擊

arp欺騙可以使用 arpspoof

kali linux有這三個工具

 

轉載地址https://www.cnblogs.com/jiayy/p/3447027.html

一.  嗅探

1.1  嗅探技術簡介

1.1.1  目標

嗅探的目標:獲取在網路上傳輸的各種有價值資訊:賬號、密碼、非公開協議

1.1.2  原理

嗅探的原理:大多數嗅探都是在乙太網內,利用資料鏈路層技術進行的嗅探,依照嗅探器部署的位置不同,它們為達到這個目的所採用的技術也不盡相同

1.1.3  型別

1.1.3.1  共享乙太網中的嗅探

共享乙太網中的通訊的方式:要傳送的所有資料都是廣播到整個網路中去的,資料幀會流經每個結點。

正常情況下,結點只會對發給自己的資料或者廣播資料進行響應,一看到資料幀頭部標明的MAC地址與自身不符,就不再看後面的內容而直接將其丟棄。但是,如果把網絡卡設定為混雜(promiscuous)模式,那麼結點將能接收到網路中的所有資料。只要是接入到網路中的結點,都能夠通過這種方法實現嗅探

 

廣播方式:該模式下的網絡卡能夠接收網路中的廣播資訊。    
組播方式:設定在該模式下的網絡卡能夠接收組播資料。   
直接方式:在這種模式下,只有目的網絡卡才能接收該資料

混雜模式:在這種模式下的網絡卡能夠接收一切通過它的資料,而不管該資料是否是傳給它的。

機器A、B、C在同一個共享乙太網中,由集線器連線,其中機器B是FTP伺服器,機器A想要登入機器B,如果機器C想要知道機器A的資訊,只需要將網絡卡設為混雜模式,然後就可以接收到A和B之間的所有流量。

 

1.1.1.1  交換乙太網中的嗅探

與共享乙太網不同的是,交換乙太網採用的組網裝置是交換機(Switch)而非共享匯流排或集線器(Hub)。交換機是一種基於MAC地址識別,能完成封裝轉發資料包功能的網路裝置。交換機可以“學習”MAC地址,並把其存放在內部地址表中,通過在資料幀的始發者和 目標接收者之間建立臨時的交換路徑,使資料幀直接由源地址到達目的地址。

 

 

 

 

1.交換機根據收到資料幀中的源MAC地址建立該地址同交換機埠的對映,並將其寫入MAC地址表中。  
  2.交換機將資料幀中的目的MAC地址同已建立的MAC地址表進行比較,以決定由哪個埠進行轉發。  
  3.如資料幀中的目的MAC地址不在MAC地址表中,則向所有埠轉發。這一過程稱為泛洪(flood)。  
  4.廣播幀和組播幀向所有的埠轉發。

 

1.1.1.1.1  MAC 地址溢位(MAC Flooding)

Switch 之所以能夠由資料包中目的MAC地址判斷出他應該把資料包傳送到哪一個埠上是根據自身維護的一張ARP地址表,這張地址表可能是動態的也可能是靜態的,如果是動態的地址表,並且其大小是有上限的,攻擊者可以通過傳送大量錯誤的地址資訊而使Switch維護的地址表‘溢位’,從而使其變成廣播模式。

1.1.1.1.2  ARP 欺騙(ARP Spoof)

假設A的IP地址是192.168.1.11

MAC地址是:11-11-11-11-11-11;

B的IP地址是 192.168.1.77

MAC地址是77-77-77-77-77-77

閘道器IP地址是192.168.1.1

MAC地址 是:01-01-01-01-01-01。

 

1).A傳送ARP欺騙包(ARP應答包)給B,告訴B:我(A)是閘道器,你把訪問外網的資料發給我(A)吧!ARP欺騙包如下:

  SrcIP: 192.168.1.1 ,SrcMAC:11-11-11-11-11-11

DstIP: 192.168.1.77 ,DstMAC:77-77-77-77-77-77

 

2).A傳送ARP欺騙包(ARP應答包)給閘道器,告訴閘道器:我(A)是機器B,結果閘道器把所有給B的資料都發到A那裡了。ARP欺騙包如下:

  SrcIP: 192.168.1. 77,SrcMAC:11-11-11-11-11-11

DstIP: 192.168.1. 1,DstMAC:01-01-01-01-01-01

 

3).機器A有一個輔助用的轉發軟體,它負責把“閘道器->B”和“B->閘道器”的資料包轉發。

 

 

至此,ARP欺騙的輔助任務完成了,接下來就是用你的嗅探器進行偷窺了~噢~哈哈!

這裡有幾點值得注意一下的:

 

1).ARP欺騙包每隔一段時間要發一次,否則閘道器和B的ARP快取會更新!

2).ARP欺騙完成後,閘道器的ARP記錄會有兩記錄的MAC地址是相同的,分別 是:192.168.1.11(11-11-11-11-11-11)和192.168.1.77(11-11-11-11-11-11),這樣可能會比較明顯,可以把A自己在閘道器的ARP快取改了:192.168.1.11(01-10-01-10-01-10,亂寫一個),但這樣會有兩個問題:一個是這個MAC是亂寫的,區域網內根本沒有這個MAC地址的機器,根據交換機的工作原理,閘道器發給192.168.1.11這IP的機器的資料將會被廣播。第二個是,此刻你(A)的正常與外界通訊的能力將會喪失。可以權衡考慮一下。

 

ARP欺騙就是通過發ARP應答包讓閘道器和受害機的動態ARP表產生錯誤 IP-MAC 對映

1.1.1.1.1  交換機快取欺騙

交換機裡面有一張CAM表,記錄了Mac-Port資訊(這個埠對應的機器的MAC地址是什麼),MAC資訊的獲取是:交換機從轉發的資料包中提取。所謂欺騙交換機快取,就是修改這張CAM表以達到欺騙交換機的目的!

 

假設有一個4埠的交換機,它的CAM表如下:

   port1 -- 11-11-11-11-11-11

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

port4 -- 44-44-44-44-44-44

 

現在port1的機器A(IP是192.168.1.11,MAC地址為11-11-11-11-11-11)想要嗅探port2的機器B(IP是192.168.1.22,MAC地址為22-22-22-22-22-22),怎麼辦呢?流程如下:

 

 

1)機器A對外發送一個數據包,如下:

 

SrcIP:192.168.1.11  ScrMac:22-22-22-22-22-22

DstIP:xxx.xxx.xxx.xxx(隨便寫),DstMac:xx-xx-xx-xx-xx-xx(隨便寫)

 

  此時,交換機收到這個包,發現在原來CAM裡面,port1對應的機器MAC地址是11-11-11-11-11-11,怎麼現在變為:22-22-22-22-22-22了呢??哦,應該是這臺機器的MAC地址變了吧~好!那我更新CAM表!

 

更新後的交換機CAM表如下:

 

  port1 -- 22-22-22-22-22-22 (注意:Port1比Port2優先順序高)

  port2 -- 22-22-22-22-22-22

  port3 -- 33-33-33-33-33-33

port4 -- 44-44-44-44-44-44

 

2)現在有port1和port2對應的MAC地址是一樣的。如果現在閘道器(假設現在port4連線的是閘道器)來了一個數據包是給機器B(IP是 192.168.1.22,MAC地址為22-22-22-22-22-22),交換機會順序查詢此刻的CAM表來確定該資料包轉發去哪個埠!在查詢 port1時,發現此埠對應MAC地址和資料包裡的MAC地址相同,交換機直接就把包轉發到port1的機器A了,由於該包已轉發完畢,交換機繼續處理 下一個資料包......就這樣,資料包又再次落入充滿窺探慾望的人手中!

 

這裡也需要注意幾個問題:

  1).A收到包後,還是需要轉發給B的,不然B和外面的對話就中斷了。

2).當A把包轉發給B時,需要修復交換機的CAM表。

 

交換機快取欺騙就是通過發特定的包給交換機,讓其CAM表產生錯誤的 PORT-MAC 對映

1.1.1.2  核心交換節點的嗅探

在核心交換結點,資料是從該結點上直接流過的,因此在功能上實現嗅探十分容易。但是僅僅是“看”到資料沒有任何意義,從中提取出資訊才是嗅探的最終目的。而想要對這裡巨大的網路流量 進行分析卻不是一件容易的事,以目前的計算能力,只能採用分散式處理的技術,將分析工作分給多個處理器去完成。 

 

惡意的嗅探很難在核心交換結點處實現——除非這裡已經完全被攻擊者接管。否則,即使攻擊者成功的運行了偵聽程式(已經可以用幸運來形容了),在安防措施極為嚴密的地方,想要搭建分散式的分析環境是不可想象的,同樣,想要將龐大資料傳送到遠端作分析而不被發覺難度也是非常大的。

1.1.1.3  傳輸介質上的嗅探

在網路的傳輸介質上實現嗅探是最不容易被發現和防範的一種被動攻擊。攻擊者不需要修改網路互聯裝置的配置,甚至不需要接入網路,只需物理上的接觸即可獲取介 質上傳輸的資訊內容。儘管這種嗅探需要先進的專用裝置才能實現,但實施起來的隱蔽性使其成為不容忽視的網路安全威脅之一。 

無線網路直接利用電磁波傳輸資訊的特性使其不可避免的面臨偵聽的威脅;銅纜和非遮蔽雙絞線會輻射出電磁波而導致資訊洩漏;甚至是被普遍認為無法竊聽的光纖,如果能夠在不損壞內部結構的前提下剝去其塗敷層(現在還做不到),再使其彎曲引發輻射,照樣能夠達到嗅探的目的。

1.1.2  各種嗅探工具

谷歌以下關鍵字:*sniff 、tcpdump 、Ethereal(wireshark)

1.2  Tcpdump

1.2.1  基本命令列引數

Tcpdump是linux系統下一款非常強大的嗅探器,它採用命令列方式工作,它的命令格式為:

比較常用的引數/值

  • -i any : 監聽所有網路埠
  • -n : 不把網路地址顯示為域名
  • -nn : 不顯示域名和埠名
  • -X : 在輸出行同時列印ASCII字元和HEX十六進位制顯示的包資訊
  • -XX : 在-X基礎上,增加了資料鏈路層的頭部資訊的顯示
  • -v, -vv, -vvv : 逐步提高抓取資訊的詳細程度
  • -c : 抓取c個包即停止
  • -S : 列印絕對序列號
  • -e : 在輸出行打印出資料鏈路層的頭部資訊
  • -s : 設定預設抓取的包資料的長度(如果不設定,預設只抓一個包前面 96 位元組)
  • -w:直接將包寫入檔案中,並不分析和打印出來

 

幾個簡單的例子

 

1).Basic communication // 列印最簡單的包資訊

# tcpdump -nS

2) Basic communication (very verbose) // 列印比較詳細的包資訊

# tcpdump -nnvvS

3) A deeper look at the traffic // 增加HEX碼的列印

# tcpdump -nnvvXS

4) Heavy packet viewing //增加抓取的位元組長度

# tcpdump -nnvvXSs 1514

 

1.1.1  過濾表示式

表示式是一個正則表示式,tcpdump利用它作為過濾報文的條件,如果一個報文滿足表示式的條件,則這個報文將會被捕獲。如果沒有給出任何條件,則網路上所有的資訊包將會被截獲。

表示式的幾種關鍵字:

 

第一種是關於型別的關鍵字,主要包括host,net,port, 例如 host  210.27.48.2,指明 210.27.48.2是一臺主機,net  202.0.0.0 指明 202.0.0.0是一個網路地址,port 23 指明埠號是23。如果沒有指定型別,預設的型別是host.
   第二種是確定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,這些關鍵字指明瞭傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網路地址是202.0.0.0 。如果沒有指明方向關鍵字,則預設是src or dst關鍵字。
   第三種是協議的關鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等型別。Fddi指明是在FDDI(分散式光纖資料介面網路)上的特定的網路協議,實際上它是"ether"的別 名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明瞭監聽的包 的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的資訊包。

除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway,broadcast,less,greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'||';

 

 

幾個簡單的例子:

  • host // 根據IP抓包

# tcpdump host 1.2.3.4

  • srcdst // 根據IP只抓一個方向的包

# tcpdump src 2.3.4.5 
# tcpdump dst 3.4.5.6

  • net // 抓取一個區域網內的包

# tcpdump net 1.2.3.0/24

  • proto // 根據協議抓包

# tcpdump icmp

  • port // 根據埠抓包

# tcpdump port 3389

  • src, dst port // 根據埠只抓一個流向的包

# tcpdump src port 1025 
# tcpdump dst port 389

  • Port Ranges // 根據埠範圍抓包

# tcpdump portrange 21-23

  • Packet Size Filter // 根據包大小抓包

# tcpdump less 32 
# tcpdump greater 128

// 也可以下面這種形式 
# tcpdump > 32 
# tcpdump <= 128

 

1.1.2  高階應用

關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明

 

// 抓取源地址 10.5.2.3 目的埠 3389 的包,列印中等詳細的資訊,不顯示域名和埠名

#tcpdump -nnvvS  and src 10.5.2.3 and dst port 3389

 

// 抓從網路 192.168 發向網路 10 或 172.16 的流量,同時列印ASCII和HEX的資訊

#tcpdump -nvX  src net 192.168.0.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

 

# 抓目的地址為 192.168.0.2 的非 icmp 協議的包,每個包抓 1514 位元組

tcpdump -nvvXSs 1514 dst 192.168.0.2 and src net and not icmp

 

還可以類似程式設計的風格,用偏移量等精確到TCP包的某些位元組,如

//Show me all URGENT (URG) packets...

# tcpdump 'tcp[13] & 32!=0'

//Show me all ACKNOWLEDGE (ACK) packets...

# tcpdump 'tcp[13] & 16!=0'

//Show me all PUSH (PSH) packets...

# tcpdump 'tcp[13] & 8!=0'

//Show me all RESET (RST) packets...

# tcpdump 'tcp[13] & 4!=0'

//Show me all SYNCHRONIZE (SYN) packets...

# tcpdump 'tcp[13] & 2!=0'

//Show me all FINISH (FIN) packets...

# tcpdump 'tcp[13] & 1!=0'

 

1.1.3  輸出結果解釋

23:28:02 時間

790859 ID

ARP 協議型別

e 引數列印詳細的資料鏈路層資訊

link-type 乙太網

MAC 地址

1.1  Wireshark

Wireshark 是非常流行的基於圖形介面的嗅探工具,原名是Ethereal

1.1.1  主要操作介面

1.1.1.1  選單、快捷方式

- "File"(檔案)
- "Edit" (編輯)
- "View"(檢視)
- "Go" (轉到)
- "Capture"(捕獲)
- "Analyze"(分析)
- "Statistics" (統計)
-“telephony”(通訊)

-“Tools”(工具)

-“Internals”(內部)

- "Help" (幫助)

開啟或儲存捕獲的資訊。
查詢或標記封包。進行全域性設定。
設定Wireshark的檢視。
跳轉到捕獲的資料。
設定捕捉過濾器並開始捕捉。
設定分析選項。
檢視Wireshark的統計資訊。
此選單下每個項都將開啟一個單獨的分析視窗

設定防火牆過濾項

檢視所有支援的協議和過濾項

檢視本地或者線上支援。

-選單下一行是快捷方式,將滑鼠移到上面會有說明

 

1.1.1.1  顯示過濾器

 

圖 1.1  Wireshark 1.6.1顯示過濾器

顯示過濾器用於查詢捕捉記錄中的內容。
請不要將捕捉過濾器和顯示過濾器的概念相混淆。

1.1.1.2  包列表、包詳細資訊

點選一個包,或者詳細資訊表的一行,會顯示對應的十六進位制資料

=====================

一.  回放

1.1  流量回放測試技術簡介

1.1.1  Why do we need replay test?

Field test: 真實場景測試,優點:真實;缺點:無法測試特定場景下裝置的表現以及壓力測試

Lab test: 實驗室環境測試,優點:見上;缺點:無法提供大量使用者和應用程式、複雜網路結構的真實場景

Replay test: field test 和 lab test 的強強聯合,先在 filed test 場景下將真實流量捕獲,存成快照,然後將快照作為 lab test 的背景流量,在其上加入各種特定測試目標而設計的流量,對裝置進行測試。

1.1.2  How to replay?

Step1:capture traffic  ----à   嗅探工具

Step2: split the network traffic (真實網路的流量一般是有進有出的)---à tcpprep

Step3: make the replay network traffic as real as it is like in the Field Test environment ---à tcprewrite

Step4: replay ---à tcpreplay

1.1.3  Replay tools

Name

Complete Connection

Stateful

Selected Replay

TCPreplay

No required

No

No

Tomahawk

Required

Yes

No

Mokey

Not required

Yes

No

Avalanche

Required

Yes

No

SocketReplay

Not required

Yes

Yes

1.1.1  Some disadvantage

1.Obviously the biggest limitation of tcpreplay is it doesn't come with a library of pcaps

 

2.In my view, the biggest limitation is that replaying captured packets an overly simplified manner of modeling real world attacks. Today's exploit code is a lot "smarter" than simple PoC that send the same fixed data on each run. modern exploits make runtime decisions based on the state of the target system/application and several other things

1.2  Tcpreplay 套件

1.2.1  套件簡介

Tcpreplay是一個工具套件,用來測試各種網路裝置,包括:交換機、路由器、防火牆、NIDS和IPS等。它使用嗅探工具抓取的資料包,允許你拆分客戶端和服務端流量,重寫2、3、4層頭資訊,最終將流量回放到網路中。3.4 版本包括以下部分:

 

u  Tcpprep:將流量拆分為客戶端和服務端兩個方向,並存放為快取檔案

u  Tcprewrite:重寫pcap檔案的TCP/IP層和資料鏈路層的頭資訊

u  Tcpreplay:以可控的速度將pcap檔案回放到網路中

u  Tcpreplay-edit:在tcpreplay基礎上增加編輯功能

u  Tcpbirdge:橋接兩個不同網段

u  Tcpcapinfo:pcap 檔案解碼器和編譯器

1.2.2  Tcpprep工具的使用

1.2.2.1  簡介

有些回放測試場景下,我們希望讓客戶端流量從被測裝置(DUT)的一端進入,服務端流量從另一端進入。Tcpprep的作用是通過對pcap檔案進行一些計算,將結果存放為cache檔案的形式,傳送的時候加上該cache檔案就可以將流量拆分為2個方向,這比邊傳送邊計算效率要高。

1.2.2.2  流量拆分模式

8種拆分模式(具體演算法 http://tcpreplay.synfin.net/wiki/tcpprep ):

 

u  Auto/Bridge

u  Auto/Router

u  Auto/Client

u  Auto/Server

u  IPv4/v6 matching CIDR

u  IPv4/v6 matching Regex

u  TCP/UDP Port

u  MAC address

 

可以分為自動運算和匹配2大類。

 

在自動模式下,程式根據資料包的特徵自動區分client 端和server 端資料。4種自動模式的基本演算法是一樣的,區別在於基本演算法算完之後,無法劃分的那些包的歸屬方式不同。

 

當前版本的客戶端特徵為:

u  Sending a TCP Syn packet to another host

u  Making a DNS request

u  Recieving an ICMP port unreachable

服務端特徵為:

u  Sending a TCP Syn/Ack packet to another host

u  Sending a DNS Reply

u  Sending an ICMP port unreachable

 

 

匹配模式:給出一個IP列表或者正則表示式,或者埠,或者MAC,匹配到的認為是服務端流量

$ tcpprep --cidr=10.0.0.0/8,172.16.0.0/12 --pcap=input.pcap --cachefile=input.cache

Cidr給出的兩個網路的流量被認為是服務端

$ tcpprep --regex="(10|20)\..*" --pcap=input.pcap --cachefile=input.cache

10或20開頭的IP被認為是服務端

$ tcpprep --port --services=/etc/services --pcap=input.pcap --cachefile=input.cache

一般 0-1023被認為是服務端,這個範圍可以自定義

$ tcpprep --mac=00:21:00:55:23:AF,00:45:90:E0:CF:A2 --pcap=input.pcap --cachefile=input.cache

匹配到MAC列表的被認為是服務端

 

1.2.2.3  Include/exclude列表

可以通過設定include列表和exclude列表,讓pcap在計算的時候減少負擔。

 

Include:

// 它將只拆分源地址從 10.0.0.0/8,192.168.0.0/16這兩個網路出來的流量

$ tcpprep --include=S:10.0.0.0/8,192.168.0.0/16 --pcap=input.pcap --cachefile=input.cache <other args>

// 它將只拆分目的地址為 10.0.0.0/8,192.168.0.0/16這兩個網路的流量

$ tcpprep --include=D:10.0.0.0/8,192.168.0.0/16 --pcap=input.pcap --cachefile=input.cache <other args>

// 它拆分源和目的地址為 10.0.0.0/8,192.168.0.0/16這兩個網路的流量(即這兩個網路之間的通訊流量)

$ tcpprep --include=B:10.0.0.0/8,192.168.0.0/16 --pcap=input.pcap --cachefile=input.cache <other args>

// 它拆分源或目的地址為 10.0.0.0/8,192.168.0.0/16這兩個網路的流量(只要從兩個網路中的至少一個經過的流量)

$ tcpprep --include=E:10.0.0.0/8,192.168.0.0/16 --pcap=input.pcap --cachefile=input.cache <other args>

 

Exclude:

// 拆分流量中除了源地址來自於10.0.0.0/8,192.168.0.0/16這兩個網路的其他流量

$ tcpprep --exclude=S:10.0.0.0/8,192.168.0.0/16 --pcap=input.pcap --cachefile=input.cache <other args>

1.2.2.4  列印流量拆分資訊

u  評論

$ tcpprep --print-comment=input.cache

u  狀態

$ tcpprep --print-stats=input.cache

u  詳細資訊

$ tcpprep --print-info=input.cache

 

1.2.3  Tcprewrite工具的使用

1.2.3.1  簡介

實現對流量包各層頭資訊的重寫

1.2.3.2  基本用法

u  Layer2資料鏈路層的重寫

資料鏈路層的特點是網路型別比較多,tcprewrite支援的型別:

n  輸出 Plugins supported in output mode

Ethernet (enet)

Cisco HDLC (hdlc)

User defined Layer 2 (user)

n  輸入Plugins supported in input mode

Ethernet

Cisco HDLC

Linux SLL

BSD Loopback

BSD Null

Raw IP

802.11

Juniper Ethernet (version >= 4.0)

    

Tcprewrite重寫第二層的舉例:

n  DLT_EN10MB (Ethernet)

// 下面的指令將使所有流量的源MAC變成00:44:66:FC:29:AF,目標MAC變成00:55:22:AF:C6:37

$ tcprewrite --enet-dmac=00:55:22:AF:C6:37 --enet-smac=00:44:66:FC:29:AF --infile=input.pcap --outfile=output.pcap

 

【以下這兩點沒有試驗過,只是自己的理解】

n  DLT_CHDLC (Cisco HDLC)

//Cisco HDLC has two fields in the Layer 2 header: address and control. Both can be set using this plugin: (通過新增一些外掛支援非乙太網的資料鏈路層包重寫)

--hdlc-address

--hdlc-control

n  DLT_USER0 (User Defined)

//The user defined DLT option allows you to create any DLT/Layer2 header of your choosing by using the following two options: (支援使用者自定義鏈路層資料格式)

--user-dlt - Set pcap DLT type

--user-dlink - Set packet layer 2 header

 

u  Layer3 網路層的重寫

n  使流量在兩個主機之間傳遞

$ tcprewrite --endpoints=10.10.1.1:10.10.1.2 --cachefile=input.cache --infile=input.pcap --outfile=output.pcap --skipbroadcast

n  使流量在一個IP範圍內傳遞

$ tcprewrite --seed=423 --infile=input.pcap --outfile=output.pcap

n  是一個網段內的流量變成另一個網段內的流量

$ tcprewrite --pnat=10.0.0.0/8:172.16.0.0/12,192.168.0.0/16:172.16.0.0/12 --infile=input.pcap --outfile=output.pcap –skipbroadcast

n  修改部分協議欄位再發送流量

$ tcprewrite --tos=50 --infile=input.pcap --outfile=output.pcap

$ tcprewrite --flowlabel=67234 --infile=input.pcap --outfile=output.pcap

 

u  Layer4 TCP/UDP層的重寫

n  重新對映埠

$ tcprewrite --portmap=80:8080,22:8022 --infile=input.pcap --outfile=output.pcap

n  修改部分欄位

$ tcprewrite --fixcsum --infile=input.pcap --outfile=output.pcap

 

u  Layer5-7 層的重寫

由於包在傳輸過程中是分段的,所以抓到的包裡有些應用層資料已經丟失,針對這一點,tcprewrite提供了一些引數去‘修理’這個包

//Pad the packets with 0x00:

$ tcprewrite --fixlen=pad --infile=input.pcap --outfile=output.pcap

//Rewrite the packet header length fields to match the captured packet length:

$ tcprewrite --fixlen=trunc --infile=input.pcap --outfile=output.pcap

//Delete the packet from the pcap file:

$ tcprewrite --fixlen=del --infile=input.pcap --outfile=output.pcap

 

不同的網路對‘能傳送的最大的資料段大小MTU’限制不同,tcprewrite 在3..3版本的時候提供了部分引數處理這個問題

 

//Truncate packets to the MTU length (default 1500 bytes):

$ tcprewrite --mtu-trunc --infile=input.pcap --outfile=output.pcap

//Truncate packets to a user defined MTU (1000 bytes):

$ tcprewrite --mtu=1000 --mtu-trunc --infile=input.pcap --outfile=output.pcap

//Use IP fragmentation to break up large packets into smaller ones. As of v3.3.0 you can use the fragroute engine to fragment IP packets into smaller pieces to fit within the MTU. The way to do this is to create a text file frag.cfg with the contents

ip_frag 1400

and run tcprewrite like so:

$ tcprewrite --fragroute=frag.cfg --infile=input.pcap --outfile=output.pcap

 

1.2.4  Tcpreplay工具的使用

1.2.4.1  簡介

Tcpreplay 到目前為止經歷了3個版本的變化,1.X 實現了讀包和回放功能,2.X 實現了各種重寫功能,3.X 將讀包(解析包)功能封裝為tcpprep,將重寫部分功能封裝為 tcprewrite,而在tcpreplay裡封裝了強大的發包功能

1.2.4.2  基本用法

u  最簡單的方式

# tcpreplay --intf1=eth0 sample.pcap

 

u  控制傳送速度

# tcpreplay --topspeed --intf1=eth0 sample.pcap

# tcpreplay --mbps=10.0 --intf1=eth0 sample.pcap

# tcpreplay --multiplier=7.3 --intf1=eth0 sample.pcap

# tcpreplay --multiplier=0.5 --intf1=eth0 sample.pcap

# tcpreplay --pps=25 --intf1=eth0 sample.pcap

# tcpreplay --oneatatime --verbose --intf1=eth0 sample.pcap

 

u  控制傳送次數

# tcpreplay --loop=10 --intf1=eth0 sample.pcap

# tcpreplay --loop=0 --intf1=eth0 sample.pcap

 

1.2.4.3  高階

u  同時從兩個埠傳送資料

# tcpreplay --cachefile=sample.prep --intf1=eth0 --intf2=eth1 sample.pcap

# tcpreplay --dualfile --intf1=eth0 --intf2=eth1 side-a.pcap side-b.pcap

 

u  根據不同系統選擇時間延遲函式

發包速度的控制,tcpreplay在實現的時候使用了延遲函式的概念,這涉及到底層OS很多特性,在不同系統上使用tcpreplay,根據系統不同選擇不同的延遲函式

--timer=abstime

--timer=gtod

--timer=nano

--timer=rdtsc

--timer=ioport

--timer=select

u  一些建議

1)推薦的速度控制函式:--topspeed、--pps、--pps-multi(--pps-multi 比 –pps 每秒多發一個包,所以速度更快); --mbps、--multiplier 在對效能要求比較高的情況下不推薦使用,因為需要大量的運算。

 

2)虛擬技術,如 vmware 會對發包的速度控制造成很大影響

1.2.5  Tcpreplay套件使用示例

http://tcpreplay.synfin.net/wiki/usage#UsageExamples