Warum ignoriert der Netcat-Listener in einem Ubuntu-Docker-Container stillschweigend den angegebenen Port zugunsten eines zufälligen?

Warum ignoriert der Netcat-Listener in einem Ubuntu-Docker-Container stillschweigend den angegebenen Port zugunsten eines zufälligen?

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 -pdie 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)```

verwandte Informationen