我想使用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-openbsd
和netcat-traditional
(ubuntu 16.4)之间的行为略有不同。OpenBSD 变体可以满足您的期望,而对于 netcat-traditional,我需要添加-q 1
以避免等待更多输入。
echo 'test' | netcat -q 1 server 7
Run Code Online (Sandbox Code Playgroud)
您的命令应该可以工作。它与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
)
用这个:
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 秒后关闭连接,但在您输入某个字符之前它不会退出该过程。
此答案基于此对相同超级用户问题的回答。
归档时间: |
|
查看次数: |
83730 次 |
最近记录: |