Что такое тройник для сетевых пакетов?

Ладно, я понял, что я делал не так... Строка 4 должна быть file="name Backup ($current_date).tgz"Строка 5 должна бытьtar -cvzf "$file" module8

2
28.06.2020, 09:52
2 ответа

Сетевое взаимодействие обычно двунаправленное, в то время как teeи конвейеры оболочки работают только -однонаправленно.

Но если у вас есть некоторые сетевые службы, которые только получают и никогда не отправляют обратно данные, вы можете отправить один и тот же поток байтов всем им по TCP с помощью zsh+ socatс чем-то вроде:

generate-stream > >(socat -u - tcp:host:8001) > >(socat -u - tcp:host:8002)

Или с другими оболочками с поддержкой подстановки процессов, но без поддержки multios:

generate-stream | tee >(socat -u - tcp:host:8001) | socat -u - tcp:host:8002

Теперь, чтобы подключить это к службе, которая принимает входящие соединения и перенаправляет полученный трафик таким teeобразом, вы можете сделать что-то вроде:

CODE='
  cat > >(socat -u - tcp:host:8001) > >(socat -u - tcp:host:8002)
' socat -u tcp-listen:8000,fork,reuseaddr \
           exec:'zsh -c eval\\ $CODE',nofork

Здесь запускается служба, которая получает трафик через TCP-порт 8000 (в однонаправленном режиме )и перенаправляет его на серверы через TCP-порты 8001 и 8002 на host.

noforkне обязательно, это просто оптимизация, чтобы zshstdin напрямую был сетевым сокетом.

Или если у вас нет zsh, но естьbash:

CODE='
  tee >(socat -u - tcp:host:8001) | socat -u - tcp:host:8002
' socat -u tcp-listen:8000,fork,reuseaddr \
           exec:'bash -c eval\\ \\\"$CODE\\\"',nofork

Это может быть адаптировано к любому из многих других транспортных протоколов, поддерживаемых socat.

Вы можете написать zshвспомогательную функцию для этого типа:

ntee() (
  src=$1; shift
  export CODE=cat
  for dst do
    CODE+=" > >(socat -u - ${(qq)dst})"
  done
  socat -u "$src" exec:'zsh -c eval\\ $CODE',nofork
)

И использовать как:

ntee tcp-listen:8000,reuseaddr,fork \
       tcp:host1:8001 \
       udp-sendto:host2:8002 \
       file:file.log,creat,append

например.

8
18.03.2021, 23:24

Инструменты netcat или socat прекрасно подходят для работы с потоками данных прикладного уровня.Чтобы пересылать копии сетевых пакетов другим адресатам на машине с Linux, вам нужно посмотреть уровень ядра -iptables.

Нужная вам функциональность tee может быть реализована с помощью расширения TEE:Документация по расширению iptables TEE

Конкретные iptablesправила, которые вы хотите настроить, будут зависеть от ваших сетевых интерфейсов, количества портов для переадресации и т. д.

3
18.03.2021, 23:24

Теги

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