2011-06-27 67 views
5

我有netcat端口在端口1501上侦听,并且我想将该端口上的接收输入管到新的终端窗口。我知道这是一个坏主意,因为基本上那个港口的任何人都可以控制这台机器,但是我想弄清楚它是否可行。任何人都知道。到目前为止,我已经尝试过了。Bash终端重定向到另一个终端

nc -l 1500 | xterm 或 nc -l 1500 | xterm -e“NAMEOFWINDOW”

也尝试以简单方式重定向到gnome-terminal。我能做

nc -l 1500 | grep“SKEKEYWORD”成功。

任何想法? -TJ

回答

1

这是不可能这样,因为xterm不上标准输入接受输入,它直接捕获键盘输入。

有两个备选方案:

  • 使用bash代替的xterm:nc -l 1500 | bash在xterm中
  • 使用xterm小号-S选项,但你需要之前的netcat的附加到伪TTY,然后一将xterm附加到伪终端
2

您有两个问题。首先是xtermgnome-terminal不是提供提示和接受命令的程序 - 它们只是将键盘和屏幕连接到该程序的一种方式,该程序是您的shell(通常为/bin/bash)。所以,它实际上是你想连接到netcat的bash。其次,你需要的不仅仅是一个单向的管道,这是你通过|获得的。如果你使用:

nc -l -p 1500 | /bin/bash 

,那么你只会有一个管道用户bash - 他们将能够给予投入,但不会看到任何输出。另外,如果你这样做:

/bin/bash | nc -l -p 1500 

则相反适用 - 你只能从bash有管用户。用户将看到bash的输出,但不能输入任何内容。

幸运的是,netcat的支持选项来创建一个双向管道(实际上是两个管道)到另一个命令:

nc -l -p 1500 -e /bin/bash 

这将做你想做的 - 但请注意,bash不会显示一个提示,因为它将以“非交互式”模式运行。

哦,还有一件事 - 是的,这是一个真的坏主意。

+0

大声笑我知道它的一个愚蠢的想法更多是为了它可以做的兴趣。感谢伟大的回应btw。令人敬畏的解释细节总体:)良好的工作。 –

+0

其实现在试过了。 -e不是一个公认的开关我使用ubuntu si它是我的netcat版本还是我错过了什么? –

+0

@TJ Pavlu:哦,是的,默认情况下,Ubuntu安装一个gimped netcat,你需要'netcat-traditional'包,它提供'nc.traditional'。 – caf

0

您可以使用tee将输出重定向到临时文件,然后在另一个终端中将tail --follow=name --retry重定向。

nc -l 1500 | tee /tmp/file.txt 

,当然还有:

tail --follow=name --retry /tmp/file.txt 

这样,您就可以通过cron作业做rm -f /tmp/file.txt没有tail命令被中断。

+0

我想你已经误解了这个问题。 –