2016-06-01 22 views
0

Warum gibt der folgende Befehl (auf meiner Debian-8.4-Maschine) keinen Fehler vom Typ "Adresse wird bereits verwendet" aus, wenn ich ihn von zwei verschiedenen Terminals aus ausführe?Wie kann Netcat denselben Anschluss von zwei verschiedenen Terminals auf demselben Host abhören?

netcat -p 1234 -l 

Ich frage mich, warum es keinen Fehler wirft, da es zwei Prozesse auf dem gleichen Port zuhören beginnt.
Verwendet netcat keine Sockets? Wie ist es möglich?

+0

Haben Sie sich http://stackoverflow.com/questions/1694144/ angesehen? – Mats

+0

Ja, aber wie hier gesagt: "Mehrere TCP-Sockets, die alle an denselben Port gebunden sind, können koexistieren, vorausgesetzt, sie sind alle an verschiedene lokale IP-Adressen gebunden." es ist nur möglich, wenn die Sockets an verschiedene lokale IP-Adressen gebunden sind (wenn ich das richtig verstehe), und wie ich es verstehe, ist es hier nicht der Fall. – Simon

+0

Dies ist ein Thema für Stack-Überlauf, da es keine Programmierfrage ist. Besuche Super User oder eine andere Seite für Fragen wie diese. – xaxxon

Antwort

2

Die -p Option gibt einen Quellport, keine Port lauscht.

Die Option -l schaltet netcat in den Hörmodus.

In Ihrem Beispiel ist 1234 der Eingangswert für die Option -p, nicht die Option -l, was bedeutet, dass kein expliziter Abhörport angegeben ist. Wenn Netcat nicht fehlschlägt, ist Netcat wahrscheinlich eher an Port 0 gebunden, was dem abhörenden Socket mitteilt, an einen zufälligen verfügbaren ephemeren Port zu binden. Daher würden Ihre beiden Netcat-Instanzen tatsächlich verschiedene Ports abhören. Verwenden Sie netstat, um zu überprüfen.

Nach den Linux manpage for netcat:

-l‘verwendet, um festzulegen, dass nc für eine eingehende Verbindung hören soll, anstatt eine Verbindung zu einem Remote-Host zu initiieren. Es ist ein Fehler, diese Option in Verbindung mit den Optionen -p, -s oder -z zu verwenden. Darüber hinaus werden alle Timeouts ignoriert, die mit der Option -w angegeben werden.

-p source_port
Gibt den Quellport an, den nc verwenden soll, vorbehaltlich der Einschränkungen und Verfügbarkeit der Berechtigungen. Es ist ein Fehler, diese Option in Verbindung mit der Option -l zu verwenden.

Aus technischen Gründen ist Ihr Beispiel möglicherweise nicht von Anfang an gültig.

jedoch auf einigen Systemen, darunter auch einige Debian installiert, je nachdem, welchen Geschmack von netcat Sie verwenden (insbesondere der traditionelle Geschmack), müssen Sie tatsächlich können -l und -p zusammen verwenden, aber Sie brauchen, um ihre Bestellung tauschen um einen Abhörport korrekt anzugeben, zB:

nc -l -p 1234