Shell脚本编程,生成TCP活动状况报告_第1页
Shell脚本编程,生成TCP活动状况报告_第2页
Shell脚本编程,生成TCP活动状况报告_第3页
Shell脚本编程,生成TCP活动状况报告_第4页
Shell脚本编程,生成TCP活动状况报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、v1.0可编辑可修改LINUX编程环境实验报告 2B-Shell及编程班级:07姓名:LZ写在前面亲爱的学弟/学妹,如果你正因为本次实验而困惑,希望你在看完本文后会帮你解惑。但并不希望你直接copy后上交,自己亲手做实验而得到的提升是只有做完实验才知道的,而且可能会发现一些有意思的 问题。相信这次实验也不会花费太长时间。加油,少年一、实验内容Shell脚本编程,生成TCP舌动状况报告。netstat -statistics-tcp命令可以列出tcp统计信息。编写shell脚本程序,每隔1分钟生 成1行信息:当前时间;这一分钟内 TCP发送了多少报文;接收了多少报 文;收发报文总数;行尾给出符号

2、+或-或空格(+表示这分钟收发报文总数 比上分钟多,收发报文总数相同用空格,否则用符号 -)。运行示例如下:2013-05-17 00:02 2013-05-17 00:03 2013-05-17 00:04 2013-05-17 00:05 2013-05-17 00:06 2013-05-17 00;07 2013-05*17 00:08 2013-05-17 00;09 2013-05-17 00:10 2013-05-17 00;116 2 闻5 $ 21H5159524 0 0 910 7 3-31611-O 5 555381232277 9 19 5 091-观察示例后,又发现了两

3、个需要注意的细节: 第一行的最后一个参数必定是空格; 输出要对齐2v1.0可编辑可修改此外,在实验中发现netstat -statistics - tcp命令的收发报文数 所在的行数是变动的,受ICMPMS长度的影响。但本程序可以做到不受变 动行数的影响,准确提取收发报文数。详情将在第三、3和第四部分阐述。二、实验步骤及分析经过分析,该程序分4步完成:每隔1分钟生成一行信息、当前时间、 一分钟内首发报文数及收发总数和根据收发总数的变化行尾给出符号 +或 - 或空格。下面,将针对这4个步骤分别进行阐述。1. 每隔1分钟生成1行信息要实现这点,只需要一个简单的循环结构即可:while truedo

4、echo sleep 60done2. 当前时间使用date命令的格式化输出。F是以xxxx-xx-xx的形式打印年月 日;H是两位数长的24小时的小时数;丽分钟数。打印效果如下:xiao(3xiao-Rev-1-0;$ date 十箔F常H:删2015-05-3010:273. 这一分钟内TCP收、发报文数以及收发报文总数首先,使用netstat -statistics- tcp命令查看命令的格式:xtao0xtao-Rev-l-0i$ netstat - statistics -tcp IcmpMsg:InType3: 33bOutType3: 407Tcp:172 active conn

5、ections openings2 passive connection openings70 failed 匚onnection attempts9 connection resets receivedv1.0可编辑可修改可见,所需的数据被白框圈出,当前累计的收发报文数分别在第10和第11行。可以使用AWK命令进行提取,条件为 NR = 10和NR = 11,每行都是提取第一个变量,即$1。所以使用语句:recieve_total_before=$(netstat -statistics -tcp | awk NR = 10print $1)sen d_total_before=$ (n e

6、tstat -statistics -tcp | awk NR = 11pri nt $1)daoxtao-Rev-l-0:$ echo $(net5tdt -statistics -tcp | awk NR = 10print$l)w 29751但是,在实践中发现,所需的两个数据位置是不定的,受IcmpMsg长度的影响,有两种解决方案:每次手动修改NR后面的值; 用segments received 禾口 segments send out 匹配需要的行,然后提起该行 的第一个变量。显然第2个解决方案是用户所期望的。所以,语句这样改 正,即可实现准确提取收、发报文数而不受netstat命令变

7、化的影响:recieve_total_before=$ (n etstat -statistics -tcp | awk$2$3/segmentsreceived/print $1)sen d_total_before=$ (n etstat-statistics -tcp | awk $2$3$ 4/segme ntsse ndout/pri nt$1)这样,提取累计收、发报文数就完成了。但本次实验要求列出的数据是某一分钟内的。那么就在一分钟开始的时候记录一次累计收、发报文数;60秒后再记录一次累计收、发报文数。将两次记录相减就是一分钟内的收、 发报文数;将一分钟内的收、发报文数相加,就是一

8、分钟内的收发报文总 数。4. 行尾给出符号+或-或空格行尾符号是+、-或空格,取决于本分钟收发报文总数和前一分钟收发 报文总数的大小关系:大为 +、相等为空格,否则为-。所以,这部 分代码如下:if $total -gt $total_before the nMore=+elif $total -eq $total_before the nMore=elseMore=-fi正如第一部分所述,本程序中的一个细节是第一行数据的尾部必为空格,所以将第一部分提到 while循环之外,尾部直接输出空格。三、实验结果jxiaoxtao-Revl-9:-5 sh Docunents/TCPZ2015*0S-

9、3122:180902615-95-3122;196278031430ZO15-05-3122:208799481827291S 05 3122:217137961592015-05-3122!2210391194-2015-05-31226136361249+2015-05-3122:2490881782615-35-3122:251612282615 85-3122IQie20-Z015-05-3122127000四、问题与解决1问题:程序刚开始是正常的,可以反应收、发报文数的变化,但后来 再调试的时候,数据全部为0。解答:netstat-statistics - tcp命令中,收、发报文

10、累计值所在行会发生变化,由IcmpMsg长度的变化引起。之前程序提取收、发报 文累计值是用行数提取的。但后来行数发生了变化,提取的值是在这 段时间不变的值,所以导致了上述情况。将提取策略改变后即可:recieve_total_before=$ (n etstat -statistics -tcp | awk$2$3/segmentsreceived/print $1)sen d_total_before=$ (n etstat -statistics -tcp | awk$2$3$4/segmentssendout/print $1)2.问题:程序的输出使用echo命令,不整齐怎么办xlaox

11、lao-Rev-1-9:S stb Docunents/TCP2eis-es-3e12A9ef)e201S-05-361200e2015-05-36120612H勺0t)e2015-&5-3612;4900e2015 05 3012:4日00e2015-05-30LZ00e7015-0S-3612:硝0062015 65-3G1200G2015 OS 3C124900e2015-&5-30诃49313364 +2B1S-0S-3612A96158129 +2615-05-361200e -2015-05-3612497714十?fil5-05-36124勺00e ais-es-36124900

12、e2015 &5 301200e2015-05-30LZti012十7015-05-3612906 -2B1S-B5-381200G2615 G5 3012:49112 +解答:使用printf函数进行格式化输出即可。printf %-22s%-8s%-8s%-8s%-8sn $Datea ndTime $recieve $se nd $total $More3.问题:这个地方为什么报错if Stotal -gt $total_beforejthenMore=+elif-eq $total_beforethen More= 1elseMore=-ft解答:if语句后,“”和“”需要和逻辑判断语

13、句用空格隔开Shell中的空格十分十分重要!命令需要用空格来提取参数!if-gt $totl_before|thenelif Q$total -eq $total_before0 theneleMore=-1fi参考文献:1实用UNIX教程蒋砚军 清华大学出版社2 LINUX Shell脚本编程入门3 Unix shell脚本编程,生成TCP舌动状况报告附:源代码Datea ndTime=$(date +%F%H:%M)recieve_total_before=$ (n etstat -statistics -tcp | awk$2$3/segmentsreceived/print $1)se

14、n d_total_before=$ (n etstat-statistics -tcp | awk $2$3$ 4/segme ntsse ndout/pri nt$1)sleep 60recieve_total=$( netstat-statistics -tcp | awk $2$3/segmentsreceived/print$1)12send_total=$(netstat -statistics -tcp | awk $2$3$4/segmentssendout/print $1)recieve=$(expr $recieve_total - $recieve_total_befo

15、re) sen d=$(expr $se nd_total - $se nd_total_before) total=$(expr $recieve + $se nd) total_before=$total printf %-22s%-8s%-8s%-8sn $Datea ndTime $recieve $se nd $total while true dorecieve_total_before=$ (n etstat -statistics -tcp | awk$2$3/segmentsreceived/print $1)sen d_total_before=$ (n etstat -s

16、tatistics -tcp | awk$2$3$4/segmentssendout/print $1)sleep 60Datea ndTime=$(date +%F%H:%M)recieve_total=$ (n etstat -statistics -tcp | awk$2$3/segmentsreceived/print $1)sen d_total=$ (n etstat-statistics -tcp | awk $2$3$ 4/segme ntsse ndout/pri nt$1)recieve=$(expr $recieve_total - $recieve_total_before) sen d=$(expr

温馨提示

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

评论

0/150

提交评论