PHP и RAW SOCKETS в Linux

Достаточно ли сделать

sudo setcap cap_net_raw=eip /usr/bin/php5

чтобы иметь возможность использовать RAW SOCKETS в PHP (не CLI) в Linux?

Если да, то он не работает (но начал работать в CLI, но не с использованием Apache)

Так что я думаю, что я должен дать эти разрешения и Apache, но я не мог понять, как это сделать.

Вы можете помочь мне?

ошибки из скрипта PHP: Warning: socket_create(): Unable to create socket [1]: Operation not permitted in

PHP-скрипт:

$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
        $socket = socket_create(AF_INET, SOCK_RAW, 1);
        if ($socket !== false) {
            socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => 10, 'usec' => 0));
            echo 'Creating PING Socket !';

            socket_connect($socket, gethostbyname('noczone.com'), null);
            socket_send($socket, $package, strLen($package), 0);
            if (socket_read($socket, 255)) {
                $result = microtime(true) - $ts;
            } else {
                echo 'Error Code : No PING';
            }
            socket_close($socket);
        } else {
            echo 'Failed Creating PING Socket !';
        }

person Rami Dabain    schedule 22.05.2013    source источник
comment
Прежде всего, вам нужно убедиться, что ваш PHP был скомпилирован с сокетами php. net/manual/en/sockets.installation.php Если да, то отлично. Какие ошибки вы получаете? Убедитесь, что отчеты об ошибках включены: display_errors('On'); ini_set('error_reporting', 'E_ALL'); а затем перезапустите скрипт. Не могли бы вы обновить свой вопрос с ошибками, которые вы получаете?   -  person DarkMantis    schedule 07.11.2013
comment
У вас есть отключенные функции в вашем php.ini, а также отключен ли safe_mode?   -  person DarkMantis    schedule 15.11.2013
comment
никакие функции не отключены (я использую socket_create для tcp-соединения, и все в порядке). безопасный_режим выключен   -  person Rami Dabain    schedule 19.11.2013


Ответы (2)


Вы пробовали: sudo setcap cap_net_raw=eip $(which httpd) ?

Какую ошибку вы получаете?

person David Sarmiento    schedule 11.11.2013
comment
setcap cap_net_bind_service=+ep /usr/sbin/httpd Что вы снова пытаетесь сделать? - person David Sarmiento; 15.11.2013
comment
я пытаюсь сделать ping-скрипт на PHP и вызвать его через apache (браузер), код в вопросе выше - person Rami Dabain; 19.11.2013
comment
И вы не можете использовать fsock_open()? - person David Sarmiento; 19.11.2013
comment
насколько я знаю, fsock_open не поддерживает необработанные сокеты, которые необходимы для создания необработанного пакета ICMP для ping (я не хочу подключаться к HTTP или любой другой службе) - person Rami Dabain; 19.11.2013
comment
Чувак... тебе ДЕЙСТВИТЕЛЬНО нужен UTFG. Из руководства по php (php.net/manual/en/function.socket-create .php) Обеспечивает доступ к необработанному сетевому протоколу. Этот специальный тип сокета можно использовать для ручного создания любого типа протокола. Обычно этот тип сокета используется для выполнения запросов ICMP (например, ping). - person David Sarmiento; 19.11.2013
comment
спасибо :) именно ПОЧЕМУ я на самом деле использую эту функцию. если вы читаете дальше на той же странице, в ОС LINUX использование необработанных сокетов и привязка к портам ниже (1024?) ограничены пользователем ROOT (он же администратор), поэтому либо дать apache и пользователю модуля php (обычно www-data) полный root-доступ (КОТОРЫЙ ЯВЛЯЕТСЯ ОЧЕНЬ ПЛОХОЙ ПРАКТИКОЙ БЕЗОПАСНОСТИ, если вы можете назвать это практикой) или предоставить двоичным файлам apache + php разрешение для RAW_SOCK через первую строку в моем вопросе - person Rami Dabain; 20.11.2013
comment
Кстати, ваше решение логично (что httpd), но проблема в том, что setcap для apache по какой-то причине не работает (да, я пытался перезапустить apache после его настройки). хотя в CLI это работает как шарм! - person Rami Dabain; 20.11.2013

Скорее всего интерпретатор PHP реализован как модуль в Apache (это можно увидеть из php_sapi_name() или константы PHP_SAPI в PHP, или из файла httpd ini).

В этом случае вам нужно предоставить исполняемому файлу httpd возможность.

person symcbean    schedule 07.11.2013
comment
это дало мне apache2handler не могу найти - person Rami Dabain; 15.11.2013