Auf meinem Computer mit Ubuntu 14.04 kann ich folgende Dinge tun:
$ nc -l 5349 -vvv
Listening on [0.0.0.0] (family 0, port 5349)
oder dieses:
$ nc -vvv -l 192.168.254.96 5349
Listening on [192.168.254.96] (family 0, port 5349)
Und ein Socket wird geöffnet, um eingehende Verbindungen auf meiner lokalen IP-Adresse (192.168.254.96) abzuhören. Und natürlich kann ich mich von der anderen Seite aus verbinden und Daten übertragen.
Aber auf einem Server hinter einem NAT mit Debian 8.0 Jessie erhielt ich diesen seltsamen Fehler:
$ nc -vvv -l 5349
5349: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 38541 ... : Protocol not available
oder:
$ nc -vvv -l 10.1.6.189 5349
10.1.6.189: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 52606 ... : Protocol not available
Der Port wird nicht verwendet:
$ ss -tnl | grep 5349
(empty)
und es ist die richtige IP-Adresse:
$ ip addr list
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 1e:89:93:f1:96:a4 brd ff:ff:ff:ff:ff:ff
inet 10.1.6.189/19 brd 10.1.31.255 scope global eth0
inet6 fe80::1c89:93ff:fef1:96a4/64 scope link
valid_lft forever preferred_lft forever
Was könnte das Problem sein? Könnte etwas mit dem NAT hinter dem Server zusammenhängen?
Antwort1
Für Netcat im Abhörmodus sollten Sie -p
ein Flag verwenden, um den Abhörport auszuwählen, z. B. nc -vvv -l -p 5349
.
der zweite Fehler: nnetfd reuseport failed : Protocol not available
hängt mit der Socket-Option SO_REUSEPORT zusammen. Sie wurde in der Linux-Kernel-Version 3.9 eingeführt und die Netcat-Version, die sie verwendet, funktioniert nicht mit früheren Kernel-Versionen. Sie können entweder Ihren Kernel auf eine neuere Version aktualisieren oder eine andere Variante von Netcat verwenden. Ich glaube, Netcat-OpenBSD sollte funktionieren.