Zastanawiam się, jak zdobyć skrypt powłoki, aby nasłuchiwał na określonym porcie (może używając netcata?). Mamy nadzieję, że gdy wiadomość zostanie wysłana do tego portu, skrypt nagrywa wiadomość, a następnie uruchamia funkcję.
Przykład:
Komputer 1 ma skrypt działający w tle, skrypt otworzył port 1234 dla ruchu przychodzącego
Komputer 2 wysyła komunikat „witaj świecie” na porcie 1234 komputera 1
Skrypt na komputerze 1 rejestruje komunikat „witaj świecie” w zmiennej $ MESSAGE
Skrypt działa teraz, gdy ustawiono zmienną $ MESSAGE
Jak mam to zrobić?
źródło
netcat
istnieje po jednym połączeniu.socat
zrobiłby to samo, jeśli usuniesz „, fork” z mojej linii poleceń.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ójfunc
, cokolwiek to może być:Te
TCPREMOTEIP
iTCPREMOTEPORT
ś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
spawnujeservice
skrypt: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 uruchamiaservice
skrypt:Bercot s6-networking, s6 i execline
Laurent Bercot za s6 dostępem do sieci,
s6-tcpserver4
as6-tcpserver6
uchwyt IPv4 i IPv6 oddzielnie i ikraservice
skrypt:Można budować bardziej złożone serwery, interpretując narzędzia takie jak
s6-tcpserver-access
iws6-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, dotcp-socket-accept
których z kolei spawnujeservice
skrypt:Lub jeden uruchamia dwa osobne procesy w systemach operacyjnych takich jak OpenBSD:
Można budować bardziej złożone serwery, interpretując narzędzia takie jak
ucspi-socket-rules-check
isetuidgid
w łańcuchu.Pape ipsvd
Z ipsvd Gerrit Pape,
tcpsvd
spawnujeservice
skrypt: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
tcpserver
tcpserver
. ucspi-tcp6 . fehcom.de.s6-tcpserver4
. Laurent Bercot. s6-networking . skarnet.org.s6-tcpserver6
. Laurent Bercot. s6-networking . skarnet.org.s6-tcpserver-access
. Laurent Bercot. s6-networking . skarnet.org.s6-applyuidgid
. Laurent Bercot. s6 . skarnet.org.tcpserver
. Przewodnik nosh . Oprogramowania.tcp-socket-listen
. Przewodnik nosh . Oprogramowania.tcp-socket-accept
. Przewodnik nosh . Oprogramowania.ucspi-socket-rules-check
. Przewodnik nosh . Oprogramowania.setuidgid
. Przewodnik nosh . Oprogramowania.udp-socket-listen
. Przewodnik nosh . Oprogramowania.tcpsvd
. ipsvd . Gerrit Pape. smarden.org.źródło
Można to również zrobić za pomocą tego,
udpsvd
który jest dostępny na Ubuntu / Debian ( patrz strona man ), a także wbudowany w busybox. Przykład:Zastąp
cat
skryptem powłoki, aby wykonać, stdin to pakiet.Za pomocą
netcat
możesz biegać w pętli, aby słuchać i przekazywać każdy pakiet domyscript
:Jeśli chcesz przekazać wszystkie otrzymane pakiety jako strumień do pojedynczego wywołania skryptu:
źródło