3

我需要让用户能够netcat在连接建立时通过网络(使用)发送/接收消息(在这种情况下,用户正在nc用作客户端)。问题是我需要在用户开始交互之前发送一条线。我的第一次尝试是:

echo 'my first line' | nc server port

这种方法的问题是在完成执行时nc 关闭连接echo,因此用户无法通过 stdin 发送命令,因为 shell 已返回给他(并且还没有收到来自服务器的答案,因为它延迟了几秒钟才能启动回答,并且在nc关闭连接时,用户永远不会收到答案)。

我还尝试了分组命令:

{ echo 'my first line'; cat -; } | nc server port

它几乎按照我需要的方式工作,但如果服务器关闭连接,它会等到我<ENTER>再次按下给我外壳。当服务器关闭连接时,我需要取回 shell(在这种情况下,客户端 - 我的nc命令 -永远不会关闭连接,除非我按 Ctrl+C)。

我也尝试了命名管道,但没有成功。

你有什么建议吗?

注意:我使用的是 openbsd-netcat。

4

5 回答 5

1

就是cat等待“进入”。您可以编写一个脚本执行后nc杀死cat它,它会自动返回到shell。

于 2012-11-08T17:08:37.863 回答
1

你可能想调查一下expect(1)

于 2012-03-28T23:23:54.930 回答
0

这应该产生你想要的行为:

echo "Here is your MOTD." | nc server port ; nc server port
于 2012-03-29T02:17:08.613 回答
0

你可以试试这个,看看它是否适合你。

perl  -e "\$|=1;print \"my first line\\n\" ; while (<STDIN>) {print;}" | nc server port
于 2012-03-29T01:04:39.357 回答
0

我建议你使用cat << EOF,但我认为它不会像你期望的那样工作。

EOF我不知道连接关闭时如何发送。

于 2012-03-29T00:12:07.973 回答