对于学校项目,我必须创建一个bash脚本,该脚本与远程netcat服务器通信并向该服务器发送命令,并获取响应。
在我的客户端脚本中,我有一个sendMessage
函数,它将消息发送到服务器,然后显示来自服务器的响应。我的问题是,收到响应后,netcat仍在等待来自服务器的数据并且不会关闭连接。
我已经尝试了-q参数,并且我没有得到它的响应,-w参数几乎是我想要的,但最小值是1秒,这是不可能在我的情况下。
这是我的功能:
function sendMessage {
netcat -w 1 "$ipAddress" "$port" <<< "$*"
}
我仍然在寻找我,但我不得不承认一点帮助会非常受欢迎。
答案 0 :(得分:1)
您可以exec
nc
作为coproc
,将该行发送到服务器,然后使用超时的read
来读取响应,检查响应是否完整然后通过向nc
发送信号来关闭连接。
您也可以使用bash TCP功能,而不是使用nc
,而不是
exec 5<>/dev/tcp/"$HOST"/"$PORT"
read -t "$TIMEOUT" -n "$MAXLEN" line
exec 5<&- 5>&-
答案 1 :(得分:1)
终于找到了一种有效的方法(也许不是最好的,但至少它完全按照我的意愿行事:D)
在所有功能之后我发送&#34; ENDRESPONSE&#34;消息,在我的客户端,我测试是否有这个消息:
function sendMessage {
while read line; do
if [[ $line == "ENDRESPONSE" ]]; then
break
else
echo $line
fi
done < <(netcat "$ipAddress" "$port" <<< "$*")
}
无论如何,感谢您的帮助,我稍后会尝试实施其他解决方案!