linux - 用于测试来自流媒体服务器的流量的脚本?

标签 linux bash busybox network-traffic

我有一个从 tcp 端口流出数据的仪器,我想在脚本中使用标准工具来确定流是否可用。

我手动使用 ncat ,如果数据流不可用,它会立即退出。

这是我最初的 bash 脚本:

#!/bin/bash
ncat somehost 1234 >/dev/null &
pid=$!
sleep 1
if [ -d /proc/$pid/ ]; then
  kill -KILL $pid
  echo "It's alive, ALIVE\!"
  # Launch clients
else
  echo "He's dead, Jim."
  # Perform resurrection
fi

它有效,但我想知道是否有更简单或更好的方法来完成此操作,而不依赖于作业控制或 procfs 甚至 ncat。我还想知道在超时结束之前发送了多少数据。

而且,是的,在 bash 中 ncat host port可以替换为cat </dev/tcp/host/port ,但我也想避免 bash-isms(因此它可以在 busybox 下工作)。

另一种方法是使用 wc计算 ncat 输出的行数/字符数,因为它只输出一行并在无法建立连接时退出。但是如果流已经启动,我不能永远等待终止,所以我需要使用类似 timeout 的东西。 ,在尝试访问命令的输出时有其自身的复杂性。

是否有一种“简单”的方法可以最大限度地减少依赖性?

或者我应该编写一个简单的工具来代替吗?如果与主机/端口建立连接,它将返回读取的字节数,否则返回负错误号,并将支持等待时间和协议(protocol)规范 (tcp/udp)。返回值 0 表示已建立连接,但在等待时间到期之前没有数据到达(这是一件好事)。

或者可能是补丁ncat做到以上几点?

最佳答案

我使用 netcat in FreeBSD ,它有一个 -z 选项,可以简单地检查端口是否打开。这消除了您在脚本中使用的背景和 sleep 。

  -z   Specifies that nc should just scan for listening daemons, without
       sending any data to them.

该选项存在于此处旧 Ubuntu 机器上的 netcat 中,因此这可能是您的一个选项。

$ nc -z somehost 1234 && echo "It's alive, ALIVE!"

我在 ncat 中没有看到等效的选项。您可以将 netcat 编译成 busybox;它比 ncat 小得多,至少在我的系统上是这样:

Linux:

$ ls -lH `which nc ncat`
-rwxr-xr-x 1 root root  31296 2010-02-21 01:32 /bin/nc
-rwxr-xr-x 1 root root 130448 2009-11-06 04:39 /usr/bin/ncat

自由系统:

ls -l `which nc ncat`
-r-xr-xr-x  1 root  wheel   28112 Jan 15 14:53 /usr/bin/nc
-rwxr-xr-x  1 root  wheel  182775 Mar 19  2012 /usr/local/bin/ncat

当然,这无助于您检查流中的流量或分析其内容。为此,我认为您的解决方案具有创新性和合理性,尽管您提出的挑战可能不容易解决。

您可以使用 ps 来避免 procfs 依赖,并且您可以将内容存储在临时文件中以供分析。请注意,busybox 应包含一个 mktemp,但您可能应该检查选项。我还没有测试过这个:

#!/bin/sh

TMPFILE=`mktemp /tmp/str.XXXX`
trap "rm -f $TMPFILE" 0 1 2 3 15

nc somehost 1234 > $TMPFILE &
pid=$!
sleep 1

if ps $pid >/dev/null; then
  kill -KILL $pid
  echo -n "It's alive, "
  if [ -s $TMPFILE ]; then
    echo "ALIVE!"
  else
    echo "but unresponsive."
  fi
else
  echo "He's dead, Jim."
fi

这就是我的全部。而且它与您已有的没有太大区别。

另一种选择可能是构建一个自定义工具,您可以将其编译到自己的 busybox 中,但这将是 问题而不是 问题。 :-)

关于linux - 用于测试来自流媒体服务器的流量的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990381/

相关文章:

linux - Ubuntu 18.04 更新 : dm_task_run failed/no such device storage-driver=overlay2 后,Docker 服务不再启动

python - 僵尸进程,我们又来了

在 Ubuntu 与 OSX 上编译和链接 OpenSSL

linux - 列出并更改目录并在 Shell 中运行命令

linux - Nagios - bash 脚本的状态未知

linux - BusyBox:如何用 mdev 替换 udev 的简单功能?

linux - Busybox SSH 命令

c++ - 在嵌入式 Linux 平台上使用 std::string 时出现段错误

linux - 将命令固定到 bash 历史记录?

json - 使用 BusyBox 工具解析 JSON