inux下网络发包工具 Tcpreplay3.x。
第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包了。
inux下网络发包工具 Tcpreplay3.x。的更多相关文章
- xcap发包工具的简单使用1(构造报文)
xcap是一个免费的网络发包工具,可以构造和发送常用的网络报文,如arp,ip,icmp,udp等,支持构造报文和发送报文等. 报文隶属于报文组,每个报文组包含多个报文,因此,创建报文首先要创建报文组 ...
- [No00006B]方便的网络下载工具wget 可下载网站目录下的所有文件(可下载整个网站)
wget是linux下命令行的下载工具,功能很强大,它能完成某些下载软件所不能做的,比如如果你想下载一个网页目录下的所有文件,如何做呢?网络用户有时候会遇到需要下载一批文件的情况,有时甚至需要把整个网 ...
- [转]Linux下网络常用命令和工具
转自:http://int32bit.me/2016/05/04/Linux%E5%B8%B8%E7%94%A8%E7%BD%91%E7%BB%9C%E5%B7%A5%E5%85%B7%E6%80%B ...
- [原创]Linux下网络性能测试Netperf工具介绍及安装
[原创]Linux下网络性能测试Netperf工具介绍及安装 1 官方网站 http://www.netperf.org/netperf/ 2 Netperf介绍 Netperf是一种网络性能的测试工 ...
- 三款经常使用IP发包工具介绍
AntPower 版权全部© 2003 技术文章http://www.antpower.org 第1 页共14 页AntPower-技术文章三款经常使用IP 发包工具介绍小蚁雄心成员郎国军著lgj@q ...
- CentOS下性能监测工具 dstat
原文链接:http://www.bkjia.com/Linuxjc/935113.html 参考链接:https://linux.cn/article-3215-1.html,http://lhfli ...
- Linux下网络流量实时监控工具
Linux下网络流量实时监控工具大全 在工作中发现,经常因为业务的原因,需要即时了解某台服务器网卡的流量,虽然公司也部署了cacti软件,但cacti是五分钟统计的,没有即时性,并且有时候打开监控页面 ...
- 网络性能测试工具iperf详细使用图文教程
Iperf是一个网络性能测试工具.Iperf可以测试TCP和UDP带宽质量.Iperf可以测量最大TCP带宽,具有多种参数和UDP特性. Iperf可以报告带宽,延迟抖动和数据包丢失.利用Iper ...
- 网络性能测试工具iperf详细使用图文教程【转载】
原文:http://blog.163.com/hlz_2599/blog/static/142378474201341341339314/ 参考:http://man.linuxde.net/iper ...
随机推荐
- java项目打成jar包时引用了第三方jar,此时我们该如何解决呢
Web项目做多了,反而对单纯的java项目陌生了,今天我们在开发项目的过程中,碰到一个这样的需求:需要将java项目放到linux系统上跑起来,当然这个javaSE项目是带main方法的.我们知道在I ...
- C# XML与对象互相转换
using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; u ...
- Hibernate save或者persist 后获取主键ID
一个自增长ID的对象被save或者persist后,会返回其主键ID: Department department = new Department(); department.setName(&qu ...
- windows下安装php真正的多线程扩展pthreads教程
扩展地址:http://docs.php.net/manual/zh/book.pthreads.php 注意事项php5.3或以上,且为线程安全版本.apache和php使用的编译器必须一致.通过p ...
- Android Training精要(七)内存管理
在2.3.3及以下版本: 通過定義兩個整形變量來檢測bitmap是否display過或者已經在緩存中 下面的代碼當bitmap滿足兩個條件就被回收掉: 1. 兩個整形變量都變為0 2. bitmap不 ...
- IBinder类的中文翻译
远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级远程调用机制的核心部分.这个接口描述了和远程对象交互的抽象协议.不要直接实现这个接口,而是通过继承Binder来实现. ...
- 非常有用的Java程序片段
1.向文件末尾添加内容 BufferedWriter out = null; try { out = new BufferedWriter(new FileWriter(”filename”, tru ...
- poj magic number
Problem H Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Sub ...
- java的好资料总结
1jvm的垃圾回收http://wenku.baidu.com/link?url=gf08pYxNxVC2ZR607Qv9gn1pkFs5T1Pp5YHxISBEFdcz0D1HdK-7YOuSDft ...
- Linux Mono OpenShift Cloud9 rhc
OpenShift Mono Asp.net MVC4 MySql 1..Net4.0+Mvc4,不要使用太新的.Net4.5.1+Mvc5. 2.MySql数据库:MySql.Data.Dll 从官 ...