Простой клиент / сервер с 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)