Шлях UCSPI-TCP
Є набори інструментів, крім netcat. Ось як використовувати декілька з них. Всі вони припускають існування service
сценарію, який виконує ваш func
, незалежно від того, що це може бути:
#! / бін / ш
під час читання -r ПОВІДОМЛЕННЯ
робити
echo 1> & 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {ПОВІДОМЛЕННЯ}"
функц
зроблено
В TCPREMOTEIP
і TCPREMOTEPORT
змінні середовища визначаються протоколом UCSPI-TCP.
Сценарій породжується як індивідуальний процес за з'єднанням TCP, використовуючи різні набори інструментів. Далі інструменти відображаються як використані в короткому сценарії. Такий сценарій, умовно названий run
, - це те, як можна було б запустити їх під керівником служби сімейних служб daemontools. На них, звичайно, можна звернутися безпосередньо.
Бернштейн ucspi-tcp
За допомогою ucspi-tcp Даніеля Дж. Бернштейна tcpserver
породжує service
сценарій:
#! / бін / ш -е
exec tcpserver -v -P -R -H -l 0 0.0.0.0 7777 ./service
Існують покращені версії Bernstein ucspi-tcp з підтримкою IPv6. Завдяки Ервіну Гофману, tcpserver
спроби обробляти і IPv4, і IPv6 в одному (якщо операційна система підтримує це, декілька - ні) і породжує service
сценарій:
#! / бін / ш -е
exec tcpserver -v -P -R -H -l 0 :: 0 7777 ./service
Bercot s6-networking, s6 та execline
З s6-мережі Laurent Bercot, в s6-tcpserver4
і s6-tcpserver6
обробляти IPv4 і IPv6 окремо, і нерест service
скрипт:
#! / команда / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./сервіс
#! / команда / execlineb
s6-tcpserver6 -v :: 0 7777
./сервіс
Можна створити більш складні сервери, розміщуючи такі інструменти, як s6-tcpserver-access
і s6-applyuidgid
в ланцюзі безпосередньо перед цим ./service
.
інструменти UCSPI
За допомогою інструмента "nosh" tcp-socket-listen
слухає сокет TCP, знову обробляючи IPv4 та IPv6 одночасно, якщо операційна система підтримує це, і ланцюги, до tcp-socket-accept
яких у свою чергу породжує service
сценарій:
#! / бін / ніш
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose --localname 0
./сервіс
Або один запускає два окремих процеси в операційних системах, таких як OpenBSD:
#! / бін / ніш
tcp-socket-прослуховування 0.0.0.0 7777
tcp-socket-accept --verbose --localname 0
./сервіс
#! / бін / ніш
tcp-socket-liste: 7777
tcp-socket-accept --verbose --localname ::
./сервіс
Можна створити більш складні сервери, вставляючи такі інструменти, як ucspi-socket-rules-check
і setuidgid
в ланцюзі.
#! / бін / ніш
tcp-socket-listen --combine4and6 :: 7777
setuidgid непривілейований користувач
tcp-socket-accept --verbose --localname 0
ucspi-socket-rules-check --verbose
./сервіс
Pape ipsvd
За допомогою ipsvd Герріта Папа tcpsvd
породжує service
сценарій:
#! / бін / ш -е
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
Загальний service
скрипт може працювати, коли стандартним входом є гніздо потоку . Але ви не вказали прямо TCP.
Хоча деякі з вищезгаданих наборів інструментів можна використовувати для створення серверів UDP аналогічно тому, як можна використовувати їх для побудови серверів TCP (див. udp-socket-listen
У носі), складно створити фактичну службову програму із скриптом оболонки, оскільки вбудовані оболонки не мають обов'язково добре справляється, коли стандартним входом є розетка дейтаграми .
Подальше читання
- Протокол:
- набори інструментів:
- Даніель Дж. Бернштейн. ucspi-tcp . cr.yp.to.
- s6-мережа . Лоран Беркот. skarnet.org.
- s6 . Лоран Беркот. skarnet.org.
- Джонатан де Бойне Поллард (2016). ніш . Програмне забезпечення.
- ipsvd . Герріт Папе. smarden.org.
- довідкові посібники: