Простой клиент / server with 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 --- без разницы.

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

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

2
задан 31 March 2019 в 04:28
2 ответа

На самом деле существует три (или более?) Отдельных программы под названием 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 .

3
ответ дан 3 December 2019 в 09:31

В пакетах 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)
2
ответ дан 3 December 2019 в 09:31

Теги

Похожие вопросы