Назад | Перейти на главную страницу

Netcat «В соединении отказано» на локальном хосте

Я пытаюсь получить ценность от netcat соединение началось с файла php, но умирает с:

localhost [127.0.0.1] 2000 (?) : Connection refused

Я не знаю почему, но он работает хорошо, если я использую ssh как пользователь apache (www-data). Вот что я сделал:

  1. Начните бесконечный цикл обслуживания свидания с небольшой задержкой:

    $ (while true; do nc -l -p 2000 -c "sleep 5; date"; done)&
    
  2. Проверьте, работает ли:

    $ su www-data
    $ nc localhost 2000
    Fri Oct 16 21:33:20 COT 2009
    
  3. Создайте /var/www/test.php следующим образом:

    <?php
    exec('nc localhost 2000>>/var/www/dates.txt 2>>/var/www/errors.txt &');
    ?>
    
  4. Запустите его в браузере:

    http://myserver.com/test.php
    
  5. Наконец, взгляните на оба txt, даты пустые (ничего похожего на ответ в № 2), а ошибки содержат ошибку «Соединение отклонено».

Сервер представляет собой кластер LAMP под управлением Ubuntu Server 9.04 с DRBD и Heartbeat.

Что сводит меня с ума, так это то, что этот test.php хорошо работает на моем ноутбуке (LAMP на Ubuntu Desktop 9.04), и на сервере, похоже, порты уже открыты и слушают:

$ netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:4743            0.0.0.0:*               LISTEN      2326/openhpid   
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      3364/mysqld     
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      9510/nc         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3470/apache2    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2320/sshd       
tcp        0      0 127.0.0.1:3551          0.0.0.0:*               LISTEN      2354/apcupsd    
tcp6       0      0 :::22                   :::*                    LISTEN      2320/sshd

Вот что я действительно хочу заархивировать: диаграмма (у меня пока нет достаточного количества точек для вставки изображений, лол)

Итак, на клиентском компьютере постоянно работают два прослушивающих netcat соединения, одно для получения веса, а другое для печати необработанного текста.

Ну, в конце концов, это была проблема с разрешением ... исправлено редактирование / etc / sudoers с помощью visudo, чтобы добавить:

www-data ALL = NOPASSWD: /bin/nc

Для этой команды нужен пробел между номером порта и перенаправлением.

nc localhost 2000 >>/var/www/dates.txt 2>>/var/www/errors.txt

Между прочим, обязательно найдется более эффективный и безопасный способ достичь того направления, в котором вы идете.

Убедитесь, что локальный интерфейс включен.

ip link

должен вам сказать. Возможно, что локальный интерфейс не работает, что маловероятно, но возможно.

Вы хотите увидеть что-то вроде:

1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

Также обратите внимание на ip route. Посмотрите, не происходит ли там что-нибудь абсолютно безумное.