2011-06-27 65 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

我想你已經誤解了這個問題。 –