- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个从 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 中,但这将是 c问题而不是 shell问题。 :-)
关于linux - 用于测试来自流媒体服务器的流量的脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990381/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!