netcat:发送文本到回显服务,阅读回复然后退出

Spa*_*sle 14 echo netcat

我想使用netcat向我服务器上的回显服务发送一段文本,获得回复然后退出,以便我知道连接仍然良好。到目前为止,我已经尝试过:

 echo 'test' | netcat server 7 
Run Code Online (Sandbox Code Playgroud)

这样 netcat 将等待更多输入而不是退出。

netcat从 echo 服务获得回复后如何退出?

小智 13

我知道这有点旧,但没有其他答案对我有用,而这确实:

echo 'test' | netcat -N $server $port
Run Code Online (Sandbox Code Playgroud)

请注意-N

输入 EOF 后关闭网络套接字。某些服务器需要此来完成其工作。

在 Windows 和 Linux 上为我工作。


jhi*_*mer 10

刚刚尝试过 -netcat-openbsdnetcat-traditional(ubuntu 16.4)之间的行为略有不同。OpenBSD 变体可以满足您的期望,而对于 netcat-traditional,我需要添加-q 1以避免等待更多输入。

echo 'test' | netcat -q 1 server 7
Run Code Online (Sandbox Code Playgroud)


xhi*_*nne 6

您的命令应该可以工作。它与netcat联机帮助页中的一些示例非常相似。

这正是netcat应该如何操作:一旦它在 stdin 上达到 EOF,它(单向)关闭/到/服务器的连接,然后等待来自服务器的数据。当后者关闭连接时(另一种方式:服务器->客户端),然后netcat停止。

如果您的netcat命令没有完成,我想在网络级别发生了一些奇怪的事情,使echo服务器一直在侦听其他输入。

您可以尝试在 stdin 上遇到 EOF 后-q强制netcat停止 N 秒的选项:

netcat -q1 server echo <<< "test"
Run Code Online (Sandbox Code Playgroud)

<<< "test"是一种bash主义,echo ... |如果你不使用,请使用你的语法bash


Ale*_*hek 5

用这个:

cat <(echo command) - | nc host port
Run Code Online (Sandbox Code Playgroud)

问题是它nc会在 stdin 关闭后立即关闭连接,这对于一个简单的my_command字符串来说非常快,因此永远没有机会收到响应。如果您通过管道传输一个非常大的文件,您会看到它可能会在发送完文件之前得到响应。

输入cat-作为第二个参数:它使cat监听标准输入,通过它发送的第一个参数的内容后,更多的内容来管。第一个参数只是让echo命令通过cat——它也可以是一个包含你的命令的文件 la cat < file - | ...

现在的缺点是它会一直保持打开状态,直到您击中^C或击中^D外壳为止。使用-w 1(OSX netcat) 或-i 1(nmap's ncat)添加超时使其在 1 秒后关闭连接,但在您输入某个字符之前它不会退出该过程。

此答案基于此对相同超级用户问题的回答