Netcat (nc6) - Minimaler IPv6-TCP-Server und -Client

7

Ich versuche, einen einfachen IPv6-Echo-Server nur mit netcat (oder besser nc6) einzurichten. Client und Server befinden sich beide im selben lokalen Netzwerk. Der Client beendet jedoch sofort:


IPv6-Server:

$ nc6 -6 -vv --continuous --exec cat -l -p 5555
nc6: listening on :: 5555 ...

IPv6-Client:

$ nc6 -6 -vv fe80::213:33ff:feab:ff5d 5555
nc6: fe80::213:33ff:feab:ff5d (fe80::213:33ff:feab:ff5d) 5555 [5555] open
nc6: using stream socket
nc6: using buffer size of 8192
nc6: error reading from remote: Transport endpoint is not connected
nc6: connection closed (sent 0, rcvd 0)
nc6: readwrite returned -1
nc6: closed local
nc6: closed remote
$ 

Was ist das Problem?
Sollte ich den Server so konfigurieren, dass eingehende Verbindungen nur über eine seiner Schnittstellen abgehört werden? (Wie?)


Die IPv4-Version funktioniert einwandfrei:

IPv4-Server:

nc6 -vv --continuous --exec cat -l -p 5555
nc6: listening on :: 5555 ...
nc6: listening on 0.0.0.0 5555 ...
nc6: connect to 192.168.1.35 5555 from xyrobert.local (192.168.1.35) 37928 [37928]
nc6: using stream socket
nc6[7502]: executing 'cat'
nc6[7502]: using buffer size of 8192
nc6[7502]: read 4 bytes from remote
nc6[7502]: wrote 4 bytes to local
nc6[7502]: read 4 bytes from local
nc6[7502]: wrote 4 bytes to remote

IPv4-Client:

nc6 -vv 192.168.1.35 5555
nc6: kearney.local (192.168.1.35) 5555 [5555] open
nc6: using stream socket
nc6: using buffer size of 8192
Hi!
nc6: read 4 bytes from local
nc6: wrote 4 bytes to remote
nc6: read 4 bytes from remote
Hi!
nc6: wrote 4 bytes to local
Robert Tzu.
quelle

Antworten:

9

Wenn Sie eine Verbindung zu einer IPv6-Link-Local-Adresse herstellen, müssen Sie angeben, über welchen Link diese vom Client-System aus erreicht werden soll. Für jeden Link werden dieselben linklokalen Adressen verwendet, daher muss dem Client explizit mitgeteilt werden, welcher Link (Schnittstelle) verwendet werden soll. Wenn das System, das Sie erreichen möchten, über eth0das Client-System verbunden ist, müssen Sie eine Verbindung herstellen fe80::213:33ff:feab:ff5d%eth0.

Die Verwendung routingfähiger IPv6-Adressen ist viel einfacher, da dann anhand der lokalen Routing-Tabelle bestimmt wird, über welche Schnittstelle das Paket gesendet werden soll.

Sander Steffann
quelle