![将可执行文件通过管道输出到现有的 Netcat 连接](https://linux22.com/image/11745/%E5%B0%86%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E8%BE%93%E5%87%BA%E5%88%B0%E7%8E%B0%E6%9C%89%E7%9A%84%20Netcat%20%E8%BF%9E%E6%8E%A5.png)
我打开一个终端窗口并使用以下命令连接到 shell netcat
:
Terminal Window 1: nc hostname port
然后,我导航到一个目录并打开一个文件,...等(我需要能够自己执行此操作,而不是自动化它)。
然后我可以将计算机上可执行文件的输出通过管道传输到netcat
连接吗?
答案1
您也许可以使用命名管道来做到这一点。
mkfifo ncpipe
nc hostname port < ncpipe
# --- In a galaxy far, far away (another terminal) ---
somecommand > ncpipe
然而,这存在一些问题......例如,如果您花费太长时间,连接可能会超时或其他什么。
也可以双向执行此操作...我前段时间使用过它来转发本地 telnet 端口,不确定它是否仍然有效:
mkfifo send receive
> send &
> receive &
nc 127.0.0.1 23 < receive > send &
telnet_pid=$!
nc host port < send > receive &
server_pid=$!
wait $server_pid
kill $telnet_pid
rm send receive
不管怎样,你可以用命名管道做一些奇怪的事情。但是,您还必须小心它们......如果有一个旧进程打开了管道,则可能会出现意外的输出。最好为每个任务创建一个闪亮的新干净管道,并在完成后删除。
特别是使用 SSH 更容易(更安全)地完成端口转发,但它并不总是可用。如果在您的场景中可用,最好只执行以下操作:
somecommand | ssh user@host somereceiver
# or the other way around
ssh user@host somecommand | somereceiver