Ich möchte, dass ein UDP-Echoserver Pakete abruft und genau das antwortet, was er erhalten hat. Wie kann ich das einfach mit netcat
oder machen socat
? Es sollte für immer am Leben bleiben und Pakete verarbeiten, die von mehreren Hosts stammen.
Ich möchte, dass ein UDP-Echoserver Pakete abruft und genau das antwortet, was er erhalten hat. Wie kann ich das einfach mit netcat
oder machen socat
? Es sollte für immer am Leben bleiben und Pakete verarbeiten, die von mehreren Hosts stammen.
Antworten:
Ein weiteres netcat-ähnliches Tool ist die nmap-Version, ncat
die viele eingebaute Extras enthält, um solche Dinge zu vereinfachen. Das würde funktionieren:
ncat -e /bin/cat -k -u -l 1235
-e bedeutet, dass es / bin / cat ausführt (um das zurückzugeben, was Sie eingeben).
-k bedeutet, dass es nach jeder Verbindung
lauscht.
-u bedeutet, dass udp
-l 1235 bedeutet, dass es Port 1235 abhört
Früher habe ich socat -v PIPE udp-recvfrom:5553,fork
den Server und socat - udp:localhost:5553
für Clients ausgeführt.
Das war eine große Hilfe!
socat TCP4-LISTEN:2000,fork EXEC:cat
Sie können auch socat (anstatt netcat) als Echoserver und netcat als Client verwenden.
Socat-Echoserver (lauscht auf TCP-Port 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Netcat-Client (stellt über TCP-Port 1234 eine Verbindung zum Server-IP her):
nc serverip 1234
Sie können ein C-Programm schreiben, das gabelt nc -u -l -p 4321
und dann dup (2) verwendet , um eine Verbindung herzustellen :
Dann liest der Elternteil in einer Endlosschleife aus stdin und schreibt in stdout, was auch immer der Elternteil liest.
socat -v PIPE UDP-LISTEN:5555,fork
, aber die zweite Verbindung wird abgelehnt. Übrigens funktioniert es gut mit TCP-LISTEN. Ich vermeide es zu codieren, sonst könnte ich alles in C schreiben.
Wenn Sie unter Windows arbeiten und eine Unix-ähnliche Umgebung wie cygwin verwenden, stellt netcat migth den Parameter -e nicht zur Verfügung. Das hat gut funktioniert für mich.
netcat
Lösung in Ubunutu vorinstalliert
Das netcat
in Ubuntu 16.04 vorinstallierte kommt von netcat-openbsd
und hat keine -c
Option, aber das Handbuch gibt eine Lösung:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Dann Kundenbeispiel:
echo abc | netcat localhost 8000
TODO: Wie ändere ich den Wert der Eingabezeichenfolge? Folgendes gibt keine Antwort zurück:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
Das Remote-Shell-Beispiel funktioniert jedoch:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
Ich weiß jedoch nicht, wie ich mit gleichzeitigen Anfragen umgehen soll.