包嗅探和包回放簡介-tcpdump,tcpreplay


一.  嗅探

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

  • src, dst // 根據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  基本用法

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

 

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

 

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

 

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  基本用法

最簡單的方式

# tcpreplay --intf1=eth0 sample.pcap

 

控制發送速度

# 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

 

控制發送次數

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

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

 

1.2.4.3  高級

同時從兩個端口發送數據

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

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

 

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

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

--timer=abstime

--timer=gtod

--timer=nano

--timer=rdtsc

--timer=ioport

--timer=select

一些建議

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

 

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

1.2.5  Tcpreplay套件使用示例

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM