tmux

Tmux是一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。

补充说明

使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再“浪费”多余的终端来连接这台远程主机;

功能

  • 提供了强劲的、易于使用的命令行界面。
  • 可横向和纵向分割窗口。
  • 窗格可以自由移动和调整大小,或直接利用四个预设布局之一。
  • 支持 UTF-8 编码及 256 色终端。
  • 可在多个缓冲区进行复制和粘贴。
  • 可通过交互式菜单来选择窗口、会话及客户端。
  • 支持跨窗口搜索。
  • 支持自动及手动锁定窗口。

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
# 在 Mac OS 中,通过 brew 安装
brew install tmux
# ubuntu版本下直接apt-get安装
sudo apt-get install tmux
# centos7版本下直接yum安装
yum install -y tmux

# centos6版本需要编译安装
yum install libevent libevent-devel ncurses-devel
tar -zvxf tmux-2.3.tar.gz # (提前下载:wget https://github.com/tmux/tmux/releases/download/2.3/tmux-2.3.tar.gz)
cd tmux-2.3
./configure
make && make install

快捷键使用说明
















































































































































Ctrl+b


激活控制台;此时以下按键生效


系统操作


?


列出所有快捷键;按q返回


d


脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话


D


选择要脱离的会话;在同时开启了多个会话时使用


Ctrl+z


挂起当前会话


r


强制重绘未脱离的会话


s


选择并切换会话;在同时开启了多个会话时使用


:


进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器


[


进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出


~


列出提示信息缓存;其中包含了之前tmux返回的各种提示信息


窗口操作


c


创建新窗口


&


关闭当前窗口


数字键


切换至指定窗口


p


切换至上一窗口


n


切换至下一窗口


l


在前后两个窗口间互相切换


w


通过窗口列表切换窗口


,


重命名当前窗口;这样便于识别


.


修改当前窗口编号;相当于窗口重新排序


f


在所有窗口中查找指定文本


面板操作




将当前面板平分为上下两块


%


将当前面板平分为左右两块


x


关闭当前面板


!


将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板


Ctrl+方向键


以1个单元格为单位移动边缘以调整当前面板大小


Alt+方向键


以5个单元格为单位移动边缘以调整当前面板大小


Space


在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled


q


显示面板编号


o


在当前窗口中选择下一面板


方向键


移动光标以选择面板


{


向前置换当前面板


}


向后置换当前面板


Alt+o


逆时针旋转当前窗口的面板


Ctrl+o


顺时针旋转当前窗口的面板

1)进入tmux面板后,一定要先按ctrl+b,然后松开,再按其他的组合键才生效。
2)常用到的几个组合键:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ctrl+b ?            显示快捷键帮助
ctrl+b 空格键 采用下一个内置布局,这个很有意思,在多屏时,用这个就会将多有屏幕竖着展示
ctrl+b ! 把当前窗口变为新窗口
ctrl+b " 模向分隔窗口
ctrl+b % 纵向分隔窗口
ctrl+b q 显示分隔窗口的编号
ctrl+b o 跳到下一个分隔窗口。多屏之间的切换
ctrl+b 上下键 上一个及下一个分隔窗口
ctrl+b C-方向键 调整分隔窗口大小
ctrl+b & 确认后退出当前tmux
ctrl+b [ 复制模式,即将当前屏幕移到上一个的位置上,其他所有窗口都向前移动一个。
ctrl+b c 创建新窗口
ctrl+b n 选择下一个窗口
ctrl+b l 最后使用的窗口
ctrl+b p 选择前一个窗口
ctrl+b w 以菜单方式显示及选择窗口
ctrl+b s 以菜单方式显示和选择会话。这个常用到,可以选择进入哪个tmux
ctrl+b t 显示时钟。然后按enter键后就会恢复到shell终端状态
ctrl+b d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话

参考资料

tload

显示系统负载状况

补充说明

tload命令 以图形化的方式输出当前系统的平均负载到指定的终端。假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形。

语法

1
tload(选项)(参数)

选项

1
2
-s:指定闲时的刻度;
-d:指定间隔的时间(秒)。

参数

终端:指定显示信息的终端设备文件。

实例

使用tload命令查看系统负载情况:

1
2
3
4
5
6
tload -d 1
0.08, 0.02,0.01
0.04, 0.01, 0.00
0.04, 0.01, 0.00
0.04, 0.01,0.00
0.06, 0.02, 0.00

time

统计给定命令所花费的总时间

补充说明

time命令 用于统计给定命令所花费的总时间。

语法

1
time(参数)

参数

指令:指定需要运行的额指令及其参数。

实例

当测试一个程序或比较不同算法时,执行时间是非常重要的,一个好的算法应该是用时最短的。所有类UNIX系统都包含time命令,使用这个命令可以统计时间消耗。例如:

1
2
3
4
5
6
[root@localhost ~]# time ls
anaconda-ks.cfg install.log install.log.syslog satools text

real 0m0.009s
user 0m0.002s
sys 0m0.007s

输出的信息分别显示了该命令所花费的real时间、user时间和sys时间。

  • real时间是指挂钟时间,也就是命令开始执行到结束的时间。这个短时间包括其他进程所占用的时间片,和进程被阻塞时所花费的时间。
  • user时间是指进程花费在用户模式中的CPU时间,这是唯一真正用于执行进程所花费的时间,其他进程和花费阻塞状态中的时间没有计算在内。
  • sys时间是指花费在内核模式中的CPU时间,代表在内核中执系统调用所花费的时间,这也是真正由进程使用的CPU时间。

shell内建也有一个time命令,当运行time时候是调用的系统内建命令,应为系统内建的功能有限,所以需要时间其他功能需要使用time命令可执行二进制文件/usr/bin/time

使用-o选项将执行时间写入到文件中:

1
/usr/bin/time -o outfile.txt ls

使用-a选项追加信息:

1
/usr/bin/time -a -o outfile.txt ls

使用-f选项格式化时间输出:

1
/usr/bin/time -f "time: %U" ls

-f选项后的参数:























































































































参数描述
%Ereal时间,显示格式为[小时:]分钟:秒
%Uuser时间。
%Ssys时间。
%C进行计时的命令名称和命令行参数。
%D进程非共享数据区域,以KB为单位。
%x命令退出状态。
%k进程接收到的信号数量。
%w进程被交换出主存的次数。
%Z系统的页面大小,这是一个系统常量,不用系统中常量值也不同。
%P进程所获取的CPU时间百分百,这个值等于user+system时间除以总共的运行时间。
%K进程的平均总内存使用量(data+stack+text),单位是KB。
%w进程主动进行上下文切换的次数,例如等待I/O操作完成。
%c进程被迫进行上下文切换的次数(由于时间片到期)。

tftp

在本机和tftp服务器之间使用TFTP协议传输文件

补充说明

tftp命令 用在本机和tftp服务器之间使用TFTP协议传输文件。

TFTP是用来下载远程文件的最简单网络协议,它其于UDP协议而实现。嵌入式linux的tftp开发环境包括两个方面:一是linux服务器端的tftp-server支持,二是嵌入式目标系统的tftp-client支持。因为u-boot本身内置支持tftp-client,所以嵌入式目标系统端就不用配置了。下面就详细介绍一下linux服务器端tftp-server的配置。

语法

1
tftp(选项)(参数)

选项

1
2
3
4
-c:指定与tftp服务器连接成功后,立即要执行的指令;
-m:指定文件传输模式。可以是ASCII或者Binary;
-v:显示指令详细执行过程;
-V:显示指令版本信息。

参数

主机:指定tftp要联机的tftp服务器的ip地址或主机名。

实例

1、安装tftp服务器

需要安装xinetd、tftp和tftp-server 3个软件

如果能上网,通过yum安装:

1
2
3
yum install xinetd
yum install tftp
yum install tftp-server

如果不能上网,可以直接安装提供的rpm包:

1
2
3
rpm -ivh xinetd-2.3.14-18.fc9.i386.rpm
rpm -ivh tftp-0.48-3.fc9.i386.rpm
rpm -ivh tftp-server-0.48-3.fc9.i386.rpm

2、配置tftp服务器

修改/etc/xinetd.d/tftp文件,将其中的disable=yes改为disable=no。主要是设置TFTP服务器的根目录,开启服务。修改后的文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
service tftp
{
socket_type =dgram
protocol =udp
wait =yes
user =root
server =/usr/sbin/in.tftpd
server_args =-s /home/mike/tftpboot -c
disable =no
per_source =11
cps =100 2
flags =IPv4
}

说明:修改项server_args= -s <path> -c,其中处可以改为你的tftp-server的根目录,参数-s指定chroot,-c指定了可以创建文件。

3、启动tftp服务器并关闭防火墙

1
2
3
4
5
/etc/init.d/iptables stop        //关闭防火墙
sudo /sbin/service xinetd start

service xinetd restart
/etc/init.d/xinetd start

看到启动[OK]就可以了

4、查看tftp服务是否开启

1
netstat -a | grep tftp

显示结果为udp 0 0 *:tftp *:*表明服务已经开启,就表明tftp配置成功了。

5、tftp使用

复制一个文件到tftp服务器目录,然后在主机启动tftp软件,进行简单测试。

1
2
3
4
5
tftp 192.168.1.2
tftp>get <download file>

tftp>put <upload file>
tftp>q

6、tftp命令用法如下

1
tftp your-ip-address

进入TFTP操作:

  • connect:连接到远程tftp服务器
  • mode:文件传输模式
  • put:上传文件
  • get:下载文件
  • quit:退出
  • verbose:显示详细的处理信息
  • tarce:显示包路径
  • status:显示当前状态信息
  • binary:二进制传输模式
  • ascii:ascii 传送模式
  • rexmt:设置包传输的超时时间
  • timeout:设置重传的超时时间
  • help:帮助信息
  • ? :帮助信息

    7、如果老是出现“AVC Denial, click icon to view”的错误,并不能传输文件,需要作如下修改

修改/etc/sysconfig/selinux,将SELINUX设定为disable,使用命令setenforce 0让selinux配置文件生效。

8、Busybox中tftp命令的用法

命令格式为:

1
tftp [option] ... host [port]

如果要下载或上传文件的话是一定要用这些option的。

1
2
3
4
-g 表示下载文件 (get)
-p 表示上传文件 (put)
-l 表示本地文件名 (local file)
-r 表示远程主机的文件名 (remote file)

例如,要从远程主机192.168.1.2上下载 embedexpert,则应输入以下命令

1
tftp -g -r embedexpert 192.168.1.2

test

shell环境中测试条件表达式工具

补充说明

test命令 是shell环境中测试条件表达式的实用工具。

语法

1
test(选项)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-b<文件>:如果文件为一个块特殊文件,则为真;
-c<文件>:如果文件为一个字符特殊文件,则为真;
-d<文件>:如果文件为一个目录,则为真;
-e<文件>:如果文件存在,则为真;
-f<文件>:如果文件为一个普通文件,则为真;
-g<文件>:如果设置了文件的SGID位,则为真;
-G<文件>:如果文件存在且归该组所有,则为真;
-k<文件>:如果设置了文件的粘着位,则为真;
-O<文件>:如果文件存在并且归该用户所有,则为真;
-p<文件>:如果文件为一个命名管道,则为真;
-r<文件>:如果文件可读,则为真;
-s<文件>:如果文件的长度不为零,则为真;
-S<文件>:如果文件为一个套接字特殊文件,则为真;
-u<文件>:如果设置了文件的SUID位,则为真;
-w<文件>:如果文件可写,则为真;
-x<文件>:如果文件可执行,则为真。

实例

linux中shell编程中的test常见用法:

判断表达式

1
2
3
4
5
if test     #表达式为真
if test ! #表达式为假
test 表达式1 –a 表达式2 #两个表达式都为真
test 表达式1 –o 表达式2 #两个表达式有一个为真
test 表达式1 ! 表达式2 #条件求反

判断字符串

1
2
3
4
test –n 字符串    #字符串的长度非零
test –z 字符串 #字符串的长度是否为零
test 字符串1=字符串2 #字符串是否相等,若相等返回true
test 字符串1!=字符串2 #字符串是否不等,若不等反悔false

判断整数

1
2
3
4
5
6
test 整数1 -eq 整数2    #整数相等
test 整数1 -ge 整数2 #整数1大于等于整数2
test 整数1 -gt 整数2 #整数1大于整数2
test 整数1 -le 整数2 #整数1小于等于整数2
test 整数1 -lt 整数2 #整数1小于整数2
test 整数1 -ne 整数2 #整数1不等于整数2

判断文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
test File1 –ef File2    两个文件是否为同一个文件,可用于硬连接。主要判断两个文件是否指向同一个inode。
test File1 –nt File2 判断文件1是否比文件2新
test File1 –ot File2 判断文件1比是否文件2旧
test –b file #文件是否块设备文件
test –c File #文件并且是字符设备文件
test –d File #文件并且是目录
test –e File #文件是否存在 (常用)
test –f File #文件是否为正规文件 (常用)
test –g File #文件是否是设置了组id
test –G File #文件属于的有效组ID
test –h File #文件是否是一个符号链接(同-L)
test –k File #文件是否设置了Sticky bit位
test –b File #文件存在并且是块设备文件
test –L File #文件是否是一个符号链接(同-h)
test –o File #文件的属于有效用户ID
test –p File #文件是一个命名管道
test –r File #文件是否可读
test –s File #文件是否是非空白文件
test –t FD #文件描述符是在一个终端打开的
test –u File #文件存在并且设置了它的set-user-id位
test –w File #文件是否存在并可写
test –x File #文件属否存在并可执行

tempfile

shell中给临时文件命名

补充说明

有时候在写Shell脚本的时候需要一些临时存储数据的才做,最适合存储临时文件数据的位置就是/tmp,因为该目录中所有的内容在系统重启后就会被清空。下面是两种方法为临时数据生成标准的文件名。

tempfile命令

tempfile命令只有在基于Debian的发行版中才默认自带,比如Ubuntu,其他发行版没有这个命令。

用tempfile命令为一个临时文件命名:

1
temp_file_name=$(tempfile)

用一个加带了随机数的文件名作为临时文件命名:

1
temp_file_name="/tmp/file_$RANDOM"

$RANDOM是一个返回随机数的环境变量。

$$变量

如果没有tempfile命令的Linux发行版,也可以使用自己的临时文件名:

1
temp_file_name="/tmp/file.$"

$$是系统预定义变量,显示当前所在进程的进程号,用.$$作为添加的后缀会被扩展成当前运行脚本的进程id。

telnet

登录远程主机和管理(测试ip端口是否连通)

补充说明

telnet命令 用于登录远程主机,对远程主机进行管理。telnet因为采用明文传送报文,安全性不好,很多Linux服务器都不开放telnet服务,而改用更安全的ssh方式了。但仍然有很多别的系统可能采用了telnet方式来提供远程登录,因此弄清楚telnet客户端的使用方式仍是很有必要的。

语法

1
telnet(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-8:允许使用8位字符资料,包括输入与输出;
-a:尝试自动登入远端系统;
-b<主机别名>:使用别名指定远端主机名称;
-c:不读取用户专属目录里的.telnetrc文件;
-d:启动排错模式;
-e<脱离字符>:设置脱离字符;
-E:滤除脱离字符;
-f:此参数的效果和指定"-F"参数相同;
-F:使用Kerberos V5认证时,加上此参数可把本地主机的认证数据上传到远端主机;
-k<域名>:使用Kerberos认证时,加上此参数让远端主机采用指定的领域名,而非该主机的域名;
-K:不自动登入远端主机;
-l<用户名称>:指定要登入远端主机的用户名称;
-L:允许输出8位字符资料;
-n<记录文件>:指定文件记录相关信息;
-r:使用类似rlogin指令的用户界面;
-S<服务类型>:设置telnet连线所需的ip TOS信息;
-x:假设主机有支持数据加密的功能,就使用它;
-X<认证形态>:关闭指定的认证形态。

参数

  • 远程主机:指定要登录进行管理的远程主机;
  • 端口:指定TELNET协议使用的端口号。

实例

1
2
3
4
5
6
7
8
9
10
$ telnet 192.168.2.10
Trying 192.168.2.10...
Connected to 192.168.2.10 (192.168.2.10).
Escape character is '^]'.

localhost (Linux release 2.6.18-274.18.1.el5 #1 SMP Thu Feb 9 12:45:44 EST 2012) (1)

login: root
Password:
Login incorrect

一般情况下不允许root从远程登录,可以先用普通账号登录,然后再用su -切到root用户。

1
2
3
4
$ telnet 192.168.188.132
Trying 192.168.188.132...
telnet: connect to address 192.168.188.132: Connection refused
telnet: Unable to connect to remote host

处理这种情况方法:

  1. 确认ip地址是否正确?
  2. 确认ip地址对应的主机是否已经开机?
  3. 如果主机已经启动,确认路由设置是否设置正确?(使用route命令查看)
  4. 如果主机已经启动,确认主机上是否开启了telnet服务?(使用netstat命令查看,TCP的23端口是否有LISTEN状态的行)
  5. 如果主机已经启动telnet服务,确认防火墙是否放开了23端口的访问?(使用iptables-save查看)

启动telnet服务

1
service xinetd restart

配置参数,通常的配置如下:

1
2
3
4
5
6
7
8
9
10
service telnet
{
disable = no #启用
flags = REUSE #socket可重用
socket_type = stream #连接方式为TCP
wait = no #为每个请求启动一个进程
user = root #启动服务的用户为root
server = /usr/sbin/in.telnetd #要激活的进程
log_on_failure += USERID #登录失败时记录登录用户名
}

如果要配置允许登录的客户端列表,加入

1
only_from = 192.168.0.2 #只允许192.168.0.2登录

如果要配置禁止登录的客户端列表,加入

1
no_access = 192.168.0.{2,3,4} #禁止192.168.0.2、192.168.0.3、192.168.0.4登录

如果要设置开放时段,加入

1
access_times = 9:00-12:00 13:00-17:00 # 每天只有这两个时段开放服务(我们的上班时间:P)

如果你有两个IP地址,一个是私网的IP地址如192.168.0.2,一个是公网的IP地址如218.75.74.83,如果你希望用户只能从私网来登录telnet服务,那么加入

1
bind = 192.168.0.2

各配置项具体的含义和语法可参考xined配置文件属性说明(man xinetd.conf)

配置端口,修改services文件:

1
# vi /etc/services

找到以下两句

1
2
telnet 23/tcp
telnet 23/udp

如果前面有#字符,就去掉它。telnet的默认端口是23,这个端口也是黑客端口扫描的主要对象,因此最好将这个端口修改掉,修改的方法很简单,就是将23这个数字修改掉,改成大一点的数字,比如61123。注意,1024以下的端口号是internet保留的端口号,因此最好不要用,还应该注意不要与其它服务的端口冲突。

启动服务:

1
service xinetd restart

telint

切换当前正在运行系统的运行等级

补充说明

telint命令 用于切换当前正在运行的Linux系统的运行等级。

语法

1
telint(选项)(参数)

选项

1
-t:指定等待的秒数。

参数

运行等级:指定要切换的运行等级。

tee

把数据重定向到给定文件和屏幕上

补充说明

tee命令 用于将数据重定向到文件,另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

!

存在缓存机制,每1024个字节将输出一次。若从管道接收输入数据,应该是缓冲区满,才将数据转存到指定的文件中。若文件内容不到1024个字节,则接收完从标准输入设备读入的数据后,将刷新一次缓冲区,并转存数据到指定文件。

语法

1
tee(选项)(参数)

选项

1
2
-a:向文件中重定向时使用追加模式;
-i:忽略中断(interrupt)信号。

参数

文件:指定输出重定向的文件。

在终端打印stdout同时重定向到文件中:

1
2
3
4
5
6
7
8
9
10
11
12
ls | tee out.txt
1.sh
1.txt
2.txt
eee.tst
EEE.tst
one
out.txt
string2
www.pdf
WWW.pdf
WWW.pef
1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost text]# ls | tee out.txt | cat -n
1 1.sh
2 1.txt
3 2.txt
4 eee.tst
5 EEE.tst
6 one
7 out.txt
8 string2
9 www.pdf
10 WWW.pdf
11 WWW.pef

tcpreplay

将PCAP包重新发送,用于性能或者功能测试

补充说明

简单的说, tcpreplay 是一种pcap包的重放工具,它可以将用ethreal、wireshark工具抓下来的包原样或经过任意修改后重放回去。它允许你对报文做任意的修改(主要是指对2层、3层、4层报文头),指定重放报文的速度等,这样tcpreplay就可以用来复现抓包的情景以定位bug,以极快的速度重放从而实现压力测试。

选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
-A "<args>" 在使用 tcpdump 风格打印输出信息时,同时再调用tcpdump中的参数, 默认已经带有“-n,-l”,所以一般看到的都是ip地址,而没有主机名的打印,注意这个是在tcpreplay使用了-v参数时才能使用,不带-v不会报错,但是没有实际意义。格式:-vA “nnt”表示以tcpdump风格输出报文信息,并且不打印时间戳、主机名、端口服务名称。注意不要使用-c参数来指定打印的数据报文的个数,这样发送出去的报文也会变少。
-c <cachefile> 双网卡回放报文必选参数,后面紧跟cache文件名,该文件为tcpprep根据对应的pcap文件构造出来。
-D 把应用层的数据,使用dump mode写入到指定文件中去,和-w、-W 参数一起使用。
-e <ip1:ip2> 指定端点的ip,即把发送报文的和接收的报文的ip都修改称对应的参数值中指定的ip,但是这样发送的出的报文不会区分client和server。。
-f <configfile> 指定配置文件。
-F 在发送报文时,自动纠正错误的校验和。对测试DUT的校验和检验。
-h 显示帮助文件。
-i <nic> 双网卡回放报文必选参数,指定主接口。
-I <mac> 重写主网卡发送出报文的目的MAC地址。
-j <nic> 双网卡回放报文必选参数,指定从接口。
-J <mac> 重写从网卡发送出报文的目的MAC地址。
-k <mac> 重写主网卡发送报文的源MAC地址。
-K <mac> 重写从网卡发送报文的源MAC地址。
-l <loop> 指定循环的次数。
-L <limit> 指定最大的发包数量。可以在确认连接的调试时使用。
-m <multiple> 指定一个倍数值,就是必默认发送速率要快多少倍的速率发送报文。 加大发送的速率后,对于DUT可能意味着有更多的并发连接和连接数,特别是对于BT报文的重放, 因为连接的超时是固定的,如果速率增大的话, 留在session表中的连接数量增大,还可以通过修改连接的超时时间来达到该目的。
-M 表示不发送“火星”的ip报文,man文件中的定义是 0/8、172/8、 255/8。
-n 在使用-S参数,不对混杂模式进行侦听。
-N <CIDR1:CIDR2,...> 通过伪造的NAT,重写IP地址。这个参数应该有很重要的应用,目前没有测试使用。
-O 没有测试使用。
-p <packetrate> 指定每秒发送报文的个数,指定该参数,其它速率相关的参数被忽略,最后的打印信息不会有速率和每秒发送报文的统计。
-P 表示在输出信息中打印PID的信息,用于单用户或单帐户模式下暂停和重启程序。
-r <rate> 指定发送的速率。目前-m/-r/-p这3个参数的相互关系。
-R 让网卡极限速度发数据包。
-t <mtu> 指定MTU,标准的10/100M网卡的默认值是1500。
-T Truncate packets > 截去报文中MTU大于标准值的部分再发送出去,默认是不发送,skip掉。
-v 每发送一个报文都以 tcpdump 的风格打印出对应的信息。
-V 查看版本号。
-w <file> 将主网卡发送的报文写入一个文件中,参数后紧跟文件名。

实例

1、重放在客户端 ftp 连接的报文

a、在客户端使用 ethereal 抓包,存为 ftp.pcap 文件。

b、 将 ftp.pcap 文件进行 tcpprep 操作,制作 cache 文件。

1
[root@A ~]# tcpprep -an client -i ftp.pcap -o ftp.cache –v

c、 将 DUT 设备的两个接口和 PC 的两个接口使用网线连接,使用 tcpreplay 重 放报文。注意防火墙的配置为网桥(透明)模式。

1
[root@A ~]# tcpreplay -c ftp.cache -i eth0 -j eth1 ftp.pcap -R –v

-R 参数表示全速发送,-v 显示打印信息。

2、重放在客户端 BT 连接的报文

a、在实验室 BT 下载一些台湾的娱乐节目和热门的大片,使用 ethereal 抓包, 存为 bt.pcap 文件。注意 pcap 文件大小的控制,对 pc 的内存要求比较高,我保 存了一个 600 多 M 的 pcap 文件用了 40 多分钟,大家有需要可以直接从实验室 copy。

b、将 bt.pcap 文件进行 tcpprep 操作,制作 cache 文件。

1
[root@A ~]# tcpprep -an client -i bt.pcap -o bt.cache -C "100M BT Packet" –v

制作 cache 文件,在 cache 文件中写入“100M BT Packet”的注释。

c、使用 tcpreplay 重放报文。

1
[root@A ~]# tcpreplay -c bt.cache -i eth0 -j eth1 bt.pcap -v –R

3、重放 tftp 服务器上抓到的报文

a、在 tftp 服务器上使用 ethereal 抓包,存为 tftp.pcap 文件。

b、将 pcap 文件进行 tcpprep 的操作,制作 cache 文件。

1
[root@A ~]# tcpprep -an server -i tftp.pcap -o tftp.cache –v

注意:我在测试的时候犯了一个错误,使用 DUT 的 tftp 升级来做实验,同时穿 过 DUT 重放报文,结果在网卡发送报文的后,DUT 的 mac 地址做了的回应,导致 交互过程没有穿过 DUT,这个问题比较搞笑,上午弄了半天才发现原因,开始还 以为 udp 的连接不能重放。

c、使用 tcpreplay 重放报文。

1
[root@A ~]# tcpreplay -c tftp.cache -i eth0 -j eth1 tftp.pcap –v