Создайте одноразовый TCP прокси с копированием в stdout

gate() { mkfifo /tmp/sock1 /tmp/sock2 &> /dev/null && nc -p $1 -l < /tmp/sock1 | tee /tmp/sock2 & PID=$! && nc $2 $3 < /tmp/sock2 | tee /tmp/sock1; kill -KILL $PID; rm -f /tmp/sock1 /tmp/sock2 ; }


Эта команда создает одноразовый TCP прокси с копированием в stdout. Она выполняет следующие действия:

1. mkfifo /tmp/sock1 /tmp/sock2 &> /dev/null: Создает именованные каналы (FIFO) /tmp/sock1 и /tmp/sock2, игнорируя вывод ошибок.

2. nc -p $1 -l < /tmp/sock1 | tee /tmp/sock2: Запускает netcat (nc) на порту $1 и слушает входящие соединения, передавая данные из /tmp/sock1 в tee, что позволяет копировать данные в stdout и в /tmp/sock2.

3. PID=$!: Сохраняет идентификатор процесса (PID) nc -l в переменной $PID.

4. nc $2 $3 < /tmp/sock2 | tee /tmp/sock1: Запускает netcat для подключения к удаленному хосту и порту $2:$3, передавая данные из /tmp/sock2 в tee, что также позволяет копировать данные в stdout и в /tmp/sock1.

5. kill -KILL $PID: Завершает процесс nc -l с сигналом KILL, закрывая прокси после завершения обмена данными.

6. rm -f /tmp/sock1 /tmp/sock2: Удаляет временные именованные каналы после завершения прокси-сервера.

Эта команда полезна для создания временного TCP прокси-сервера с возможностью копирования данных в stdout. Альтернативные способы включают использование утилиты socat или написание собственной программы на основе сокетов. Аргументы $1, $2 и $3 представляют собой порт, удаленный хост и порт соответственно.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *