我目前正在尝试制作一个脚本来创建字节,这些字节将作为输入传输到 netcat。
这是脚本的想法:
(perl -e "print \"$BYTES\x00\";
cat file;
perl -e "print \"More bytes\"x16 . \"\r\n\"";) | netcat ip port
Run Code Online (Sandbox Code Playgroud)
我尝试使用 subshell 和命令替换(例如使用 $())来执行命令。但是我不明白为什么使用命令替换时脚本的输出是错误的。我怀疑在执行多个命令时,命令替换会错误地管道输出。有人可以向我解释为什么会这样吗?
编辑
这是使用命令替换的变体:
$(perl -e "print \"$BYTES\x00\";
cat file;
perl -e "print \"More bytes\"x16 . \"\r\n\"";) | netcat ip port
Run Code Online (Sandbox Code Playgroud) 我有两个 bash 脚本尝试检查已启动的主机:
脚本 1:
#!/bin/bash
for ip in {1..254}; do
ping -c 1 192.168.1.$ip | grep "bytes from" | cut -d" " -f 4 | cut -d ":" -f 1 &
done
Run Code Online (Sandbox Code Playgroud)
脚本2:
#!/bin/bash
for ip in {1..254}; do
host=192.168.1.$ip
(ping -c 1 $host > /dev/null
if [ "$?" = 0 ]
then
echo $host
fi) &
done
Run Code Online (Sandbox Code Playgroud)
当我检查大范围时,我想并行处理每个 ping 命令。但是,由于资源限制,我的第二个脚本似乎没有重试失败的分叉尝试。这导致第二个脚本的结果不一致,而我的第一个脚本尽管有时都无法分叉,但仍给出了恒定的结果。谁可以给我解释一下这个?还有无论如何要重试失败的分叉吗?