Bash:监视TCP套接字活动

Bash:监视TCP套接字活动,bash,Bash,我使用mpg123读取mp3网络广播流(端口8000)。 有时,webradio服务器会停止,但mpg123不会退出。此外,如果我机器上的网络出现故障,mpg123也不会退出。 我想使用cron启动的bash脚本监视mpg123活动。 大概是这样的: tcpdump -i eth0 port 8000 2>/dev/null | head | wc -l & sleep 5 killall tcpdump 如果mpg123未播放任何流,结果将为1。否则,它将>1 如何将此结果转

我使用mpg123读取mp3网络广播流(端口8000)。 有时,webradio服务器会停止,但mpg123不会退出。此外,如果我机器上的网络出现故障,mpg123也不会退出。 我想使用cron启动的bash脚本监视mpg123活动。 大概是这样的:

tcpdump -i eth0  port 8000 2>/dev/null | head | wc -l &
sleep 5
killall tcpdump
如果mpg123未播放任何流,结果将为1。否则,它将>1

如何将此结果转换为变量? 如果流媒体播放失败,我可以重新启动mpg123

请注意,我无法使用timeout命令,也无法在系统上写入任何内容。

可能

isitthere=$(tcpdump -i eth0  port 8000 2>/dev/null | head | wc -l & sleep 5; killall tcpdump)

if [[ $isitthere -eq 1 ]]
then
     SET FIRE TO EVERYTHING
fi
不确定它是否能处理睡眠问题。但是你不能在tcp转储上使用-ll开关吗


值得一试。

为什么不让它记录信息:
tcpdump-i eth0 port 8000 2>/dev/null | head>>mp3log.txt
或者,您可以简单地将所有匹配的数据包写入带有
-w filename
的tcpdump文件,然后使用该数据?有几个tcpdump/pcap文件解析提供了灵活的输出。查看
手动tcpdump
。是的,它有点长,但只是因为它有太多的选项,可能更适合你的捕获需要。因为我不想写任何东西。。。我的系统是只读的。对于这个用例,使用tcpdump有点过分。而不是使用<代码> MPG123 作为您的流式客户端,我会考虑使用更好的错误处理来处理网络交互,并从那里导入代码> MPG123。在这一点上,您有更多的选择——例如,代码> CURL>(MPG123)< /C> >将尽快返回<代码> CURL< /COD>退出,无论是否<代码> MPG123,让您从这一点开始清理。它可能在某些方面对你有所帮助。也许一些小的mod可以。你是说
&
而不是
%
?你在哪个站台?在Linux和FreeBSD/OSX上,
tcpdump
-l
选项不带参数,具有不同的含义;OP想要测试输出是否为1或更大。这是因为我厌倦了,并且误读了带有-l的手册页。漫长的一天。(
-c
选项值得一看:它在收到包后退出。不过,发送到后台然后休眠的方法应该是可行的(至少对我来说是交互式的)。