我想用来netcat
向我的服务器上的回显服务发送一段文本,获得回复然后退出,以便我知道连接仍然良好。到目前为止我已经尝试过:
echo 'test' | netcat server 7
这样 netcat 将等待更多输入而不是退出。
netcat
得到echo服务的回复后如何退出?
答案1
netcat-openbsd
刚刚尝试过 -和之间的行为略有不同netcat-traditional
(ubuntu 16.4)。 OpenBSD 变体可以满足您的期望,而对于 netcat-traditional,我需要添加-q 1
以避免等待更多输入。
echo 'test' | netcat -q 1 server 7
答案2
我知道这有点旧,但没有其他答案对我有用,而这确实:
echo 'test' | netcat -N $server $port
请注意-N
:
输入 EOF 后关闭网络套接字。某些服务器需要此来完成其工作。
在 Windows 和 Linux 上为我工作。
答案3
用这个:
cat <(echo command) - | nc host port
问题是,nc
将在 stdin 关闭后立即关闭连接,这对于简单的my_command
字符串来说非常快,因此永远没有机会收到响应。如果您通过管道传输一个非常大的文件,您会发现它可能会在发送完文件之前收到响应。
输入第二个cat
参数-
:它cat
在发送第一个参数的内容后监听标准输入以获取更多内容。第一个参数只是让echo
命令通过cat
——它也可以是一个包含命令 la 的文件cat < file - | ...
。
这样做的缺点是,它会一直保持打开状态,直到您击中^C
或^D
击中外壳为止。使用-w 1
(OSX netcat)或(nmap 的 ncat)添加超时-i 1
会使其在 1 秒后关闭连接,但在您输入某个字符之前它不会退出该进程。
这个答案是基于这是对相同超级用户问题的回答。
答案4
我没正确理解你的问题?
默认的 netcat 侦听器应该在接收到输入后退出(在这种情况下,您的 echo 将其传送到 netcat,然后将其转发给侦听器)。
如果您希望侦听 Netcat 服务在收到输入后保持侦听状态:
nc -lk 12345
- 其中 12345 是端口号
最重要的是,请检查 netcat 的手册页..它们对于所有命令都非常有用......
man nc