我需要让用户能够在建立连接时通过网络发送/接收消息(使用netcat
)(在这种情况下,用户使用nc
作为客户端)。问题是我需要在用户开始交互之前发送一行。我的第一次尝试是:
echo 'my first line' | nc server port
这种方法的问题是nc
在echo
完成执行时关闭连接,因此用户无法通过stdin发送命令,因为shell已经给出回到他身边(也没有收到来自服务器的回答,因为它延迟了几秒钟开始回答,并且当nc
关闭连接时,用户从未收到答案)。
我也尝试过分组命令:
{ echo 'my first line'; cat -; } | nc server port
它几乎按照我需要的方式工作,但如果服务器关闭连接,它将等到我按<ENTER>
再次给我shell。我需要在服务器关闭连接时返回shell(在这种情况下,客户端 - 我的nc
命令 - 将从不关闭连接,除非我按下Ctrl + C)
我也尝试过命名管道,但没有成功。
你有任何关于如何做的提示吗?
注意:我正在使用openbsd-netcat。
答案 0 :(得分:1)
您可能希望查看expect(1)
。
答案 1 :(得分:1)
等待'enter'是cat
。
您可以在nc
之后编写脚本执行以杀死cat
,它将自动返回shell。
答案 2 :(得分:0)
我建议你使用cat << EOF
,但我认为它不会像你期望的那样有用。
我不知道在连接关闭时如何发送EOF
。
答案 3 :(得分:0)
您可以尝试这样做以确定它是否适合您。
perl -e "\$|=1;print \"my first line\\n\" ; while (<STDIN>) {print;}" | nc server port
答案 4 :(得分:0)
这个应该产生你想要的行为:
echo "Here is your MOTD." | nc server port ; nc server port