RAW-socket

UrbanBrain

Новичок
RAW-socket

Здравствуйте
для написания сетевой утилиты на PHP мне необходим доступ к RAW сокетам
я понимаю чтобы создать RAW сокет нужно иметь права администратора (в линукс покрайней мере) в программах на Си все это решалось s битом
а как поступить в PHP? создаю сокет

PHP:
        $sraw = @socket_create(AF_INET, SOCK_RAW, getprotobyname('icmp'));
	if (!$sraw) {echo "socket_create() failed: reason: " . socket_strerror(socket_last_error());}
получаю в результате ошибку
Operation not permitted

заранее спасибо
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Как скрипт запускается - через вызов URL из браузера?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Re: RAW-socket

Автор оригинала: UrbanBrain
я понимаю чтобы создать RAW сокет нужно иметь права администратора
...
получаю в результате ошибку
Operation not permitted
...
скрипт запускается из браузера
PHP исполняется "под пользователем", под которым исполняется процесс веб-сервера.
Обычно nobody или apache.

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

Вряд-ли найдутся люди, желающие пол-часа писать объяснение, как решить Вашу задачу.
 

phprus

Moderator
Команда форума
grigori
очень желательно изучить основы unix и настройки служб, которые Вы используете.
UrbanBrain это скорее всего знает. На это указывает следующая его фраза:
в программах на Си все это решалось s битом
Он вообще то спрашивает как поступить в такой ситуации?

UrbanBrain
Может написать этот скрипт как cgi (не php как cgi запускать, а сам скрипт как cgi. Ну то есть в самом начале путь к интерпретатору прописать и права на выполнения ему поставить). Если мне не изменяет память, то такому скрипту можно поставить s бит (его надо устанавливать на файл со скриптом)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Ок, для понимающих.
Я в таких ситуациях вешаю демона, который делает то, что надо под рутом, и обращаюсь нему из веб-скриптов - например, через unix socket.
Демона можно и на PHP написать - я придумал как бороться с отсутствием уборки мусора.
Только надо CLI скомпилить с поддержкой --enable-pcntl и придумать алгоритм управления очередью обращений.
 

ys

отодвинутый новичок
Автор оригинала: UrbanBrain
хм)
утилита не просто пинг)
Да ну?
И что оно шлет там такое по icmp?
source quench? или icmp redirect?
Короче я сомневаюсь, тем более, что (обычно) не роутерах из icmp оставляют очень малое число доступных типов icmp пакетов.
Но у вас не понятна задача. Зачем Вам понадобился raw socket (icmp) в web приложении?
 

UrbanBrain

Новичок
Зачем Вам понадобился raw socket (icmp) в web приложении?
я в самом начале сказал что для сетевой утилиты)

-~{}~ 20.03.07 22:01:

Автор оригинала: grigori
Ок, для понимающих.
Я в таких ситуациях вешаю демона, который делает то, что надо под рутом, и обращаюсь нему из веб-скриптов - например, через unix socket.
Демона можно и на PHP написать - я придумал как бороться с отсутствием уборки мусора.
Только надо CLI скомпилить с поддержкой --enable-pcntl и придумать алгоритм управления очередью обращений.
вариант интересный, но у утилиты должна быть быстрая и легкая переносимость. Так что этот вариант скорее отпадает.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Тогда прийдется признать факт, что PHP в стандартной конфигурации не ориентирован на написание утилит подобного рода. Без специальной компиляции PHP (в виде CGI и выставления S-бита, или CLI с поддержкой pcntl) задача на PHP не решается.
 

hermit_refined

Отшельник
реализуйте работу с icmp на C, скомпилируйте, выставьте setuid и вызывайте из скрипта через system.
это не единственный, но наиболее безопасный способ (если, конечно, на C писать вы умеете).
 
Сверху