Почему следующее не работает?
У меня недавно установлена система 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
output, и я не видел попытки привязки при запуске под 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-традиционный
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-традиционный это старое программное обеспечение, и некоторые простые ошибки не исправлены (в вашем примере отсутствует параметр -p ПОРТ для прослушивания .
Вы можете предпочесть netcat-openbsd , и он будет работать так, как вы ожидали.
root@debian9:/# lsof -p $( pidof nc ) | grep LISTEN
nc 2140 root 3u IPv4 29855 0t0 TCP *:11115 (LISTEN)