auf Port lauschen und warten Remote Request

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
cncbp
Beiträge: 6
Registriert: 27.10.2021 15:10:53

auf Port lauschen und warten Remote Request

Beitrag von cncbp » 27.07.2022 12:08:37

Hallo zusammen,

ich suche nach einer Möglichkeit auf einem Port nach Befehlen zu lauschen.

Am liebsten aus einer Bash heraus

Code: Alles auswählen

while warte_auf_signal_auf_port_0815
do
	command=$1
	parameter=$2

	# nur ein simples Beispiel, soll dann mehr werden
	if [ "$command" == "lock" ]; then
		dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply /ScreenSaver   org.freedesktop.ScreenSaver.Lock # sperren
	fi
done

Code: Alles auswählen

wget -qO - http://127.0.0.1:23456/?command=lock
Im Grunde wie es eigentlich bspw. Apache2 macht, nur deutlich simpler gehalten.

PS: Ich glaube das es vielleicht mit nc möglich wäre. Aber ich erinnere mich, dass sogar BASH eigentlich mal einen Port aufmachen konnte. Oder?

Code: Alles auswählen

# nc -lk 23456
GET /?command=123 HTTP/1.1
Host: 127.0.0.1:23456
User-Agent: Wget/1.21.2
Accept: */*
Accept-Encoding: identity
Connection: Keep-Alive
Hier bleibt das Wget aber stehen, es müsste vermutlich nc in diesem Fall terminiert und neu gestartet werden.
"GET /?command=123 HTTP/1.1" benötigt vorher aber eine Verarbeitung

Code: Alles auswählen

# wget -qO - http://127.0.0.1:23456?command=123

JTH
Moderator
Beiträge: 3014
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: auf Port lauschen und warten Remote Request

Beitrag von JTH » 27.07.2022 12:58:27

Die Manpage von netcat (BSD) hat ein Beispiel, wie man lauschend auf Empfangenes reagieren und antworten kann. Dort wird das Empfangene in einer Shell auf der Serverseite ausgeführt, das kann man aber natürlich durch beliebige Verarbeitung ersetzen.

Wenn du auf dem Weg tatsächlich ganze, mehrzeilige HTTP-Anfragen verarbeiten willst – nicht nur die GET-Zeile – wird das wohl ein bisschen Arbeit. Und kommt wahrscheinlich komplett durcheinander, wenn mehrere Clients gleichzeitig anfragen.

Einfacher wärs, wenn du von Clientseite auch nur Einzeiler schickst, z.B. auch per netcat.

netcat nach einer geschlossenen Verbindung weiterlaufen lassen kann man mit -k.
Manchmal bekannt als Just (another) Terminal Hacker.

uname
Beiträge: 12046
Registriert: 03.06.2008 09:33:02

Re: auf Port lauschen und warten Remote Request

Beitrag von uname » 27.07.2022 13:09:28

Netcat ist eine Möglichkeit. Ich glaube es gibt auch einfache Beispiele in Python 3. Damit kenne ich mich nicht aus. Für Python solltest vielleicht hier lesen. Vor mittlerweile Jahrzehnten (irgendwann im letzten Jahrtausend) habe ich AF_INET-Sockets in C etwa so (erste Seite des PDF) programmiert. Ich denke große Teile von GNU/Linux funktionieren heute noch so. Um es wirklich zu verstehen, solltest du den C-Ansatz verfolgen. Eigentlich ist Socketprogrammierung ganz einfach. Viel verändert hat sich in den letzten Jahrzehnten wohl auch nicht.

Antworten