Применить rot13 (или другое шифрование )ко всему пересылаемому трафику через порт

Аргументы, указанные в конце командной строки для awk, обычно воспринимаются как имена файлов, из которых скрипт awkбудет читать. Чтобы установить переменную в командной строке, используйте -v variable=value, например.

awk -v num=10 -f script.awk

Это позволит вам использовать numв качестве переменной в вашем скрипте. В приведенном выше примере начальное значение переменной будет равно 10.

Вы также можете прочитать переменные среды, используя ENVIRON["variable"]в своем скрипте (для некоторой переменной среды с именем variable), или просмотреть аргументы командной строки с помощью ARGV[n], где n— некоторое положительное целое число.


С помощью $1в awkвы бы ссылались на значение первого поля в текущей записи, но, поскольку вы используете его в блоке BEGIN, данные еще не были считаны ни из одного файла.

Число в вашем коде интерпретируется как ноль, поскольку это пустая переменная, используемая в арифметическом контексте.

0
06.01.2021, 18:12
1 ответ

socatдолжно подойти.

Инструментsocatпозаботится обо всех ваших потребностях в (двунаправленном )передаче чего угодно куда угодно. Требуется всего пара аргументов, каждый из которых указывает одну из вещей, которые нужно соединить вместе. Наиболее интересными вариантами в данном случае являются TCP:host:port,TCP-LISTEN:portи FD:или OPEN:. Каждый аргумент также может состоять из пары элементов, разделенных !!, где первый элемент будет прочитан, а другой записан.

Таким образом, минимальное расширение вашего примера на основеnc-может выглядеть примерно так:

Конец сервера:

mkfifo in in_rot out out_rot
rot13 < in > in_rot &
rot13 < out > out_rot &
socat TCP:localhost:22 OPEN:in_rot!!OPEN:out &
socat TCP-LISTEN:2222 OPEN:out_rot!!OPEN:in &

Это можно упростить, избавившись от именованных FIFO и используя FD:для ссылки на каналы, настроенные в Bash.

Как написано, это подходит только для одноразового использования.(socatзавершится после закрытия соединений ). Вы можете либо запустить его в бесконечном цикле, либо настроить модуль systemd .socketили что-то вроде xinetd, чтобы он прослушивал вас и запускал этот скрипт при подключении.

На стороне клиента можно сделать очень похожим образом (прослушивание какого-то локального порта и подключение к серверу на 2222 ), или вы можете опустить часть TCP -LISTEN и вместо этого запустить все целиком. как ProxyCommandиз ssh(, вы можете затем поместить его в свой .ssh/configи использовать ssh, как если бы не было туннеля ).

Если вы когда-нибудь захотите туннелировать больше, чем просто соединение SSH, обратите внимание, что socatтакже имеет опцию TUN:, которая даст вам полноценный -туннельный интерфейс, поэтому вы можете тривиально превратить его в настоящий ВПН.

2
18.03.2021, 22:38

Теги

Похожие вопросы