5

做一个就够了吗

sudo setcap cap_net_raw=eip /usr/bin/php5

能够在 Linux 中的 PHP(不是 CLI)中使用 RAW SOCKETS 吗?

如果是,那么它不工作(但开始在 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 !';
        }
4

2 回答 2

3

你有没有试过: sudo setcap cap_net_raw=eip $(which httpd)

你得到什么错误?

于 2013-11-11T16:28:39.887 回答
2

PHP 解释器很可能是作为 Apache 中的一个模块实现的(您可以从 php_sapi_name() 或 PHP 中的 PHP_SAPI 常量或从 httpd ini 文件中看到这一点)。

在这种情况下,您需要为 httpd 可执行文件提供该功能。

于 2013-11-07T16:22:09.863 回答