包嗅探和包回放简介-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

posted @ 2013-11-28 09:25  cgj  阅读(10152)  评论(0编辑  收藏  举报