【问题标题】:PHP and RAW SOCKETS on linuxLinux 上的 PHP 和 RAW SOCKETS
【发布时间】:2013-11-15 04:55:31
【问题描述】:

做一个就够了

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 !';
        }

【问题讨论】:

  • 首先,您需要确保您的 PHP 已经使用套接字编译 php.net/manual/en/sockets.installation.php 如果已经编译好了,那就太好了。你得到什么错误?确保打开错误报告:display_errors('On'); ini_set('error_reporting', 'E_ALL');然后重新运行脚本。你能用你得到的错误更新你的问题吗?
  • Warning: socket_create(): Unable to create socket [1]: Operation not permitted in
  • 你的 php.ini 中是否禁用了某个功能,是否也关闭了安全模式?
  • 没有禁用任何功能(我正在使用 socket_create 进行 tcp 连接,这很好)。安全模式已关闭

标签: php apache raw-sockets


【解决方案1】:

您是否尝试过: sudo setcap cap_net_raw=eip $(which httpd)?

你遇到了什么错误?

【讨论】:

  • root@exclulist:/usr/sbin# sudo setcap cap_net_raw=eip $(which httpd) usage: setcap [-q] [-v] (-r|-|<caps>) <filename> [ ... (-r|-|<capsN>) <filenameN> ] Note <filename> must be a regular (non-symlink) file. root@exclulist:/usr/sbin# sudo setcap cap_net_raw=eip $(which apache2) Failed to set capabilities on file '/usr/sbin/apache2' (Invalid argument) The value of the capability argument is not permitted for a file. Or the file is not a regular (non-symlink) file
  • setcap cap_net_bind_service=+ep /usr/sbin/httpd 你又想做什么?
  • 我正在尝试在 PHP 中制作一个 ping 脚本并通过 apache(浏览器)调用它,上面问题中的代码
  • 而且你不能使用 fsock_open()?
  • 据我所知 fsock_open 不支持为 ping 创建原始 ICMP 数据包所需的原始套接字(我不想连接到 HTTP 或任何其他服务)
【解决方案2】:

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

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

【讨论】:

  • 它给了我apache2handler 找不到它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 1970-01-01
  • 2012-05-20
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多