bash netcat proxy в сочетании с awk - PullRequest
3 голосов
/ 31 декабря 2011

В cygwin я пытаюсь настроить прокси netcat следующим образом:

  1. Сервер : в одном терминале я работаю

    nc -lp 6000
    
  2. Прокси : во втором терминале я использую прокси (прослушиваю 2000 и передаю дальше 6000).

  3. Клиент : в третьем терминале у меня работает

    nc localhost 2000
    

Тест

Ввод чего-то в клиент должен появиться на сервере .Набрав что-то на server , должно появиться на client .

Ниже приведено то, что я пытался сделать во 2-м терминале:

  1. Этот работает нормально:

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

(где fifo был предварительно настроен с помощью "mkfifo 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})

Пожалуйста, помогитеppppppppppppppp !!!!!!!! Заранее спасибо, Адриан.

1 Ответ

4 голосов
/ 31 декабря 2011

Проблема связана с буферизацией, и в awk нет стандартного способа выключить ее.В некоторых системах вы можете обойти это, вызвав fflush, например:

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

К сожалению, это не всегда работает в зависимости от платформы и версии awk.Вы можете рассмотреть возможность использования другого процессора, который позволяет отключить буферизацию, например Perl.

...