3

在cygwin中,我试图设置一个netcat代理,如下:

  1. 服务器:在我正在运行的一个终端中

    nc -lp 6000
    
  2. 代理:在第二个终端中,我正在运行代理(收听 2000 并进一步传递到 6000)。

  3. 客户:在我正在运行的第三个终端中

    nc localhost 2000
    

考试

在client中键入内容应该会显示在server上。在服务器上输入一些东西,应该会出现在客户端上。

以下是我在第二个终端尝试做的事情:

  1. 这个工作正常:

    nc -lp 2000 <fifo | tee /dev/stderr | nc localhost 6000 >fifo
    

(之前使用“mkfifo fifo”设置了 fifo)

  1. 但是......这些不起作用:(

    nc -lp 2000 <fifo | awk '{print}' | nc localhost 6000 >fifo
    nc -lp 2000 <fifo | awk -f my.awk | nc localhost 6000 >fifo
    nc -lp 2000 <fifo | awk -f my.awk - | nc localhost 6000 >fifo
    

(其中 my.awk 仅包含 {print})

请帮忙pppppppppppppp!!!!!!!!!在此先感谢,阿德里安。

4

1 回答 1

4

问题是由于缓冲造成的,并且没有标准方法可以在 awk 中将其关闭。在某些系统上,您可以通过调用来绕过它fflush,例如:

nc -lp 2000 <fifo | awk '{print}{fflush()}' | nc localhost 6000 >fifo

遗憾的是,这并不总是有效,具体取决于平台和 awk 版本。您可能会考虑使用允许您禁用缓冲的不同处理器,例如 Perl。

于 2011-12-30T22:08:47.140 回答