Hören Sie unter Linux auf eingehende Anforderungen für den Port, und führen Sie dann den Befehl aus

441
Elliot Reed

Ich bin nach einer so einfachen Lösung wie möglich, um einen Port auf eine bestimmte Anforderung zu überwachen und dann einen Befehl auszuführen, falls der Port getroffen wird und die korrekte Anfrage zurückgezogen wird.

Z.B. Senden Sie eine Anforderung 192.168.0.10an einen Port 5432mit der Zeichenfolge my_token. 192.168.0.10Führen Sie auf dem Host (z. B. ) dann einen Befehl aus, wenn dieser Port getroffen wird und die Zeichenfolge übereinstimmt.

Ich dachte zuerst daran, netstatzB nc -l 5000den Befehl bei Änderung auszuführen. Im Idealfall wäre jedoch neben diesem oder ähnlichem ein String oder ein Token ideal, aber ohne den Einsatz eines ausgewachsenen Webservers - im Wesentlichen etwas, das im Hintergrund mit wenigen Ressourcen ausgeführt werden kann.

1

1 Antwort auf die Frage

3
Kamil Maciorowski

Es kann mit gemacht werden nc. Das folgende Snippet liest Zeilen vom Port 5000und wird ausgeführt, some_commandwenn die Zeile tokenoder some_other_commanddie Zeile ist foo. Nachdem der Client die Verbindung getrennt hat, ncwird er erneut ausgeführt.

while true; do nc -l 5000 | { while read line; do case "$line" in token ) some_command;; foo ) some_other_command;; esac done } done 

Um mit ihm zu sprechen, führen Sie ihn aus nc localhost 5000und geben Sie dann Folgendes ein:

foo token whatever foo 

Beenden Sie mit Ctrl+ Doder Ctrl+ C. Der Nachteil ist: Wenn ein Client verbunden bleibt, kann kein anderer eine Verbindung herstellen. Um solche Kollisionen zu minimieren, können Sie jeweils einen Befehl senden und die Verbindung sofort trennen:

echo token | nc localhost 5000 

oder (in Bash)

echo token > /dev/tcp/127.0.0.1/5000