Linux自动测试工具研究_第1页
Linux自动测试工具研究_第2页
Linux自动测试工具研究_第3页
Linux自动测试工具研究_第4页
Linux自动测试工具研究_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux自动测试工具研究提纲一、Linux系统简介常用命令目录树介绍软件安装二、发包工具pktgensendipTcpreplay三、自动测试tcpdumpshell脚本expect编程minicom四、举例一、Linux系统简介Linux常用命令ls:显示当前目录的内容,类似dos下的dircd:改变当前目录,跟dos下的cd命令基本一致mkdir:创建目录cp:复制文件或目录mv:移动或更名文件rm:删除文件或目录vi/vim:文本编辑器cat:输出文件内容find/locate:查找文件su:切换用户ps:查看系统进程kill:杀死进程man:查看帮助文件Linux的目录树/根目录[root@linux/]#ls/64bootetclibmediaoptrootselinuxsysusrbindevhomelost+foundmntprocsbinsrvtmpvar/boot:启动linux的核心文件/etc:系统管理所需要的配置文件和子目录/lib:系统基本的动态链接共享库/root:超级用户主目录/usr:各种应用程序和文件/bin:binary,存放最经常使用的命令/dev:各种外设,如硬盘,光驱/home:用户的主目录,如/home/zoulei,即~zoulei/mnt:用于临时挂载别的文件系统/proc:虚拟的目录,是系统内存的映射。可以访问它来获取系统信息。/sbin:superuser的常用系统管理程序/tmp:临时文件夹/var:为了保持/usr的相对稳定,那些经常被修改的目录可以放在这个目录下。顺带说一下系统的日志文件就在/var/log目录中Linux软件安装(一)rpm包,可执行文件安装

由于rpm格式的通常是已编译的程序,下载时需注意平台。如expect-5.43.0-15.fc10.i386.rpm。

rpm包安装比较简单,以安装expect为例:

rpm–ivhexpect-5.43.0-15.fc10.i386.rpm(安装) rpm–qexpect或rpm–qa|grepexpect(查询是否安装) rpm–eexpect(卸载)tar包,源码安装

一般文件后缀为tar.gz的,都是用tar工具打包的源码,需要解压、编译、安装。常用的命令是(以tcpreplay为例):

tar-zxvftcpreplay-3.4.3.tar.gz(解压) cdtcpreplay-3.4.3(进入解压后的文件夹)

./configure(准备编译)

make(编译)

makeinstall(安装)

makeuninstall(卸载) 大多数软件包都可以用以上方法安装,有些软件则需要解压后参照README文件。Linux软件安装(二)二、发包工具PktgenSendipTcpreplay注:本文所有测试都基于fedora10,墙裂推荐!!!(一)pktgenpktgen pktgen是linux下的一种发包工具。

pktgen需要编译为系统内核模块。因此,它最大的优点是发包快。 它不像通常的应用程序一样,有相应的命令。而是通过/proc文件系统作为用户接口,通过写proc文件来控制pktgen的动作。

pktgen能够发送变化源、目的MAC、源、目的IP的数据包,支持多网卡发包。缺点:不能简单指定发什么协议包。不能指定VLAN。 参考文档《pktgen_paper.pdf》pktgen安装1.修改内核源码下面的.config文件(fc10在/usr/src/kernels/-117.fc10.i686下,其它linux版本可能不同),添加以下行:

CONFIG_NET_PKTGEN=m2.重新编译内核(网上有很多介绍,比较麻烦,有兴趣的可以看看)3.编译完成后,用insmod命令加载模块,恭喜你,可以运行pktgen了。还是以fc10为例:

[root@linux/]#insmod/lib/modules/-117.fc10.i686/kernel/net/core/pktgen.kopktgen使用方法 insmod完成后,会创建一个系统进程pktgen/0(ps可以看到).通过往各文件中写数据,达到配置参数,控制发包过程的目的。

1)/proc/net/pktgen/kpktgend_0:

该文件用于添加、删除网卡。可以添加多网卡。最多测试了4网卡。 可用参数:add_device,rem_device,max_before_softirq 2)/proc/net/pktgen/ethx:

执行后的结果也存在这个文件里。 该文件用于配置网卡x的发包参数。srcmac,dstmac,ip,发包数等等。可以发指定数目包或持续发包。支持递增或随机的ip或mac,支持ipv6,能配置UDP端口(递增或随机)。不支持TCP。其它的都不能配置,如VLAN,各种payload不可配。3)/proc/net/pktgen/pgctrl: 用户发包控制。 可用参数:start,stoppktgen参数1)Pgcontrolcommands: start;stop2)Processcommands: add_device;rem_device_all;max_before_softirq3)Devicecommands: debug;clone_skb;clear_counters;pkt_size;min_pkt_size;max_pkt_size;frags;count;ipg;dst;dst_min;dst_max;src_min;src_max;dst6;src 6;dstmac;srcmac;src_mac_count;dst_mac_count;flag;udp_src_min;udp_src_max;udp_dst_min;udp_dst_max;flows;flowlen举例(二)Sendipsendip(1) sendip,可以用命令行方式配置并发送ip报文。根据mansendip,支持的协议有ipv4,ipv6,icmp,tcp,udp,bgp,rip,ripng,ntp,即这些协议可以以关键字的形式配置各个字段。 安装非常简单,最新版本2.5。可以在知识库上找到tar.gz和rpm的安装包。使用方法:sendip[-v][-ddata][-h][-fdatafile][-pmodule][moduleoptions]hostname

例如:sendip-vipv4-is-id-pudp-us8000-ud4000-dasdfasdf

这条命令的效果就是发送源ip,源端口8000,目的ip,目的端口4000的设备上,数据包的内容是asdfasdf。其中hostname参数(-d前面那个)目的ip是必填项。sendip(2)sendip(3) Sendip没有指定网卡的参数。实际上,程序会根据hostname(目的ip)查找本地的arp表,如果没有则发送arp请求,得到应答后从相应的端口发出,跨网段则发向网关。因此测试时可以先添加任意一条静态arp,并把该ip作为hostname字段,就可以往指定网卡发送报文。而报文的实际源、目的ip可以用-is,-id参数随便填。sendip(4)需要说明的是,操作系统本身在发包前会重写ipheader的某些字段,因此sendip的某些配置将不生效:Srcip,如果配置为,会自动重写为网卡真实ip。IPchecksum,系统总会重写为正确值,无法进行错误checksum测试。Totalpacketlength,系统总会重写为正确值。sendip(5)---手工编包对于不能以关键字方式配置的协议,例如ospf,可以使用两个option:-d(手工配)或-f(导入文本文件,即-d的内容)。除了ipheader的checksum,其它的checksum都不会自动计算。例如,我要发送一个ospfhellopacket,就要用ixia先发一个包。可以保存为文件,方便以后调用。

eg:

sendip-v-pipv4-il68-it1-ip0x59-is-id-d0x020100300a01bc03000000002e8c00000000000000000000ffffff00000a0201000000280a0191010a0191030a01c801参考文档:

mansendiptcpreplay Tcpreplay是一种用于Unix系统或类Unix系统上重放网络包的测试工具。它可以将tcpdump、ethereal和wireshark等软件抓取到的pcap格式的数据包,经过处理,从指定的网卡发送出去。Tcpreplay是一系列工具的总称,包括tcpreplay、tcprewrite和tcpprep等。目前最新版本是3.4.3。Tcpreplay各种工具tcpreplay:重发pcap文件中的数据包。 可以指定发包网卡,速率,发包间隔,发包个数,修改包长,循环次数等参数。tcprewrite:改写pcap数据包的2-4层的头部信息。参数很多,未一一测试。 可以修改源、目的MAC地址、增删802.1qVlantag; 修改IPv4/v6地址,据说可以随机产生src/dstip,还可以不修改广播地址。会自动重算ipheaderchecksum。还可以修改ip头的部分字段(不是全部),如ttl,tos等。 修改TCP/UDPport.tcpprep:区分pcap数据包的流向,即区分出客户端和服务器。 分类的策略非常灵活,包括自动区分、按网段、按正则表达式匹配源ip、按TCP/UDP端口、按源Mac等,还可以指定只处理pcap文件中的某些包。tcpprep tcpprep提供4种splitmode,来区分哪些包是server端的,哪些包是client端的。

1)auto:bridge/router/client/server 2)ipv4/ipv6:CIDR/regex 3)TCP/UDPport 4)Macaddressprep---autosplitmodeautosplit的策略是:1)认为发送tcpsyn、dnsrequest,收到icmpportunreachable的一端是client。2)认为发送tcpSyn/ACK、dnsreply或icmpportunreachable的一端是server。

bridge/router/client/server等几种模式的区别是:router与bridge相比,可以用-m,-M参数按网段划分C/S;client模式对不能分类的报文默认为client端;server模式对不能分类的报文默认为server端。prep---CIDR&RegexmodeCIDR模式,用主机+掩码来区分C/S,多个网段用逗号分割。如: /24,/16Regex模式,用正则表达式匹配serverip。如:

--regex=“(10|20)\..*”表示10.x.x.x或20.x.x.x是服务器端prep---PortMode默认0~1023端口的为服务器端,其它是client端。想自定义端口怎么办? 用--service=filename指定服务端口。

filename是一个文件,按照/etc/services的格式定义,在文件内的即为服务器端:service-nameport/protocolaliases#commentbootps 67/udpbootpc 68/udpdhcpc#BOOTPclientprep---MacMode按serversrcmac区分,用逗号分割多个。00:00:00:00:00:01,00:00:00:00:00:02prep---Include/Exclude(1)用-x参数指定处理哪些包,其它包不分类也不发送用-X参数指定不处理哪些,只分类和发送其它包-x和-X不能同时使用。例子:-xS:/8(只处理源/8的报文)-xD:/8(只处理目的/8的报文)-xB:/8(只处理源和目的都是/8的报文)-xE:/8(只处理源和目的都不是/8的报文)prep---Include/Exclude(2)-xP:1-5,9,72(只处理第1-5,9,72个包) ***软件有个bug,导致这个命令不生效,请使用知识库上已解压的源码包安装,修改了这个问题。-xF:“tcpport22”(只处理tcp端口22的包文) ***引号里面的内容遵循winpcapBPF语法,后面在tcpdump会介绍,这是一种定义过滤包规则的语法。prep---Include/Exclude(3)Exclude语法和Include类似-XS:/8-XD:/8-XB:/8-XE:/8-XP:1-5,9,72-XF:“tcpport22”prep---Include/Exclude(4)tcprewrite用法:$tcprewrite--infile=input.pcap--outfile=output.pcap$tcprewrite--endpoints=:--cachefile=test.cache--infile=test.pcap--outfile=test_rewrite.pcap$tcprewrite--enet-dmac=00:00:00:00:00:01--enet-smac=00:00:00:00:00:02--infile=input.pcap--outfile=output.pcap--enet-vlan=del删除vlantag--enet-vlan=add--enet-vlan-tag=40--enet-vlan-cfi=1--enet-vlan-pri=4增加tag,vid40,cfi1,pri4--tos=50设置tos50--portmap=80:8080,22:8022

tcpreplay(1)例子:tcpreplay-ieth0sample.pcap***从eth0口发送cample.pcap文件的内容。这是最简单的用法。要发送prep和rewrite后的报文,后面介绍。各种速率控制参数:

--topspeed(以最快速率发送) --mbps10.0(以10mbps) --multiplier7.3(按抓到的包速率的7.3倍发包) --pps=25(按25pps) --oneatatime(每次发包询问发几个包,常和-v结合用于调试)tcpreplay(2)--loop=10(重复发送10次)--loop=0(一直发,直到按下ctrl-c)--quiet(用静默模式发包,不打印)--cashefile=sample.cache(使用tcpprep处理过的文件发包)--timer=(设置发包间隔)tcpreplay(3)如何提高tcpreplay发包性能?用--topspeed或--pps/--pps-muti,不要用--mbps用--quite用--enbale-file-cache用好的网卡tcpreplay(4)举例三、自动测试tcpdumpTcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

eg: tcpdump-ieth0-v-c10-wsample.pcap tcpdump-Ieth1udpport67orudpport68tcpdump---BPF过滤语法:BPF参考文档:WinPcap_BPF_Fiter.pdfsrc(dst)hostsrc(dst)net/24hostnet/24ethersrc(dst)00:00:00:00:00:1dstport68ip/ip6/arp/tcp/udp……tcpdump导入pcap文件:tcpdump-wtest.pcap导入文本文件:tcpdump-l>tcpcap.txt

检验预期的包是否抓到,除了可以用tcpdump本身的BPF语法过滤外,还可以将结果导入文件后,用grep命令搜索指定的报文。grep支持正则表达式。

eg:

grep"arpreply3"tcpcap.txtShell脚本 shell:操作系统与外部最主要的接口。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。

shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shellscript(非交互)方式执行。

shellscript是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shellscript是命令行命令简单的组合到一个文件里面。

较为通用的shell有标准的Bourneshell(sh)和Cshell(csh)。shell脚本一般文件后缀为.sh,如test.sh第一行#!/bin/bash定义了shell的解释器。下面才是执行各种命令的集合:test.sh: #!/bin/bash ls echo“test”运行shell脚本脚本编完了,怎样运行?要使脚本可执行,首先要chmod:

chmod+xfilename然后当前路径下用./filename,绝对路径可不加“.”

[root@linuxzoulei]#./test.sh

rpm

shell

capturedtest.csendip_shtest.sh test

或者:

[root@linuxzoulei]#/home/zoulei/test.shShell脚本怎样编shell脚本,以后再单独介绍吧,内容太多expect编程 Shell对程序提供了最小限度的控制(开始,停止,等等),而把交互的特性留给了用户。

这意味着有些程序,你不能非交互的运行,比如passwd。

有一些程序可以非交互的运行,但在很大程度上丧失了灵活性。

Expect的出现,解决了在Unix环境中长期存在着的交互问题。

Expect使用Tcl作为语言核心。不管程序是交互和还是非交互的,Expect都能运用。 除了遵循expect本身和tcl的语法,要运行linuxshell命令也很简单,exec就搞定了。Windows下的expect:ActiveState BasedonExpectV5.39andTcl8.4+,runsonXP/NT/2k.expect一句话描述expect的功能: 实现用户和程序的交互式对话,即以灵活可控的方式从程序读或向程序写。 例如:telnet到主机,用expect编程,出现“username:”则向telnet程序输入用户名,出现“password:”则输入密码,从而实现自动登录。几种定义expect解释器的方式1).exp脚本

#!/usr/bin/expect2).tcl脚本

#!/usr/bin/tclsh packagerequireExpect3).sh脚本

#!/bin/sh #\ exectclsh"$0"${1+"$@"} packagerequireExpectexpect expect语言是基于tcl的,除了tcl的命令,expect还有一些特有的命令。

spawn命令激活一个Unix程序来进行交互式的运行。

send命令向进程发送字符串。

expect命令等待进程的某些字符串。telnet.exp脚本示例#!/usr/bin/expect##以用户aaa:aaatelnet到交换机并showrunspawntelnetexpect“*login:”send“aaa\r"expect"*Password:"send“aaa\r"expect"*>"send"enable\r"expect"*#"send“showrun\r“for{}{1}{}{#循环翻页

expect{ "*More*"{send“\r"} "*#"{send"exit\r";break} }}interact#interact不能少,把控制转移给用户

expect命令expect命令手册描述如下:

expect

patlist1

action1

patlist2

action2.....

该命令一直等到当前进程的输出和以上的某一个模式相匹配,或者等到时间超过一个特定的时间长度,或者等到遇到了文件的结束为止。如果最后一个action是空的,就可以省略它。类似tcl的case。

expect匹配支持正则表达式,匹配到的字符串存在$expect_match。 超时时间默认10s,可以settimeout30来设置。 匹配从当前进程的上一个expect或interact开始的所有输出,最多存2000字节,可以setmatch_max来设置。向expect传参和tcl一样,argv和argcarg.exp:#!/usr/bin/expectseti1foreacharg$argv{setarg[seti]$argincri}puts$arg1puts$arg2puts$arg3puts$argc运行结果:[root@linuxdhcpsnooping]#./arg.exp1231233expect:控制多个进程

控制多个进程:作业控制 当一个进程通过spawn命令启动时,变量spawn_id就被设置成某进程的描述符。由spawn_id描述的进程就被认为是当前进程。(这个描述符恰恰就是伪终端文件的描述符,虽然用户把它当作一个不透明的物体)。expect和send命令仅仅和当前进程进行交互。所以,切换一个作业所需要做的仅仅是把

该进程的描述符赋给spawn_id。

expect---交互式使用

前面例子出现过,可以通过interact命令来交互式的使用脚本。更精细的控制方法,我们要使用expect_user和send_user来进行标准I/O,同时不改变spawn_id。例如:

#!/usr/local/bin/expect

-f

set

timeout

[index

$argv

1]

expect_user

"*

"

send_user

$expect_match

expect_user从用户那里接收任何以换行符结束的一行输入。send_user把它

返回给标准输出。如果在特定的时间内没有得到任何键入,则返回也为空。send_error,向标准错误终端输出。log_file log_file-afilename

将log全部保存在filename文件中。对于交换机测试很有用。

exp_log_file,不带参数,则停止记录log,并关闭log文件。expect&shell最后再提一下,在expect脚本中调用shell命令:execcommand。例如:execls execps-aux

…Minicom Minicom是Unix操作系统下最常用的串口通信程序,就像超级终端。

minicom在XWindow下工作得很好,对于远程ssh或telnet连接到linux上可能有一点点不灵光,不过基本功能还是可用滴。Minicom用法

第一次运行时,用minicom-s,配置一下串口数据。选择配置菜单第三项“Serialportsetup”,然后配成这样:

+-----------------------------------------------------------------------+|A-SerialDevice:/dev/ttyS0||B-LockfileLocation:/var/lock||C-CallinProgram:||D-CalloutProgram:||E-Bps/Par/Bits:96008N1||F-HardwareFlowControl:No||G-SoftwareFlowControl:No

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论