收到所有响应后,客户端不会关闭与服务器的连接

时间:2018-05-25 08:01:50

标签: bash netcat

对于学校项目,我必须创建一个bash脚本,该脚本与远程netcat服务器通信并向该服务器发送命令,并获取响应。

在我的客户端脚本中,我有一个sendMessage函数,它将消息发送到服务器,然后显示来自服务器的响应。我的问题是,收到响应后,netcat仍在等待来自服务器的数据并且不会关闭连接。

我已经尝试了-q参数,并且我没有得到它的响应,-w参数几乎是我想要的,但最小值是1秒,这是不可能在我的情况下。

这是我的功能:

function sendMessage {
    netcat -w 1 "$ipAddress" "$port" <<< "$*"
}

我仍然在寻找我,但我不得不承认一点帮助会非常受欢迎。

2 个答案:

答案 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" <<< "$*")
}

无论如何,感谢您的帮助,我稍后会尝试实施其他解决方案!