Мне интересно, как получить сценарий оболочки для прослушивания на определенном порту (может быть, с помощью netcat?). Надеюсь, что когда сообщение отправляется на этот порт, сценарий записывает сообщение, а затем запускает функцию.
Пример:
Компьютер 1 имеет скрипт, работающий в фоновом режиме, скрипт открывает порт 1234 для входящего трафика
Компьютер 2 отправляет сообщение «Hello World» на порт 1234 компьютера 1
Скрипт на компьютере 1 записывает сообщение «hello world» в переменную $ MESSAGE
Скрипт запускает функцию теперь, когда установлена переменная $ MESSAGE
Как мне пожертвовать этим?
источник
netcat
существует после одного соединения.socat
сделал бы то же самое, если вы удалите «, fork» из моей командной строки.Путь UCSPI-TCP
Есть наборы инструментов, отличные от netcat. Вот как использовать некоторые из них. Все они предполагают существование
service
скрипта, который запускает вашfunc
, что бы это ни было:В
TCPREMOTEIP
иTCPREMOTEPORT
переменные среды определяются протоколом UCSPI-TCP.Сценарий создается как отдельный процесс для каждого соединения TCP с использованием различных наборов инструментов. В дальнейшем инструменты будут показаны как используемые в коротком скрипте. Такой сценарий, условно названный
run
, - это то, как его можно запустить под менеджером службы семейства daemontools. Они, конечно, могут быть вызваны напрямую.Бернштейн UCSPI-TCP
С UCSPI-ТКФ Daniel J. Бернштейна,
tcpserver
порождаетservice
сценарий:Существуют расширенные версии Bernstein ucspi-tcp с поддержкой IPv6. В случае с Эрвином Хоффманом
tcpserver
попытки обрабатывать как IPv4, так и IPv6 в одном (если операционная система поддерживает это, некоторые не поддерживают) и порождаютservice
сценарий:Bercot s6-network, s6 и execline
С s6-сетью Лорана Беркота,
s6-tcpserver4
иs6-tcpserver6
обрабатывать IPv4 и IPv6 отдельно, и порождатьservice
сценарий:Можно создавать более сложные серверы, вставляя инструменты, такие как
s6-tcpserver-access
иs6-applyuidgid
в цепочку, непосредственно перед этим./service
.Nosh UCSPI инструменты
С помощью набора инструментов nosh
tcp-socket-listen
прослушивает сокет TCP, снова обрабатывая IPv4 и IPv6 одновременно, если операционная система поддерживает это, и цепочки, вtcp-socket-accept
которые в свою очередь порождаетservice
сценарий:Или один запускает два отдельных процесса в операционных системах, таких как OpenBSD:
Можно создавать более сложные серверы, вставляя такие инструменты, как
ucspi-socket-rules-check
иsetuidgid
в цепочку.Папе Ипсвд
С ipsvd Геррита Папа
tcpsvd
порождаетservice
сценарий:UCSPI-UDP
Общий
service
сценарий может обрабатывать, когда стандартный ввод является потоковым сокетом. Но вы не указали TCP явно.Хотя некоторые из вышеупомянутых наборов инструментов можно использовать для создания серверов UDP аналогично тому, как их можно использовать для создания серверов TCP (см.
udp-socket-listen
Nosh), сложно создать реальную служебную программу с помощью сценария оболочки, поскольку встроенные функции оболочки не Обязательно хорошо справляются, когда стандартный ввод является сокетом дейтаграммы .дальнейшее чтение
tcpserver
tcpserver
, ucspi-tcp6 . fehcom.de.s6-tcpserver4
, Лоран Берко. s6-сеть . skarnet.org.s6-tcpserver6
, Лоран Берко. s6-сеть . skarnet.org.s6-tcpserver-access
, Лоран Берко. s6-сеть . skarnet.org.s6-applyuidgid
, Лоран Берко. с6 . skarnet.org.tcpserver
, Руководство Nosh . Softwares.tcp-socket-listen
, Руководство Nosh . Softwares.tcp-socket-accept
, Руководство Nosh . Softwares.ucspi-socket-rules-check
, Руководство Nosh . Softwares.setuidgid
, Руководство Nosh . Softwares.udp-socket-listen
, Руководство Nosh . Softwares.tcpsvd
, ipsvd . Геррит Папе. smarden.org.источник
Это также можно сделать с помощью,
udpsvd
который доступен в Ubuntu / Debian ( см. Man-страницу), а также встроен в busybox. Пример:Замените
cat
на ваш скрипт для запуска, stdin - это пакет.С помощью
netcat
вы можете запустить цикл, чтобы продолжить прослушивание, и передать каждый пакетmyscript
:Если вы хотите передать все полученные пакеты в виде потока на один вызов вашего скрипта:
источник