Простой клиент / сервер с nc не работает

Почему следующее не работает?

У меня недавно установлена ​​система Debian 9. iptables широко открыт:

[···]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Я вхожу на двух отдельных консолях (ну, два отдельных входа SSH). В одном из них я бегу:

[···]# nc -l 11115

Затем я иду на другую консоль и запускаю:

[···]# nc localhost 11115

и я получаю сообщение об ошибке "Отказ в соединении":

[···]# nc localhost 11115
localhost [127.0.0.1] 11115 (?) : Connection refused

Я тоже пробовал nc 127.0.0.1 11115 попробовал с telnet --- всегда отказано в соединении.

На стороне "прослушивания" я тоже попробовал nc -l localhost 11115 --- нет разницы.

Что я пропускаю или делаю неправильно?

[EDIT]: на компьютере с CentOS 6.9 те же самые команды, что и выше, работают как положено. То же самое на моем Ubuntu 14.04 дома. Я думал, что это может быть, что запуск от имени root делает nc запретить некоторые функции. Но нет, я просто попробовал как обычный пользователь на компьютере с Debian 9, и он все равно не работает. Есть идеи почему?

2 ответа

Решение

На самом деле существует три (или более?) Разных программ, называемых nc (Netcat), которые являются вилками или переписывает одну и ту же основную программу издалека и издалека.

По умолчанию в Debian кажется то, что он называет netcat-traditional, древняя оригинальная версия. Я смог воспроизвести эту проблему с netcat-Traditional; прослушивание кажется очень нарушенным. Это фактически не связывалось с портом; Я не мог видеть это, слушая в ss вывод, и я не видел, что он пытался связать при запуске его под strace.

Другой доступный пакет Debian называется netcat-openbsd, которая в настоящее время поддерживается разработчиками OpenBSD для первоначальной netcat. Вы должны обнаружить, что он работает, если вы установите этот пакет (и вы можете затем удалить netcat-traditional).

Существует еще один пакет netcat, который используется системами на базе Red Hat, разработанный и поддерживаемый Федором из nmap и insecure.org и другими разработчиками. Это полное переписывание с нуля и не использует традиционный код netcat или BSD netcat. Это также работает правильно. Имя его пакета (в системах Red Hat): nmap-ncat,

В Debian 2 пакеты netcat и переходный пакет, который будет ссылаться на netcat-традиционный

root@debian9:~# apt-cache search ^netcat
netcat - TCP/IP swiss army knife -- transitional package
netcat-traditional - TCP/IP swiss army knife
netcat-openbsd - TCP/IP swiss army knife
[../..]

Когда вы запускаете несколько раз nc -l 11115, nc прослушивает, но на случайном порту (кажется, случайным) .

root@debian9:~# lsof -p $(pidof nc ) | grep LISTEN
nc      12734 root    3u  IPv4 11892054      0t0   TCP *:44907 (LISTEN)

Фактически вы можете запустить nc -l вместо nc -l 11115, и у вас будет такое же поведение.

ДА netcat-Traditional - это старое программное обеспечение, и некоторые простые ошибки не исправлены (в вашем случае отсутствует параметр -p PORT для прослушивания.

Вы можете предпочесть netcat-openbsd, и он будет работать так, как вы ожидали.

root@debian9:/# lsof -p $( pidof nc ) | grep LISTEN
nc      2140 root    3u  IPv4  29855      0t0     TCP *:11115 (LISTEN)
Другие вопросы по тегам