我有netcat端口监听端口1501,我想将该端口上的接收输入传送到新的终端窗口。我知道这是一个坏主意,因为基本上任何一个端口上的人都可以控制机器,但我想知道是否可以这样做。谁知道怎么做。到目前为止我已经尝试过了。
nc -l 1500 |的xterm 要么 nc -l 1500 | xterm -e“NAMEOFWINDOW”
还试图以简单的方式重定向到gnome-terminal。我能做到
nc -l 1500 | grep“SOMEKEYWORD”成功。
有什么想法吗? -TJ
答案 0 :(得分:2)
你有两个问题。第一个是xterm
和gnome-terminal
不是提供提示和接受命令的程序 - 它们只是将键盘和屏幕连接到该程序的一种方式,即你的shell(通常是{ {1}})。因此,您希望连接到netcat实际上是/bin/bash
。
其次,您需要的不仅仅是单向管道,这是您使用bash
获得的。如果您使用:
|
那么你只有从用户到 nc -l -p 1500 | /bin/bash
的管道 - 他们将能够提供输入,但不会看到任何输出。或者,如果你这样做:
bash
然后相反的情况将适用 - 您将只有一个 来自 /bin/bash | nc -l -p 1500
的用户。用户将看到bash
的输出,但无法提供任何输入。
幸运的是,netcat支持为另一个命令创建双向管道(实际上是两个管道)的选项:
bash
这可以做你想要的 - 但请注意nc -l -p 1500 -e /bin/bash
不会显示提示,因为它将以“非交互”模式运行。
哦,还有一件事 - 是的,这是真的坏主意。
答案 1 :(得分:1)
这种方式不可行,因为xterm
不接受 stdin 上的输入,它会直接捕获键盘输入。
有两种选择:
bash
代替xterm:nc -l 1500 | bash
xterm
s -S选项,但您需要先将netcat附加到伪tty,然后将xterm附加到伪终端答案 2 :(得分: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
而不会中断{{1}}命令。