Sposób UCSPI-TCP
Istnieją zestawy narzędzi inne niż netcat. Oto jak korzystać z kilku z nich. Wszyscy zakładają istnienie service
skryptu, który uruchamia twój func
, cokolwiek to może być:
#! / bin / sh
podczas odczytu -r WIADOMOŚĆ
zrobić
echo 1> i 2 "$ {TCPREMOTEIP}" "$ {TCPREMOTEPORT}" rx "$ {MESSAGE}"
func
gotowy
Te TCPREMOTEIP
i TCPREMOTEPORT
środowisko zmienne są zdefiniowane przez protokół ucspi-TCP.
Skrypt jest spawany jako osobny proces dla każdego połączenia TCP przy użyciu różnych zestawów narzędzi. W dalszej części narzędzia są pokazane jako używane w krótkim skrypcie. Taki skrypt, konwencjonalnie nazwany run
, jest sposobem, w jaki można go uruchomić w menedżerze usług daemontools-family. Można je oczywiście wywoływać bezpośrednio.
Bernstein ucspi-tcp
Dzięki ucspi-tcp Daniela J. Bernsteina tcpserver
spawnuje service
skrypt:
#! / bin / sh -e
exec tcpserver -v -P -R -H-l 0 0.0.0.0 7777 ./service
Istnieją ulepszone wersje Bernstein ucspi-tcp z obsługą IPv6. W przypadku Erwina Hoffmana tcpserver
próbuje on obsługiwać zarówno IPv4, jak i IPv6 w jednym (jeśli system operacyjny to obsługuje, kilka nie) i uruchamia service
skrypt:
#! / bin / sh -e
exec tcpserver -v -P -R -H-l 0 :: 0 7777 ./service
Bercot s6-networking, s6 i execline
Laurent Bercot za s6 dostępem do sieci, s6-tcpserver4
a s6-tcpserver6
uchwyt IPv4 i IPv6 oddzielnie i ikra service
skrypt:
#! / command / execlineb
s6-tcpserver4 -v 0.0.0.0 7777
./usługa
#! / command / execlineb
s6-tcpserver6 -v :: 0 7777
./usługa
Można budować bardziej złożone serwery, interpretując narzędzia takie jak s6-tcpserver-access
iw s6-applyuidgid
łańcuchu bezpośrednio przed nim ./service
.
Narzędzia UCSPI firmy nosh
Dzięki zestawowi narzędzi nosh tcp-socket-listen
nasłuchuje na gnieździe TCP, ponownie obsługując jednocześnie IPv4 i IPv6, jeśli system operacyjny to obsługuje, i łańcuchy, do tcp-socket-accept
których z kolei spawnuje service
skrypt:
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
tcp-socket-accept --verbose - nazwa_lokalna 0
./usługa
Lub jeden uruchamia dwa osobne procesy w systemach operacyjnych takich jak OpenBSD:
#! / bin / nosh
tcp-socket-listen 0.0.0.0 7777
tcp-socket-accept --verbose - nazwa_lokalna 0
./usługa
#! / bin / nosh
tcp-socket-listen :: 7777
tcp-socket-accept --verbose - nazwa_lokalna ::
./usługa
Można budować bardziej złożone serwery, interpretując narzędzia takie jak ucspi-socket-rules-check
i setuidgid
w łańcuchu.
#! / bin / nosh
tcp-socket-listen --combine4and6 :: 7777
setuidgid nieuprzywilejowany użytkownik
tcp-socket-accept --verbose - nazwa_lokalna 0
ucspi-socket-rules-check --verbose
./usługa
Pape ipsvd
Z ipsvd Gerrit Pape, tcpsvd
spawnuje service
skrypt:
#! / bin / sh -e
exec tcpsvd -v 0.0.0.0 7777 ./service
UCSPI-UDP
Wspólny service
skrypt może obsłużyć, gdy standardowym wejściem jest gniazdo strumienia . Ale nie określiłeś jawnie TCP.
Chociaż niektóre z wyżej wymienionych zestawów narzędzi mogą być używane do budowania serwerów UDP w podobny sposób, jak można ich używać do budowania serwerów TCP (por. udp-socket-listen
Nosh), trudno jest zbudować rzeczywisty program usługowy za pomocą skryptu powłoki, ponieważ wbudowane powłoki nie koniecznie radzą sobie dobrze, gdy standardowym wejściem jest gniazdo datagramu .
Dalsza lektura
- Protokół:
- zestawy narzędzi:
- Daniel J. Bernstein. ucspi-tcp . cr.yp.to.
- s6-networking . Laurent Bercot. skarnet.org.
- s6 . Laurent Bercot. skarnet.org.
- Jonathan de Boyne Pollard (2016). nosh . Oprogramowania.
- ipsvd . Gerrit Pape. smarden.org.
- instrukcje obsługi: