这邮政仅回答了我的部分问题。我的问题是,使用 /proc 文件系统上进程的 FD 写入正在运行的进程的标准输入不会产生相同的效果。
问题:
启动 nc 监听 10000 端口(这个过程进一步称为 nc 1)
nc -l 10000
启动另一个 nc 来向监听的 nc 发送字符(这将是 nc 2)
nc localhost 10000
写入 nc 2 上的标准输入
echo "some chars here" >> /proc/[PID-nc-2]/fd/0
问题:“这里的一些字符”没有到达监听 nc(nc 1),但是显示在 nc 2 的控制台上。
问题:为什么?是否有可能实现这一点?
答案1
这不会像你预期的那样工作,因为/proc/<PID>/fd/0
这不是管道。如果你调用发送方并将其 stdin 连接到管道,它将工作
在接收主机上
nc -l 10000
在发送主机上
mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000
现在你可以
echo "Hello World" >my.fifo
myprog >my.fifo
请注意,cat >my.fifo
必须保持 fifo 处于打开状态,否则将发送 EOF 并过早关闭连接。要关闭连接,您需要终止保持 fifo 处于打开状态的 cat 进程。
答案2
正如您链接的帖子的答案中所述,您需要写信给/proc/pid/fd/0
,而不是/proc/pid/fd/1
。