2013-05-22 11 views
5

Czy wystarczy zrobićPHP i gniazd RAW na linux

sudo setcap cap_net_raw=eip /usr/bin/php5 

aby móc używać gniazd RAW w PHP (nie CLI) w Linuksie?

Jeśli tak, to dobrze, że nie działa (ale rozpoczął pracę w CLI, ale nie przy użyciu Apache)

Sądzę więc, że muszę dać te uprawnienia do Apache, jak również, ale nie mogę dowiedzieć się, w jaki sposób .

Czy możesz mi pomóc?

błędy ze skryptu PHP: Warning: socket_create(): Unable to create socket [1]: Operation not permitted in

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

Przede wszystkim musisz upewnić się, że twój PHP został skompilowany z gniazdami http://www.php.net/manual/en/sockets.installation.php Jeśli tak, to świetnie. Jakie błędy dostałeś? Upewnij się, że włączasz raportowanie błędów: display_errors ("On"); ini_set ('error_reporting', 'E_ALL'); a następnie ponownie uruchom skrypt. Czy mógłbyś zaktualizować swoje pytanie za pomocą otrzymanych błędów? – DarkMantis

+0

'Ostrzeżenie: socket_create(): Nie można utworzyć gniazda [1]: Operacja niedozwolona w' –

+0

Czy masz wyłączone funkcje w pliku php.ini, czy też jest wyłączona funkcja safe_mode? – DarkMantis

Odpowiedz

2

Najprawdopodobniej interpreter PHP jest zaimplementowany jako moduł Apache (widać to z php_sapi_name() lub Stała PHP_SAPI w PHP lub z pliku ini httpd.

W takim przypadku należy podać możliwości pliku httpd.

+0

dało mi 'apache2handler' nie może go znaleźć –

3

Wypróbowałeś: sudo setcap cap_net_raw=eip $(which httpd)?

Jaki jest błąd, który otrzymujesz?

+0

' root @ exclulist:/usr/sbin # sudo setcap cap_net_raw = eip $ (który httpd) użycie: setcap [-q] [-v] (- r | - | ) [... (-r | - | ) ] Uwaga musi być zwykłym plikiem (niesą dowiązaniem do pliku). root @ exclulist:/usr/sbin # sudo setcap cap_net_raw = eip $ (co apache2) Nie powiodło się ustawienie możliwości pliku "/ usr/sbin/apache2" (niepoprawny argument) Wartość argumentu zdolności jest niedozwolona dla plik. Lub plik nie jest zwykłym plikiem (niesą dowiązaniem symbolicznym) ' –

+0

setcap cap_net_bind_service = + ep/usr/sbin/httpd Co próbujesz ponownie zrobić? –

+0

Yup próbował tego, nie działa. –

Powiązane problemy