免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2813 | 回复: 4
打印 上一主题 下一主题

【请教】在shell中如何控制命令超时 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-18 19:50 |只看该作者 |倒序浏览
[背景]
想做一个自动化的脚本,以实现使用tcpreplay发不同类型的包,经软件处理之后,转发到另外的一个网口,在此网口上进行抓包验证。
已知对于特定类型的数据包,在软件功能正确的情况下,其转出数量是确定的。于是可以在脚本中使用类似如下的命令来实现脚本:
tcpdump -i eth1 -c 20 -w /dev/null 2>tcpdump_log &
tcpreplay -i eth0 -M200 test.pcap

【问题】
如果在eth1上恰好收到20个包,则tcpdump执行完毕并退出。用grep搜索tcpdump_log文件,将收到的数量和预期数量比较下即可。

假如转出数量不是20,比如一个未转出、转出不足20(暂不考虑超过20的情况),则tcpdump都不会返回,并且tcpdump_log中不会有期望的值。

【期望】
我希望在shell中可以控制tcpdump的超时,比如收到20个包和等待10秒钟,两者满足其一,tcpdump就退出,不知道如何实现。包数量和等待时间均是可设置的。

备注:
1.
在tcpdump 命令之后sleep也是可以的,但这会大大延长脚本的运行时长,毕竟绝大多数case都是可以顺利通过的。

2.
尝试了下expect,但似乎tcpdump没法后台运行+_+
#!/usr/bin/expect

spawn /home/dwang/fpe_testsuite/tcpdump -i eth1 -c 20  2>/dev/null   【如果加上&,则脚本报错】

log_file TCPDUMP_RESULT_FILE

expect {
        "20 packets received by filter" { exit 0}
        timeout {exit 2}
        }
timeout 10

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
2 [报告]
发表于 2010-08-19 09:55 |只看该作者
看不懂么意思

论坛徽章:
0
3 [报告]
发表于 2010-08-19 10:00 |只看该作者
回复 1# wangdan1600


    TMOUT ?

论坛徽章:
0
4 [报告]
发表于 2010-08-19 15:11 |只看该作者
set timeout 10

论坛徽章:
0
5 [报告]
发表于 2010-08-19 15:12 |只看该作者
回复 1# wangdan1600


    set timeout 10
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP