Netstat não funciona no FreeBSD pela função php exec ()

1

No meu php-app eu preciso da lista de todos os ip conectados na porta 80. eu escolhi assim:

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

Mas isso não funciona no meu servidor VPS FreeBSD. Quando eu começo netstat -an notice aparece e não há conexões na saída:

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

Eu tentei adicionar device mem ao conf, mas eu tenho vazio / usr / src / sys. Cheguei ao ponto em que preciso reconstruir o núcleo.))

netstat funciona corretamente quando o usuário é root (do console).

Eu não tenho problema com isso na plataforma de hospedagem do CentOS.

Alguém pode me ajudar? Ou talvez exista outra maneira de resolver essa tarefa

    
por Andrei Zhamoida 28.04.2013 / 15:03

2 respostas

0

Você tem o safe_mode ativado no php.ini?

Note: When safe mode is enabled, you can only execute files within the safe_mode_exec_dir. For practical reasons, it is currently not allowed to have .. components in the path to the executable.

Recomendamos que você comece a pesquisar o link para obter mais informações sobre isso. Isso provavelmente tem a ver com sandboxing , chroot , jails ou outros conceitos similares. Note que nas cadeias nem todos os nós em / dev / estão disponíveis.

    
por 17.06.2013 / 11:53
0

No FreeBSD usa as funções da biblioteca kvm para ler os dados do kernel em execução. Isso requer acesso ao dispositivo /dev/mem .

Como você pode executar netstat normalmente como root, mas não do PHP, eu suspeito que o PHP seja executado em uma cadeia . O dispositivo /dev/mem geralmente não é visível em uma cadeia.

Se o PHP está realmente rodando em uma cadeia, e você realmente quer expor /dev/mem nessa cadeia, você deve editar /etc/devfs.rules e criar um novo conjunto de regras que adicione /dev/mem , como este:

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

Certifique-se de não usar um número de regras < 5 ou um que já esteja definido.

Ao iniciar a cadeia, você deve definir o parâmetro devfs_ruleset para o número do conjunto de regras que você criou, neste caso, 6.

    
por 02.09.2013 / 23:18