以与直接写入相同的效果/行为写入正在运行的进程的标准输入


8

这篇文章仅部分回答了我的问题。我的问题是在/ proc文件系统上使用进程的FD写入正在运行的进程的stdin不会产生相同的效果。

问题:

  1. 启动nc以侦听端口10000(此过程称为“进一步的nc 1”)

    nc -l 10000
    
  2. 启动另一个nc将字符发送到正在监听的nc(这将是nc 2)

    nc localhost 10000
    
  3. 在nc 2上写入标准输入

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    

问题:“一些字符在这里”无法到达正在收听的nc(nc 1),但在nc 2的控制台上却显示了。

问题:为什么并且有可能使其工作?

Answers:


11

这不是您期望的那样,因为/proc/<PID>/fd/0它不是管道。如果您使用标准输入连接到管道来调用发送方,它将起作用

在接收主机上

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进程。


非常有帮助!在我的情况下,这实际上使与进程的通信更加容易,因为fifo权限可以使普通用户影响sudo'ne脚本。
natevw

1

如您所链接帖子的答案中所述,您需要写信给/proc/pid/fd/0而不是/proc/pid/fd/1


1
我纠正了我的问题。但无论如何:我同时尝试了/ fd / 0和/ fd / 1。问题仍然存在...
2012年

我已经尝试过了,但是面临的问题很少。它确实将所需的域发布到telnet,但是我认为它需要某种回车符或换行符,而我无法传递给它
Farhan 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.