我打开一个终端窗口并使用以下命令连接到 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