Назад | Перейти на главную страницу

Netcat не может привязать прослушиваемый сокет

На моем компьютере с Ubuntu 14.04 я могу делать такие вещи:

$ nc -l 5349 -vvv
Listening on [0.0.0.0] (family 0, port 5349)

или это:

$ nc -vvv -l 192.168.254.96 5349
Listening on [192.168.254.96] (family 0, port 5349)

И сокет открывается для прослушивания входящих подключений на моем локальном IP-адресе (192.168.254.96). И, очевидно, я могу подключиться с другой стороны и передавать данные.

Но на сервере за NAT с Debian 8.0 Jessie я получил эту странную ошибку:

$ nc -vvv -l 5349
5349: inverse host lookup failed: Unknown host
nnetfd reuseport failed : Protocol not available
listening on [any] 38541 ... : Protocol not available

или:

$ 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

Порт не используется:

$ ss -tnl | grep 5349
(empty)

и это правильный IP-адрес:

$ 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

В чем может быть проблема? Может быть что-то связано с NAT за сервером?

Для netcat в режиме прослушивания вы должны использовать -p флаг для выбора порта прослушивания, например nc -vvv -l -p 5349.

вторая ошибка: nnetfd reuseport failed : Protocol not available относится к опции сокета SO_REUSEPORT. Он был представлен в ядре linux версии 3.9, и версия netcat, использующая его, не будет работать с более ранним выпуском ядра. Вы можете обновить ядро ​​до более новой версии или использовать другой вариант netcat. Я считаю, что netcat-openbsd должен работать.