如何将字符串通过管道传入netcat并保持连接开启?
解决方案:发送字符串后保持Netcat连接开启
我明白你的痛点——用管道把echo输出传给netcat时,echo一结束连接就断了对吧?这是因为echo执行完会关闭标准输出,netcat检测到输入流终止就会主动退出。在Ubuntu 16.04上,你可以用这几种方法解决:
方法一:发送字符串后支持手动继续输入
这个方法会先发送指定字符串,之后允许你在终端继续输入内容发送给服务器,同时保持连接不中断:(echo "你要发送的目标字符串"; cat) | nc 远程服务器IP 端口号解释:括号里的子shell先执行
echo发送初始字符串,接着cat会持续读取你的终端输入(直到你按Ctrl+C终止命令),这样netcat的输入流始终处于开启状态,连接就能一直保持。方法二:仅发送字符串后保持连接(无需后续输入)
如果你只是想发送完字符串后让连接维持开启,不需要手动输入额外内容,可以用sleep命令维持输入流:(echo "你要发送的目标字符串"; sleep infinity) | nc 远程服务器IP 端口号解释:
sleep infinity会一直后台运行(直到你手动终止),管道不会因为echo结束而关闭,netcat就会保持和服务器的连接。要结束连接直接按Ctrl+C即可。方法三:用cat混合管道与终端输入
这是方法一的等价写法,通过cat -同时读取echo的管道输出和后续终端输入:echo "你要发送的目标字符串" | cat - | nc 远程服务器IP 端口号效果和方法一完全一致,发送完初始字符串后可以继续输入内容,连接持续有效。
注意:如果远程服务器本身有连接超时配置,即使你本地保持输入流开启,服务器仍可能在超时后主动断开连接,这需要根据服务器的设置调整。
内容的提问来源于stack exchange,提问作者sherlock
相关产品推荐
相关产品推荐

