
Ich möchte einen Netcat-Listener auf einem bestimmten Port innerhalb eines Docker-Containers starten, um eingehende Anfragen manuell zu debuggen, aber das Verhalten von Netcat innerhalb von Docker scheint anders zu sein als das, was ich in einem nicht-dockerisierten Setup beobachtet habe. Am Beispiel von Vanilla Ubuntu 18.04:
sudo docker run -it -p 6010:6010 ubuntu:18.04
# inside container
apt-get update && apt-get install -y netcat net-tools
nc -lk 0.0.0.0 6010 &
# then to verify what I am listening on
netstat -an|grep LISTEN
# example output:
# tcp 0 0 0.0.0.0:39331 0.0.0.0:* LISTEN
Kein Fehler jeglicher Art, nur eine stillschweigende Zuweisung eines anderen Punkts. Aufgrund meiner Erfahrung mit dem Erstellen nicht dockerisierter Listener dachte ich immer, dass entweder ein Fehler (z. B. Port belegt) auftritt oder der angeforderte Port erfolgreich zugewiesen wird. Was ist hier los und wie kann ich das Abhören des gewünschten Ports erzwingen?
Um möglichen Vorschlägen zuvorzukommen, wie der Mann von Netcat weiter unten sagt -p [port]
:
Es ist ein Fehler, diese Option in Verbindung mit der Option -l zu verwenden.
Antwort1
Wie in den Kommentaren vorgeschlagen, erfordert die BusyBox-Netcat-Version -p
die Angabe des Abhörports, sodass die von Ihnen zitierte Handbuchseite in diesem Fall nicht zutrifft. Dies ist die korrekte Befehlszeile für BusyBox-Netcat:
nc -l -p 6010 # IP can be left out if it is 0.0.0.0 (all IPs)
Hier ist die Hilfeseite für NC in meiner Version von Alpine:
/ # nc -v
BusyBox v1.32.1 () multi-call binary.
Usage: nc [OPTIONS] HOST PORT - connect
nc [OPTIONS] -l -p PORT [HOST] [PORT] - listen
-e PROG Run PROG after connect (must be last)
-l Listen mode, for inbound connects
-lk With -e, provides persistent server
-p PORT Local port
-s ADDR Local address
-w SEC Timeout for connects and final net reads
-i SEC Delay interval for lines sent
-n Don't do DNS resolution
-u UDP mode
-v Verbose
-o FILE Hex dump traffic
-z Zero-I/O mode (scanning)```