第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包了。

4.6. TCPReplay使用

TCPReplay主要功能是将PCAP包重新发送,用于性能或者功能测试。但是在测试环境与原转包系统结构一般是不同的。比如被测试机的二层MAC地址与抓包机器的MAC不同,所以被测试机在二层处理时发现目的MAC不是自己,就会把packet丢弃。协议栈把目的MAC与本机的MAC匹配,才会将packet交给上层处理。为了实现测试,需要使用TCPReplay的两个配套工具,TCPPrep和TCPRewrite。这两个工具和TCPReplay的详细用法可以通过MAN来查询,这里不再细讲。此处通过一个经过测试的实例来介绍他们的用法。

测试拓扑图如下图所示

其中TCPReplay机器的配置为:

OS: Ubuntu9.04

内核版本:2.6.28

TCPReplay版本:3.3.2(不同版本命令可能稍有不同,具体请通过MAN查询)

网卡:Intel e1000e 双千兆

PCAP文件:test.tcpdump

测试第一步:预处理生成Cache,命令为

tcpprep -a client -i test.tcpdump -o test.cache

这条命令将PCAP文件分成客户端和服务端,默认为客户端。发送时packet将分别从客户端和服务端发出。

测试第二步:重写IP地址和MAC地址,命令为:

tcprewrite -e 192.85.1.2:192.85.2.2 --enet-dmac=00:15:17:2b:ca:14,00:15:17:2b:ca:15 --enet-smac=00:10:f3:19:79:86,00:10:f3:19:79:87 -c test.cache -i test.tcpdump -o 1.pcap

这条命令将eth0设为服务端接口,eth1设为客户端接口,重写了IP和MAC,可通过wireshark等工具打开1.pcap,查看修改是否成功。

测试第三步:重放packet,首先为了获取更高的发送速度,可以把文件放到/dev/shm目录下,最高速度有1倍左右的加速。重放命令为:

tcpreplay -i eth0 -I eth1 -l 1000 -t -c /dev/shm/test.cache /dev/shm/1.pcap

这条命令将文件以最高速率循环发送1000次。

linux发包密码,linux下网络发包工具(cp过来的)相关推荐

  1. Linux如何安装iperf软件,Linux 下网络性能测试工具 iperf 的安装和使用

    很久没写文章,iperf 也一直有用,感受不错就记录一下html 说明: OS :CentOS 6.4 x86_64 Server: 192.168.100.55 Client: 192.168.10 ...

  2. linux es连接mysql_LINUX下使用elasticsearch-jdbc工具实现MySQL同步到ElasticSearch 以及linux 64位centos系统安装jdk1.8...

    第一步:环境匹配 1)elasticsearch 2.3.3 成功安装部署 2)mysql安装成功,增删改查无误~~. 3)要保证elasticsearch-jdbc的版本要与elasticsearc ...

  3. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤

    Linux下批量修改服务器用户密码方法步骤 密码快要过期.由于机器数量众多,因此采用批量修改密码的方式来进行处理. 下面是具体步骤: 1.配置ssh免key # ssh-keygen -t rsa - ...

  4. vmware linux忘记密码,linux虚拟机忘了密码怎么办?

    针对楼主的提问,大致分几个不同版本的Linux系统(redhat Linux;Ubuntu;CentOS)来讨论: 1,redhat Linux系统: 具体操作过程如下: 1.重新启动虚拟机,在出现启 ...

  5. linux 动态密码,Linux动态密码

    关于Linux动态密码的好处就不用多说了. 我的系统的是rhel5 安装软件包: expect-5.43.0-5.1.i386.rpm        ## RHEL5自带有 利用命令mkpasswd生 ...

  6. linux rcp 密码,Linux rcp命令

    Linux rcp命令 Linux rcp命令用于复制远程文件或目录. rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件 ...

  7. linux 嗅探密码,Linux下嗅探又一实例截取

    在SecureCRT下利用rz命令上传我们用到的arpsniffer.c,然后编译: [root@bbs111 root]# gcc -I/usr/local/include -L/usr/local ...

  8. 安装dig工具linux系统,在windows下安装dig工具

    下载地址: http://members.shaw.ca/nicholas.fong/dig/ 将此压缩包解压至例如 c:\dig 目录 检查 %WINDOWS%\system32 下有没有 msvc ...

  9. linux p7zip密码,linux下7zip使用方法

    现在流行的压缩软件有WIN平台下的winrar, winzip.Linux下则是bzip2, gzip等等.现在有一个叫做7z的压缩软件,号称是目前压缩比最大的软件.WIN平台下使用的是图形界面,使用 ...

最新文章

  1. ejb生命周期_EJB 3.x:生命周期和并发模型(第2部分)
  2. TortoiseGitPlink提示输入密码解决方法
  3. c语言10个数如何求最大值,C语言,输入10个数怎样输出10个数中最大值,最小值(大一计算机)...
  4. 获奖者:武永卫,男,清华大学计算机系教授、博士生导师,《大数据》杂志编委。...
  5. oracle存储sql片段引入_强大的跨数据库访问组件 UniDAC使用教程:注释和SQL函数...
  6. 时尚潮流色彩趋势+C4D元素|还在为设计素材发愁?
  7. python的zip()函数,压缩多个可迭代对象
  8. python中隔行输出_在Python中的分隔行上打印列表元素
  9. Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
  10. Qi v1.2.4协议 之 11 Foreign Object Detection 【英文翻译】
  11. HttpClient下载图片不完整的解决办法
  12. 06.第七章、成本管理
  13. 语音识别中声学模型训练过程-GMM(一)
  14. 从专业角度分析国内创客教育发展
  15. background-clip和background-origin
  16. 微信公众账号导航平台
  17. python 获取微妙时间差
  18. unity 设置 异形按钮
  19. 中科红旗假竟拍与国有资产真流失
  20. JSON.parse()、JSON.stringify、 parseInt()

热门文章

  1. 小汤学编程之JDBC(二)——dbutils框架和DataSource连接池
  2. man hdparm
  3. C语言字符串库函数的实现
  4. 4.openSession() 、 getCurrentSession()与session上下文
  5. Flutter TextField 边框样式以及提示文本 、Flutter输入文本TextField
  6. HashMap Hashtable TreeMap的异同点
  7. 如何通过一个结构体成员变量的地址找到该结构体的首地址?[备忘]
  8. Elasticsearch 6.3.2 安装 search-guard
  9. day32 管道, 数据共享, 进程池, 回调函数
  10. h:commandButton