Почему следующее не работает?
У меня только что установленная система 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
--- без разницы.
Что я упускаю или делаю не так?
[РЕДАКТИРОВАТЬ] : на компьютере с CentOS 6.9 те же самые команды, указанные выше, работают должным образом. То же самое и на моем домашнем Ubuntu 14.04. Я подумал, что, возможно, запуск от имени root заставляет nc
отключать некоторые функции. Но нет, я просто пробовал как обычный пользователь на машине Debian 9, и все равно не получилось. Есть идеи, почему?
На самом деле существует три (или более?) Отдельных программы под названием nc
(netcat ), которые являются форками или переписыванием одной и той же базовой программы издавна и издалека.
По-видимому, в Debian по умолчанию используется то, что он называет netcat-Traditional
, древняя оригинальная версия. Я смог воспроизвести эту проблему с помощью netcat-Traditional; слушание кажется очень нарушенным. На самом деле он не привязался к порту; Я не видел, чтобы он слушал в выводе ss
, и я не видел, как он пытается выполнить привязку при запуске под strace.
Другой доступный пакет Debian называется netcat-openbsd
, который в настоящее время является форком оригинального netcat разработчиками OpenBSD. Вы должны обнаружить, что он работает, если вы установите этот пакет (и затем вы сможете удалить netcat-Traditional
).
Существует еще один пакет netcat, который используется системами на основе Red Hat, разработан и поддерживается Федора из nmap и insecure.org и других разработчиков. Он полностью переписан с нуля и не использует традиционный код netcat или BSD netcat. Тоже исправно работает. Имя его пакета (в системах Red Hat) - nmap-ncat
.
В пакетах Debian 2 netcat и переходном пакете , который будет ссылаться на netcat-Traditional
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)