Linux自動測試工具研究_第1頁
Linux自動測試工具研究_第2頁
Linux自動測試工具研究_第3頁
Linux自動測試工具研究_第4頁
Linux自動測試工具研究_第5頁
已閱讀5頁,還剩64頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

Linux自動測試工具研究提綱一、Linux系統(tǒng)簡介常用命令目錄樹介紹軟件安裝二、發(fā)包工具pktgensendipTcpreplay三、自動測試tcpdumpshell腳本expect編程minicom四、舉例一、Linux系統(tǒng)簡介Linux常用命令ls:顯示當(dāng)前目錄的內(nèi)容,類似dos下的dircd:改變當(dāng)前目錄,跟dos下的cd命令基本一致mkdir:創(chuàng)建目錄cp:復(fù)制文件或目錄mv:移動或更名文件rm:刪除文件或目錄vi/vim:文本編輯器cat:輸出文件內(nèi)容find/locate:查找文件su:切換用戶ps:查看系統(tǒng)進程kill:殺死進程man:查看幫助文件Linux的目錄樹/根目錄[root@linux/]#ls/64bootetclibmediaoptrootselinuxsysusrbindevhomelost+foundmntprocsbinsrvtmpvar/boot:啟動linux的核心文件/etc:系統(tǒng)管理所需要的配置文件和子目錄/lib:系統(tǒng)基本的動態(tài)鏈接共享庫/root:超級用戶主目錄/usr:各種應(yīng)用程序和文件/bin:binary,存放最經(jīng)常使用的命令/dev:各種外設(shè),如硬盤,光驅(qū)/home:用戶的主目錄,如/home/zoulei,即~zoulei/mnt:用于臨時掛載別的文件系統(tǒng)/proc:虛擬的目錄,是系統(tǒng)內(nèi)存的映射。可以訪問它來獲取系統(tǒng)信息。/sbin:superuser的常用系統(tǒng)管理程序/tmp:臨時文件夾/var:為了保持/usr的相對穩(wěn)定,那些經(jīng)常被修改的目錄可以放在這個目錄下。順帶說一下系統(tǒng)的日志文件就在/var/log目錄中Linux軟件安裝(一)rpm包,可執(zhí)行文件安裝

由于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(準(zhǔn)備編譯)

make(編譯)

makeinstall(安裝)

makeuninstall(卸載) 大多數(shù)軟件包都可以用以上方法安裝,有些軟件則需要解壓后參照README文件。Linux軟件安裝(二)二、發(fā)包工具PktgenSendipTcpreplay注:本文所有測試都基于fedora10,墻裂推薦!?。。ㄒ唬﹑ktgenpktgen pktgen是linux下的一種發(fā)包工具。

pktgen需要編譯為系統(tǒng)內(nèi)核模塊。因此,它最大的優(yōu)點是發(fā)包快。 它不像通常的應(yīng)用程序一樣,有相應(yīng)的命令。而是通過/proc文件系統(tǒng)作為用戶接口,通過寫proc文件來控制pktgen的動作。

pktgen能夠發(fā)送變化源、目的MAC、源、目的IP的數(shù)據(jù)包,支持多網(wǎng)卡發(fā)包。缺點:不能簡單指定發(fā)什么協(xié)議包。不能指定VLAN。 參考文檔《pktgen_paper.pdf》pktgen安裝1.修改內(nèi)核源碼下面的.config文件(fc10在/usr/src/kernels/-117.fc10.i686下,其它linux版本可能不同),添加以下行:

CONFIG_NET_PKTGEN=m2.重新編譯內(nèi)核(網(wǎng)上有很多介紹,比較麻煩,有興趣的可以看看)3.編譯完成后,用insmod命令加載模塊,恭喜你,可以運行pktgen了。還是以fc10為例:

[root@linux/]#insmod/lib/modules/-117.fc10.i686/kernel/net/core/pktgen.kopktgen使用方法 insmod完成后,會創(chuàng)建一個系統(tǒng)進程pktgen/0(ps可以看到).通過往各文件中寫數(shù)據(jù),達到配置參數(shù),控制發(fā)包過程的目的。

1)/proc/net/pktgen/kpktgend_0:

該文件用于添加、刪除網(wǎng)卡??梢蕴砑佣嗑W(wǎng)卡。最多測試了4網(wǎng)卡。 可用參數(shù):add_device,rem_device,max_before_softirq 2)/proc/net/pktgen/ethx:

執(zhí)行后的結(jié)果也存在這個文件里。 該文件用于配置網(wǎng)卡x的發(fā)包參數(shù)。srcmac,dstmac,ip,發(fā)包數(shù)等等??梢园l(fā)指定數(shù)目包或持續(xù)發(fā)包。支持遞增或隨機的ip或mac,支持ipv6,能配置UDP端口(遞增或隨機)。不支持TCP。其它的都不能配置,如VLAN,各種payload不可配。3)/proc/net/pktgen/pgctrl: 用戶發(fā)包控制。 可用參數(shù):start,stoppktgen參數(shù)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,可以用命令行方式配置并發(fā)送ip報文。根據(jù)mansendip,支持的協(xié)議有ipv4,ipv6,icmp,tcp,udp,bgp,rip,ripng,ntp,即這些協(xié)議可以以關(guān)鍵字的形式配置各個字段。 安裝非常簡單,最新版本2.5??梢栽谥R庫上找到tar.gz和rpm的安裝包。使用方法:sendip[-v][-ddata][-h][-fdatafile][-pmodule][moduleoptions]hostname

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

這條命令的效果就是發(fā)送源ip,源端口8000,目的ip,目的端口4000的設(shè)備上,數(shù)據(jù)包的內(nèi)容是asdfasdf。其中hostname參數(shù)(-d前面那個)目的ip是必填項。sendip(2)sendip(3) Sendip沒有指定網(wǎng)卡的參數(shù)。實際上,程序會根據(jù)hostname(目的ip)查找本地的arp表,如果沒有則發(fā)送arp請求,得到應(yīng)答后從相應(yīng)的端口發(fā)出,跨網(wǎng)段則發(fā)向網(wǎng)關(guān)。因此測試時可以先添加任意一條靜態(tài)arp,并把該ip作為hostname字段,就可以往指定網(wǎng)卡發(fā)送報文。而報文的實際源、目的ip可以用-is,-id參數(shù)隨便填。sendip(4)需要說明的是,操作系統(tǒng)本身在發(fā)包前會重寫ipheader的某些字段,因此sendip的某些配置將不生效:Srcip,如果配置為,會自動重寫為網(wǎng)卡真實ip。IPchecksum,系統(tǒng)總會重寫為正確值,無法進行錯誤checksum測試。Totalpacketlength,系統(tǒng)總會重寫為正確值。sendip(5)---手工編包對于不能以關(guān)鍵字方式配置的協(xié)議,例如ospf,可以使用兩個option:-d(手工配)或-f(導(dǎo)入文本文件,即-d的內(nèi)容)。除了ipheader的checksum,其它的checksum都不會自動計算。例如,我要發(fā)送一個ospfhellopacket,就要用ixia先發(fā)一個包??梢员4鏋槲募?,方便以后調(diào)用。

eg:

sendip-v-pipv4-il68-it1-ip0x59-is-id-d0x020100300a01bc03000000002e8c00000000000000000000ffffff00000a0201000000280a0191010a0191030a01c801參考文檔:

mansendiptcpreplay Tcpreplay是一種用于Unix系統(tǒng)或類Unix系統(tǒng)上重放網(wǎng)絡(luò)包的測試工具。它可以將tcpdump、ethereal和wireshark等軟件抓取到的pcap格式的數(shù)據(jù)包,經(jīng)過處理,從指定的網(wǎng)卡發(fā)送出去。Tcpreplay是一系列工具的總稱,包括tcpreplay、tcprewrite和tcpprep等。目前最新版本是3.4.3。Tcpreplay各種工具tcpreplay:重發(fā)pcap文件中的數(shù)據(jù)包。 可以指定發(fā)包網(wǎng)卡,速率,發(fā)包間隔,發(fā)包個數(shù),修改包長,循環(huán)次數(shù)等參數(shù)。tcprewrite:改寫pcap數(shù)據(jù)包的2-4層的頭部信息。參數(shù)很多,未一一測試。 可以修改源、目的MAC地址、增刪802.1qVlantag; 修改IPv4/v6地址,據(jù)說可以隨機產(chǎn)生src/dstip,還可以不修改廣播地址。會自動重算ipheaderchecksum。還可以修改ip頭的部分字段(不是全部),如ttl,tos等。 修改TCP/UDPport.tcpprep:區(qū)分pcap數(shù)據(jù)包的流向,即區(qū)分出客戶端和服務(wù)器。 分類的策略非常靈活,包括自動區(qū)分、按網(wǎng)段、按正則表達式匹配源ip、按TCP/UDP端口、按源Mac等,還可以指定只處理pcap文件中的某些包。tcpprep tcpprep提供4種splitmode,來區(qū)分哪些包是server端的,哪些包是client端的。

1)auto:bridge/router/client/server 2)ipv4/ipv6:CIDR/regex 3)TCP/UDPport 4)Macaddressprep---autosplitmodeautosplit的策略是:1)認(rèn)為發(fā)送tcpsyn、dnsrequest,收到icmpportunreachable的一端是client。2)認(rèn)為發(fā)送tcpSyn/ACK、dnsreply或icmpportunreachable的一端是server。

bridge/router/client/server等幾種模式的區(qū)別是:router與bridge相比,可以用-m,-M參數(shù)按網(wǎng)段劃分C/S;client模式對不能分類的報文默認(rèn)為client端;server模式對不能分類的報文默認(rèn)為server端。prep---CIDR&RegexmodeCIDR模式,用主機+掩碼來區(qū)分C/S,多個網(wǎng)段用逗號分割。如: /24,/16Regex模式,用正則表達式匹配serverip。如:

--regex=“(10|20)\..*”表示10.x.x.x或20.x.x.x是服務(wù)器端prep---PortMode默認(rèn)0~1023端口的為服務(wù)器端,其它是client端。想自定義端口怎么辦? 用--service=filename指定服務(wù)端口。

filename是一個文件,按照/etc/services的格式定義,在文件內(nèi)的即為服務(wù)器端:service-nameport/protocolaliases#commentbootps 67/udpbootpc 68/udpdhcpc#BOOTPclientprep---MacMode按serversrcmac區(qū)分,用逗號分割多個。00:00:00:00:00:01,00:00:00:00:00:02prep---Include/Exclude(1)用-x參數(shù)指定處理哪些包,其它包不分類也不發(fā)送用-X參數(shù)指定不處理哪些,只分類和發(fā)送其它包-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,導(dǎo)致這個命令不生效,請使用知識庫上已解壓的源碼包安裝,修改了這個問題。-xF:“tcpport22”(只處理tcp端口22的包文) ***引號里面的內(nèi)容遵循winpcapBPF語法,后面在tcpdump會介紹,這是一種定義過濾包規(guī)則的語法。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設(shè)置tos50--portmap=80:8080,22:8022

tcpreplay(1)例子:tcpreplay-ieth0sample.pcap***從eth0口發(fā)送cample.pcap文件的內(nèi)容。這是最簡單的用法。要發(fā)送prep和rewrite后的報文,后面介紹。各種速率控制參數(shù):

--topspeed(以最快速率發(fā)送) --mbps10.0(以10mbps) --multiplier7.3(按抓到的包速率的7.3倍發(fā)包) --pps=25(按25pps) --oneatatime(每次發(fā)包詢問發(fā)幾個包,常和-v結(jié)合用于調(diào)試)tcpreplay(2)--loop=10(重復(fù)發(fā)送10次)--loop=0(一直發(fā),直到按下ctrl-c)--quiet(用靜默模式發(fā)包,不打印)--cashefile=sample.cache(使用tcpprep處理過的文件發(fā)包)--timer=(設(shè)置發(fā)包間隔)tcpreplay(3)如何提高tcpreplay發(fā)包性能?用--topspeed或--pps/--pps-muti,不要用--mbps用--quite用--enbale-file-cache用好的網(wǎng)卡tcpreplay(4)舉例三、自動測試tcpdumpTcpDump可以將網(wǎng)絡(luò)中傳送的數(shù)據(jù)包的“頭”完全截獲下來提供分析。它支持針對網(wǎng)絡(luò)層、協(xié)議、主機、網(wǎng)絡(luò)或端口的過濾,并提供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導(dǎo)入pcap文件:tcpdump-wtest.pcap導(dǎo)入文本文件:tcpdump-l>tcpcap.txt

檢驗預(yù)期的包是否抓到,除了可以用tcpdump本身的BPF語法過濾外,還可以將結(jié)果導(dǎo)入文件后,用grep命令搜索指定的報文。grep支持正則表達式。

eg:

grep"arpreply3"tcpcap.txtShell腳本 shell:操作系統(tǒng)與外部最主要的接口。shell是操作系統(tǒng)最外面的一層。shell管理你與操作系統(tǒng)之間的交互:等待你輸入,向操作系統(tǒng)解釋你的輸入,并且處理各種各樣的操作系統(tǒng)的輸出結(jié)果。

shell提供了你與操作系統(tǒng)之間通訊的方式。這種通訊可以以交互方式(從鍵盤輸入,并且可以立即得到響應(yīng)),或者以shellscript(非交互)方式執(zhí)行。

shellscript是放在文件中的一串shell和操作系統(tǒng)命令,它們可以被重復(fù)使用。本質(zhì)上,shellscript是命令行命令簡單的組合到一個文件里面。

較為通用的shell有標(biāo)準(zhǔn)的Bourneshell(sh)和Cshell(csh)。shell腳本一般文件后綴為.sh,如test.sh第一行#!/bin/bash定義了shell的解釋器。下面才是執(zhí)行各種命令的集合:test.sh: #!/bin/bash ls echo“test”運行shell腳本腳本編完了,怎樣運行?要使腳本可執(zhí)行,首先要chmod:

chmod+xfilename然后當(dāng)前路徑下用./filename,絕對路徑可不加“.”

[root@linuxzoulei]#./test.sh

rpm

shell

capturedtest.csendip_shtest.sh test

或者:

[root@linuxzoulei]#/home/zoulei/test.shShell腳本怎樣編shell腳本,以后再單獨介紹吧,內(nèi)容太多expect編程 Shell對程序提供了最小限度的控制(開始,停止,等等),而把交互的特性留給了用戶。

這意味著有些程序,你不能非交互的運行,比如passwd。

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

Expect的出現(xiàn),解決了在Unix環(huán)境中長期存在著的交互問題。

Expect使用Tcl作為語言核心。不管程序是交互和還是非交互的,Expect都能運用。 除了遵循expect本身和tcl的語法,要運行l(wèi)inuxshell命令也很簡單,exec就搞定了。Windows下的expect:ActiveState BasedonExpectV5.39andTcl8.4+,runsonXP/NT/2k.expect一句話描述expect的功能: 實現(xiàn)用戶和程序的交互式對話,即以靈活可控的方式從程序讀或向程序?qū)憽?例如:telnet到主機,用expect編程,出現(xiàn)“username:”則向telnet程序輸入用戶名,出現(xiàn)“password:”則輸入密碼,從而實現(xiàn)自動登錄。幾種定義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命令向進程發(fā)送字符串。

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}{}{#循環(huán)翻頁

expect{ "*More*"{send“\r"} "*#"{send"exit\r";break} }}interact#interact不能少,把控制轉(zhuǎn)移給用戶

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

expect

patlist1

action1

patlist2

action2.....

該命令一直等到當(dāng)前進程的輸出和以上的某一個模式相匹配,或者等到時間超過一個特定的時間長度,或者等到遇到了文件的結(jié)束為止。如果最后一個action是空的,就可以省略它。類似tcl的case。

expect匹配支持正則表達式,匹配到的字符串存在$expect_match。 超時時間默認(rèn)10s,可以settimeout30來設(shè)置。 匹配從當(dāng)前進程的上一個expect或interact開始的所有輸出,最多存2000字節(jié),可以setmatch_max來設(shè)置。向expect傳參和tcl一樣,argv和argcarg.exp:#!/usr/bin/expectseti1foreacharg$argv{setarg[seti]$argincri}puts$arg1puts$arg2puts$arg3puts$argc運行結(jié)果:[root@linuxdhcpsnooping]#./arg.exp1231233expect:控制多個進程

控制多個進程:作業(yè)控制 當(dāng)一個進程通過spawn命令啟動時,變量spawn_id就被設(shè)置成某進程的描述符。由spawn_id描述的進程就被認(rèn)為是當(dāng)前進程。(這個描述符恰恰就是偽終端文件的描述符,雖然用戶把它當(dāng)作一個不透明的物體)。expect和send命令僅僅和當(dāng)前進程進行交互。所以,切換一個作業(yè)所需要做的僅僅是把

該進程的描述符賦給spawn_id。

expect---交互式使用

前面例子出現(xiàn)過,可以通過interact命令來交互式的使用腳本。更精細(xì)的控制方法,我們要使用expect_user和send_user來進行標(biāo)準(zhǔn)I/O,同時不改變spawn_id。例如:

#!/usr/local/bin/expect

-f

set

timeout

[index

$argv

1]

expect_user

"*

"

send_user

$expect_match

expect_user從用戶那里接收任何以換行符結(jié)束的一行輸入。send_user把它

返回給標(biāo)準(zhǔn)輸出。如果在特定的時間內(nèi)沒有得到任何鍵入,則返回也為空。send_error,向標(biāo)準(zhǔn)錯誤終端輸出。log_file log_file-afilename

將log全部保存在filename文件中。對于交換機測試很有用。

exp_log_file,不帶參數(shù),則停止記錄log,并關(guān)閉log文件。expect&shell最后再提一下,在expect腳本中調(diào)用shell命令:execcommand。例如:execls execps-aux

…Minicom Minicom是Unix操作系統(tǒng)下最常用的串口通信程序,就像超級終端。

minicom在XWindow下工作得很好,對于遠(yuǎn)程ssh或telnet連接到linux上可能有一點點不靈光,不過基本功能還是可用滴。Minicom用法

第一次運行時,用minicom-s,配置一下串口數(shù)據(jù)。選擇配置菜單第三項“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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論