日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發(fā)布時(shí)間:2023/12/3 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 包嗅探和包回放简介-tcpdump,tcpreplay 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一. ?嗅探

1.1 ?嗅探技術(shù)簡介

1.1.1 ?目標(biāo)

嗅探的目標(biāo):獲取在網(wǎng)絡(luò)上傳輸?shù)母鞣N有價(jià)值信息:賬號、密碼、非公開協(xié)議

1.1.2 ?原理

嗅探的原理:大多數(shù)嗅探都是在以太網(wǎng)內(nèi),利用數(shù)據(jù)鏈路層技術(shù)進(jìn)行的嗅探,依照嗅探器部署的位置不同,它們?yōu)檫_(dá)到這個(gè)目的所采用的技術(shù)也不盡相同

1.1.3 ?類型

1.1.3.1 ?共享以太網(wǎng)中的嗅探

共享以太網(wǎng)中的通信的方式:要傳送的所有數(shù)據(jù)都是廣播到整個(gè)網(wǎng)絡(luò)中去的,數(shù)據(jù)幀會流經(jīng)每個(gè)結(jié)點(diǎn)。

正常情況下,結(jié)點(diǎn)只會對發(fā)給自己的數(shù)據(jù)或者廣播數(shù)據(jù)進(jìn)行響應(yīng),一看到數(shù)據(jù)幀頭部標(biāo)明的MAC地址與自身不符,就不再看后面的內(nèi)容而直接將其丟棄。但是,如果把網(wǎng)卡設(shè)定為混雜(promiscuous)模式,那么結(jié)點(diǎn)將能接收到網(wǎng)絡(luò)中的所有數(shù)據(jù)。只要是接入到網(wǎng)絡(luò)中的結(jié)點(diǎn),都能夠通過這種方法實(shí)現(xiàn)嗅探

?

廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息。    
組播方式:設(shè)置在該模式下的網(wǎng)卡能夠接收組播數(shù)據(jù)。   
直接方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù)

混雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過它的數(shù)據(jù),而不管該數(shù)據(jù)是否是傳給它的。

機(jī)器A、B、C在同一個(gè)共享以太網(wǎng)中,由集線器連接,其中機(jī)器B是FTP服務(wù)器,機(jī)器A想要登錄機(jī)器B,如果機(jī)器C想要知道機(jī)器A的信息,只需要將網(wǎng)卡設(shè)為混雜模式,然后就可以接收到A和B之間的所有流量。

?

1.1.1.1 ?交換以太網(wǎng)中的嗅探

與共享以太網(wǎng)不同的是,交換以太網(wǎng)采用的組網(wǎng)設(shè)備是交換機(jī)(Switch)而非共享總線或集線器(Hub)。交換機(jī)是一種基于MAC地址識別,能完成封裝轉(zhuǎn)發(fā)數(shù)據(jù)包功能的網(wǎng)絡(luò)設(shè)備。交換機(jī)可以“學(xué)習(xí)”MAC地址,并把其存放在內(nèi)部地址表中,通過在數(shù)據(jù)幀的始發(fā)者和?目標(biāo)接收者之間建立臨時(shí)的交換路徑,使數(shù)據(jù)幀直接由源地址到達(dá)目的地址。

?

?

?

?

1.交換機(jī)根據(jù)收到數(shù)據(jù)幀中的源MAC地址建立該地址同交換機(jī)端口的映射,并將其寫入MAC地址表中。??
  2.交換機(jī)將數(shù)據(jù)幀中的目的MAC地址同已建立的MAC地址表進(jìn)行比較,以決定由哪個(gè)端口進(jìn)行轉(zhuǎn)發(fā)。??
  3.如數(shù)據(jù)幀中的目的MAC地址不在MAC地址表中,則向所有端口轉(zhuǎn)發(fā)。這一過程稱為泛洪(flood)。??
  4.廣播幀和組播幀向所有的端口轉(zhuǎn)發(fā)。

?

1.1.1.1.1 ?MAC 地址溢出(MAC Flooding)

Switch 之所以能夠由數(shù)據(jù)包中目的MAC地址判斷出他應(yīng)該把數(shù)據(jù)包發(fā)送到哪一個(gè)端口上是根據(jù)自身維護(hù)的一張ARP地址表,這張地址表可能是動(dòng)態(tài)的也可能是靜態(tài)的,如果是動(dòng)態(tài)的地址表,并且其大小是有上限的,攻擊者可以通過發(fā)送大量錯(cuò)誤的地址信息而使Switch維護(hù)的地址表‘溢出’,從而使其變成廣播模式。

1.1.1.1.2 ?ARP 欺騙(ARP Spoof)

假設(shè)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

網(wǎng)關(guān)IP地址是192.168.1.1

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

?

1).A發(fā)送ARP欺騙包(ARP應(yīng)答包)給B,告訴B:我(A)是網(wǎng)關(guān),你把訪問外網(wǎng)的數(shù)據(jù)發(fā)給我(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發(fā)送ARP欺騙包(ARP應(yīng)答包)給網(wǎng)關(guān),告訴網(wǎng)關(guān):我(A)是機(jī)器B,結(jié)果網(wǎng)關(guān)把所有給B的數(shù)據(jù)都發(fā)到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).機(jī)器A有一個(gè)輔助用的轉(zhuǎn)發(fā)軟件,它負(fù)責(zé)把“網(wǎng)關(guān)->B”和“B->網(wǎng)關(guān)”的數(shù)據(jù)包轉(zhuǎn)發(fā)。

?

?

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

這里有幾點(diǎn)值得注意一下的:

?

1).ARP欺騙包每隔一段時(shí)間要發(fā)一次,否則網(wǎng)關(guān)和B的ARP緩存會更新!

2).ARP欺騙完成后,網(wǎng)關(guān)的ARP記錄會有兩記錄的MAC地址是相同的,分別 是:192.168.1.11(11-11-11-11-11-11)和192.168.1.77(11-11-11-11-11-11),這樣可能會比較明顯,可以把A自己在網(wǎng)關(guān)的ARP緩存改了:192.168.1.11(01-10-01-10-01-10,亂寫一個(gè)),但這樣會有兩個(gè)問題:一個(gè)是這個(gè)MAC是亂寫的,局域網(wǎng)內(nèi)根本沒有這個(gè)MAC地址的機(jī)器,根據(jù)交換機(jī)的工作原理,網(wǎng)關(guān)發(fā)給192.168.1.11這IP的機(jī)器的數(shù)據(jù)將會被廣播。第二個(gè)是,此刻你(A)的正常與外界通信的能力將會喪失。可以權(quán)衡考慮一下。

?

ARP欺騙就是通過發(fā)ARP應(yīng)答包讓網(wǎng)關(guān)和受害機(jī)的動(dòng)態(tài)ARP表產(chǎn)生錯(cuò)誤 IP-MAC 映射

1.1.1.1.1 ?交換機(jī)緩存欺騙

交換機(jī)里面有一張CAM表,記錄了Mac-Port信息(這個(gè)端口對應(yīng)的機(jī)器的MAC地址是什么),MAC信息的獲取是:交換機(jī)從轉(zhuǎn)發(fā)的數(shù)據(jù)包中提取。所謂欺騙交換機(jī)緩存,就是修改這張CAM表以達(dá)到欺騙交換機(jī)的目的!

?

假設(shè)有一個(gè)4端口的交換機(jī),它的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

?

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

?

?

1)機(jī)器A對外發(fā)送一個(gè)數(shù)據(jù)包,如下:

?

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

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

?

  此時(shí),交換機(jī)收到這個(gè)包,發(fā)現(xiàn)在原來CAM里面,port1對應(yīng)的機(jī)器MAC地址是11-11-11-11-11-11,怎么現(xiàn)在變?yōu)?#xff1a;22-22-22-22-22-22了呢??哦,應(yīng)該是這臺機(jī)器的MAC地址變了吧~好!那我更新CAM表!

?

更新后的交換機(jī)CAM表如下:

?

  port1 -- 22-22-22-22-22-22 (注意:Port1比Port2優(yōu)先級高)

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

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

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

?

2)現(xiàn)在有port1和port2對應(yīng)的MAC地址是一樣的。如果現(xiàn)在網(wǎng)關(guān)(假設(shè)現(xiàn)在port4連接的是網(wǎng)關(guān))來了一個(gè)數(shù)據(jù)包是給機(jī)器B(IP是 192.168.1.22,MAC地址為22-22-22-22-22-22),交換機(jī)會順序查詢此刻的CAM表來確定該數(shù)據(jù)包轉(zhuǎn)發(fā)去哪個(gè)端口!在查詢 port1時(shí),發(fā)現(xiàn)此端口對應(yīng)MAC地址和數(shù)據(jù)包里的MAC地址相同,交換機(jī)直接就把包轉(zhuǎn)發(fā)到port1的機(jī)器A了,由于該包已轉(zhuǎn)發(fā)完畢,交換機(jī)繼續(xù)處理 下一個(gè)數(shù)據(jù)包......就這樣,數(shù)據(jù)包又再次落入充滿窺探欲望的人手中!

?

這里也需要注意幾個(gè)問題:

  1).A收到包后,還是需要轉(zhuǎn)發(fā)給B的,不然B和外面的對話就中斷了。

2).當(dāng)A把包轉(zhuǎn)發(fā)給B時(shí),需要修復(fù)交換機(jī)的CAM表。

?

交換機(jī)緩存欺騙就是通過發(fā)特定的包給交換機(jī),讓其CAM表產(chǎn)生錯(cuò)誤的 PORT-MAC 映射

1.1.1.2 ?核心交換節(jié)點(diǎn)的嗅探

在核心交換結(jié)點(diǎn),數(shù)據(jù)是從該結(jié)點(diǎn)上直接流過的,因此在功能上實(shí)現(xiàn)嗅探十分容易。但是僅僅是“看”到數(shù)據(jù)沒有任何意義,從中提取出信息才是嗅探的最終目的。而想要對這里巨大的網(wǎng)絡(luò)流量 進(jìn)行分析卻不是一件容易的事,以目前的計(jì)算能力,只能采用分布式處理的技術(shù),將分析工作分給多個(gè)處理器去完成。?

?

惡意的嗅探很難在核心交換結(jié)點(diǎn)處實(shí)現(xiàn)——除非這里已經(jīng)完全被攻擊者接管。否則,即使攻擊者成功的運(yùn)行了偵聽程序(已經(jīng)可以用幸運(yùn)來形容了),在安防措施極為嚴(yán)密的地方,想要搭建分布式的分析環(huán)境是不可想象的,同樣,想要將龐大數(shù)據(jù)傳送到遠(yuǎn)端作分析而不被發(fā)覺難度也是非常大的。

1.1.1.3 ?傳輸介質(zhì)上的嗅探

在網(wǎng)絡(luò)的傳輸介質(zhì)上實(shí)現(xiàn)嗅探是最不容易被發(fā)現(xiàn)和防范的一種被動(dòng)攻擊。攻擊者不需要修改網(wǎng)絡(luò)互聯(lián)設(shè)備的配置,甚至不需要接入網(wǎng)絡(luò),只需物理上的接觸即可獲取介 質(zhì)上傳輸?shù)男畔?nèi)容。盡管這種嗅探需要先進(jìn)的專用設(shè)備才能實(shí)現(xiàn),但實(shí)施起來的隱蔽性使其成為不容忽視的網(wǎng)絡(luò)安全威脅之一。?

無線網(wǎng)絡(luò)直接利用電磁波傳輸信息的特性使其不可避免的面臨偵聽的威脅;銅纜和非屏蔽雙絞線會輻射出電磁波而導(dǎo)致信息泄漏;甚至是被普遍認(rèn)為無法竊聽的光纖,如果能夠在不損壞內(nèi)部結(jié)構(gòu)的前提下剝?nèi)テ渫糠髮?#xff08;現(xiàn)在還做不到),再使其彎曲引發(fā)輻射,照樣能夠達(dá)到嗅探的目的。

1.1.2 ?各種嗅探工具

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

1.2 ?Tcpdump

1.2.1 ?基本命令行參數(shù)

Tcpdump是linux系統(tǒng)下一款非常強(qiáng)大的嗅探器,它采用命令行方式工作,它的命令格式為:

比較常用的參數(shù)/值

  • -i any?: 監(jiān)聽所有網(wǎng)絡(luò)端口
  • -n?: 不把網(wǎng)絡(luò)地址顯示為域名
  • -nn?: 不顯示域名和端口名
  • -X?: 在輸出行同時(shí)打印ASCII字符和HEX十六進(jìn)制顯示的包信息
  • -XX?: 在-X基礎(chǔ)上,增加了數(shù)據(jù)鏈路層的頭部信息的顯示
  • -v, -vv, -vvv?: 逐步提高抓取信息的詳細(xì)程度
  • -c?: 抓取c個(gè)包即停止
  • -S?: 打印絕對序列號
  • -e?: 在輸出行打印出數(shù)據(jù)鏈路層的頭部信息
  • -s?: 設(shè)置默認(rèn)抓取的包數(shù)據(jù)的長度(如果不設(shè)置,默認(rèn)只抓一個(gè)包前面 96 字節(jié))
  • -w:直接將包寫入文件中,并不分析和打印出來

?

幾個(gè)簡單的例子

?

1).Basic communication?// 打印最簡單的包信息

# tcpdump -nS

2)?Basic communication (very verbose)?// 打印比較詳細(xì)的包信息

# tcpdump -nnvvS

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

# tcpdump -nnvvXS

4)?Heavy packet viewing?//增加抓取的字節(jié)長度

# tcpdump -nnvvXSs 1514

?

1.1.1 ?過濾表達(dá)式

表達(dá)式是一個(gè)正則表達(dá)式,tcpdump利用它作為過濾報(bào)文的條件,如果一個(gè)報(bào)文滿足表達(dá)式的條件,則這個(gè)報(bào)文將會被捕獲。如果沒有給出任何條件,則網(wǎng)絡(luò)上所有的信息包將會被截獲。

表達(dá)式的幾種關(guān)鍵字:

?

第一種是關(guān)于類型的關(guān)鍵字,主要包括host,net,port,?例如 host ?210.27.48.2,指明 210.27.48.2是一臺主機(jī),net ?202.0.0.0 指明 202.0.0.0是一個(gè)網(wǎng)絡(luò)地址,port 23 指明端口號是23。如果沒有指定類型,缺省的類型是host.
   第二種是確定傳輸方向的關(guān)鍵字,主要包括src , dst ,dst or src, dst and src?,這些關(guān)鍵字指明了傳輸?shù)姆较颉Ee例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網(wǎng)絡(luò)地址是202.0.0.0 。如果沒有指明方向關(guān)鍵字,則缺省是src or dst關(guān)鍵字。
   第三種是協(xié)議的關(guān)鍵字,主要包括fddi,ip ,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數(shù)據(jù)接口網(wǎng)絡(luò))上的特定的網(wǎng)絡(luò)協(xié)議,實(shí)際上它是"ether"的別 名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協(xié)議包當(dāng)作ether的包進(jìn)行處理和分析。其他的幾個(gè)關(guān)鍵字就是指明了監(jiān)聽的包 的協(xié)議內(nèi)容。如果沒有指定任何協(xié)議,則tcpdump將會監(jiān)聽所有協(xié)議的信息包。

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

?

?

幾個(gè)簡單的例子:

  • host?// 根據(jù)IP抓包

# tcpdump host 1.2.3.4

  • src,?dst?// 根據(jù)IP只抓一個(gè)方向的包

# tcpdump src 2.3.4.5?
# tcpdump dst 3.4.5.6

  • net?// 抓取一個(gè)局域網(wǎng)內(nèi)的包

# tcpdump net 1.2.3.0/24

  • proto?// 根據(jù)協(xié)議抓包

# tcpdump icmp

  • port?// 根據(jù)端口抓包

# tcpdump port 3389

  • src, dst port?// 根據(jù)端口只抓一個(gè)流向的包

# tcpdump src port 1025?
# tcpdump dst port 389

  • Port Ranges?// 根據(jù)端口范圍抓包

# tcpdump portrange 21-23

  • Packet Size Filter?// 根據(jù)包大小抓包

# tcpdump less 32?
# tcpdump greater 128

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

?

1.1.2 ?高級應(yīng)用

關(guān)鍵字可以組合起來構(gòu)成強(qiáng)大的組合條件來滿足人們的需要,下面舉幾個(gè)例子來說明

?

// 抓取源地址 10.5.2.3 目的端口 3389 的包,打印中等詳細(xì)的信息,不顯示域名和端口名

#tcpdump -nnvvS ?and src 10.5.2.3 and dst port 3389

?

// 抓從網(wǎng)絡(luò) 192.168 發(fā)向網(wǎng)絡(luò) 10 或 172.16 的流量,同時(shí)打印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 協(xié)議的包,每個(gè)包抓 1514 字節(jié)

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

?

還可以類似編程的風(fēng)格,用偏移量等精確到TCP包的某些字節(jié),如

//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 ?輸出結(jié)果解釋

23:28:02 時(shí)間

790859 ID

ARP 協(xié)議類型

e 參數(shù)打印詳細(xì)的數(shù)據(jù)鏈路層信息

link-type 以太網(wǎng)

MAC 地址

1.1 ?Wireshark

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

1.1.1 ?主要操作界面

1.1.1.1 ?菜單、快捷方式

- "File"(文件)
- "Edit" (編輯)
- "View"(查看)
- "Go" (轉(zhuǎn)到)
- "Capture"(捕獲)
- "Analyze"(分析)
- "Statistics" (統(tǒng)計(jì))
-“telephony”(通訊)

-“Tools”(工具)

-“Internals”(內(nèi)部)

- "Help" (幫助)

打開或保存捕獲的信息。
查找或標(biāo)記封包。進(jìn)行全局設(shè)置。
設(shè)置Wireshark的視圖。
跳轉(zhuǎn)到捕獲的數(shù)據(jù)。
設(shè)置捕捉過濾器并開始捕捉。
設(shè)置分析選項(xiàng)。
查看Wireshark的統(tǒng)計(jì)信息。
此菜單下每個(gè)項(xiàng)都將打開一個(gè)單獨(dú)的分析窗口

設(shè)置防火墻過濾項(xiàng)

查看所有支持的協(xié)議和過濾項(xiàng)

查看本地或者在線支持。

-菜單下一行是快捷方式,將鼠標(biāo)移到上面會有說明

?

1.1.1.1 ?顯示過濾器

?

圖 1.1 ?Wireshark 1.6.1顯示過濾器

顯示過濾器用于查找捕捉記錄中的內(nèi)容。
請不要將捕捉過濾器和顯示過濾器的概念相混淆。

1.1.1.2 ?包列表、包詳細(xì)信息

點(diǎn)擊一個(gè)包,或者詳細(xì)信息表的一行,會顯示對應(yīng)的十六進(jìn)制數(shù)據(jù)

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

一. ?回放

1.1 ?流量回放測試技術(shù)簡介

1.1.1 ?Why do we need replay test?

Field test: 真實(shí)場景測試,優(yōu)點(diǎn):真實(shí);缺點(diǎn):無法測試特定場景下設(shè)備的表現(xiàn)以及壓力測試

Lab test: 實(shí)驗(yàn)室環(huán)境測試,優(yōu)點(diǎn):見上;缺點(diǎn):無法提供大量用戶和應(yīng)用程序、復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)的真實(shí)場景

Replay test: field test 和 lab test 的強(qiáng)強(qiáng)聯(lián)合,先在 filed test 場景下將真實(shí)流量捕獲,存成快照,然后將快照作為 lab test 的背景流量,在其上加入各種特定測試目標(biāo)而設(shè)計(jì)的流量,對設(shè)備進(jìn)行測試。

1.1.2 ?How to replay?

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

Step2: split the network traffic (真實(shí)網(wǎng)絡(luò)的流量一般是有進(jìn)有出的)---à 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是一個(gè)工具套件,用來測試各種網(wǎng)絡(luò)設(shè)備,包括:交換機(jī)、路由器、防火墻、NIDS和IPS等。它使用嗅探工具抓取的數(shù)據(jù)包,允許你拆分客戶端和服務(wù)端流量,重寫2、3、4層頭信息,最終將流量回放到網(wǎng)絡(luò)中。3.4 版本包括以下部分:

?

u? Tcpprep:將流量拆分為客戶端和服務(wù)端兩個(gè)方向,并存放為緩存文件

u? Tcprewrite:重寫pcap文件的TCP/IP層和數(shù)據(jù)鏈路層的頭信息

u? Tcpreplay:以可控的速度將pcap文件回放到網(wǎng)絡(luò)中

u? Tcpreplay-edit:在tcpreplay基礎(chǔ)上增加編輯功能

u? Tcpbirdge:橋接兩個(gè)不同網(wǎng)段

u? Tcpcapinfo:pcap 文件解碼器和編譯器

1.2.2 ?Tcpprep工具的使用

1.2.2.1 ?簡介

有些回放測試場景下,我們希望讓客戶端流量從被測設(shè)備(DUT)的一端進(jìn)入,服務(wù)端流量從另一端進(jìn)入。Tcpprep的作用是通過對pcap文件進(jìn)行一些計(jì)算,將結(jié)果存放為cache文件的形式,發(fā)送的時(shí)候加上該cache文件就可以將流量拆分為2個(gè)方向,這比邊發(fā)送邊計(jì)算效率要高。

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

?

可以分為自動(dòng)運(yùn)算和匹配2大類。

?

在自動(dòng)模式下,程序根據(jù)數(shù)據(jù)包的特征自動(dòng)區(qū)分client 端和server 端數(shù)據(jù)。4種自動(dòng)模式的基本算法是一樣的,區(qū)別在于基本算法算完之后,無法劃分的那些包的歸屬方式不同。

?

當(dāng)前版本的客戶端特征為:

u? Sending a TCP Syn packet to another host

u? Making a DNS request

u? Recieving an ICMP port unreachable

服務(wù)端特征為:

u? Sending a TCP Syn/Ack packet to another host

u? Sending a DNS Reply

u? Sending an ICMP port unreachable

?

?

匹配模式:給出一個(gè)IP列表或者正則表達(dá)式,或者端口,或者M(jìn)AC,匹配到的認(rèn)為是服務(wù)端流量

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

Cidr給出的兩個(gè)網(wǎng)絡(luò)的流量被認(rèn)為是服務(wù)端

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

10或20開頭的IP被認(rèn)為是服務(wù)端

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

一般 0-1023被認(rèn)為是服務(wù)端,這個(gè)范圍可以自定義

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

匹配到MAC列表的被認(rèn)為是服務(wù)端

?

1.2.2.3 ?Include/exclude列表

可以通過設(shè)置include列表和exclude列表,讓pcap在計(jì)算的時(shí)候減少負(fù)擔(dān)。

?

Include:

// 它將只拆分源地址從 10.0.0.0/8,192.168.0.0/16這兩個(gè)網(wǎng)絡(luò)出來的流量

$ 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這兩個(gè)網(wǎng)絡(luò)的流量

$ 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這兩個(gè)網(wǎng)絡(luò)的流量(即這兩個(gè)網(wǎng)絡(luò)之間的通訊流量)

$ 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這兩個(gè)網(wǎng)絡(luò)的流量(只要從兩個(gè)網(wǎng)絡(luò)中的至少一個(gè)經(jīng)過的流量)

$ 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這兩個(gè)網(wǎng)絡(luò)的其他流量

$ 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? 狀態(tài)

$ tcpprep --print-stats=input.cache

u? 詳細(xì)信息

$ tcpprep --print-info=input.cache

?

1.2.3 ?Tcprewrite工具的使用

1.2.3.1 ?簡介

實(shí)現(xiàn)對流量包各層頭信息的重寫

1.2.3.2 ?基本用法

u??Layer2數(shù)據(jù)鏈路層的重寫

數(shù)據(jù)鏈路層的特點(diǎn)是網(wǎng)絡(luò)類型比較多,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,目標(biāo)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

?

【以下這兩點(diǎn)沒有試驗(yàn)過,只是自己的理解】

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: (通過添加一些插件支持非以太網(wǎng)的數(shù)據(jù)鏈路層包重寫)

--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: (支持用戶自定義鏈路層數(shù)據(jù)格式)

--user-dlt - Set pcap DLT type

--user-dlink - Set packet layer 2 header

?

u??Layer3?網(wǎng)絡(luò)層的重寫

n? 使流量在兩個(gè)主機(jī)之間傳遞

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

n? 使流量在一個(gè)IP范圍內(nèi)傳遞

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

n? 是一個(gè)網(wǎng)段內(nèi)的流量變成另一個(gè)網(wǎng)段內(nèi)的流量

$ 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? 修改部分協(xié)議字段再發(fā)送流量

$ 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?層的重寫

由于包在傳輸過程中是分段的,所以抓到的包里有些應(yīng)用層數(shù)據(jù)已經(jīng)丟失,針對這一點(diǎn),tcprewrite提供了一些參數(shù)去‘修理’這個(gè)包

//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

?

不同的網(wǎng)絡(luò)對‘能發(fā)送的最大的數(shù)據(jù)段大小MTU’限制不同,tcprewrite 在3..3版本的時(shí)候提供了部分參數(shù)處理這個(gè)問題

?

//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 到目前為止經(jīng)歷了3個(gè)版本的變化,1.X 實(shí)現(xiàn)了讀包和回放功能,2.X 實(shí)現(xiàn)了各種重寫功能,3.X 將讀包(解析包)功能封裝為tcpprep,將重寫部分功能封裝為 tcprewrite,而在tcpreplay里封裝了強(qiáng)大的發(fā)包功能

1.2.4.2 ?基本用法

u??最簡單的方式

# tcpreplay --intf1=eth0 sample.pcap

?

u??控制發(fā)送速度

# 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??控制發(fā)送次數(shù)

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

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

?

1.2.4.3 ?高級

u??同時(shí)從兩個(gè)端口發(fā)送數(shù)據(jù)

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

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

?

u??根據(jù)不同系統(tǒng)選擇時(shí)間延遲函數(shù)

發(fā)包速度的控制,tcpreplay在實(shí)現(xiàn)的時(shí)候使用了延遲函數(shù)的概念,這涉及到底層OS很多特性,在不同系統(tǒng)上使用tcpreplay,根據(jù)系統(tǒng)不同選擇不同的延遲函數(shù)

--timer=abstime

--timer=gtod

--timer=nano

--timer=rdtsc

--timer=ioport

--timer=select

u??一些建議

1)推薦的速度控制函數(shù):--topspeed、--pps、--pps-multi(--pps-multi 比 –pps 每秒多發(fā)一個(gè)包,所以速度更快); --mbps、--multiplier 在對性能要求比較高的情況下不推薦使用,因?yàn)樾枰罅康倪\(yùn)算。

?

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

1.2.5 ?Tcpreplay套件使用示例

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

總結(jié)

以上是生活随笔為你收集整理的包嗅探和包回放简介-tcpdump,tcpreplay的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。