Шлях 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.
- довідкові посібники: