1

В моем php-приложении мне нужен список всех ip подключенных на 80 порт. я выбрал этот путь:

<?php
     $ips = exec("netstat -an |grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c", $info);
?>

Но это не работает на моем сервере VPS FreeBSD. Когда я запускаю netstat -an появляется уведомление, и нет никаких соединений на выходе:

netstat: kvm not available: /dev/mem: No such file or directory

Я попытался добавить device mem conf в conf, но у меня пусто /usr /src /sys. Я дошел до того, что мне нужно пересобрать ядро.))

netstat работает правильно, когда пользователь является пользователем root(из консоли).

У меня нет такой проблемы на хостинговой платформе CentOS.

Кто-нибудь может мне помочь? Или, возможно, существует другой способ решения этой задачи

2 ответа2

0

Вы включили safe_mode в php.ini?

Примечание. Когда включен безопасный режим, вы можете запускать файлы только в пределах safe_mode_exec_dir. По практическим причинам в настоящее время запрещено иметь .. компоненты на пути к исполняемому файлу.

Я рекомендую вам начать копаться в http://php.net/ для получения дополнительной информации об этом. Это наиболее вероятно связано с песочницей, chroot, тюрьмами или другими подобными понятиями. Обратите внимание, что в тюрьмах не все узлы в /dev/ доступны.

0

Во FreeBSD использует функции из библиотеки kvm для чтения данных из работающего ядра. Для этого требуется доступ к устройству /dev/mem .

Поскольку вы можете запускать netstat как пользователь root, но не из PHP, я подозреваю, что PHP работает в тюрьме. Устройство /dev/mem обычно не видно в тюрьме.

Если PHP действительно работает в тюрьме, и вы действительно хотите выставить /dev/mem в этой тюрьме, вы должны отредактировать /etc/devfs.rules и создать новый набор правил, добавляющий /dev/mem , например:

[devfsrules_xtrajail=6]
add include $devfsrules_hide_all
add include $devfsrules_unhide_basic
add include $devfsrules_unhide_login
add path 'mem' unhide

Убедитесь, что вы не используете номер набора правил <5 или тот, который уже определен.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .