Como usar shell_exec com variável dentro? [RESOLVIDO]

13. Re: Como usar shell_exec com variável dentro? [RESOLVIDO]

thinomar
thinomar

(usa Linux Mint)

Enviado em 08/02/2017 - 12:58h

echo var_dump($_POST); 

Testa isso e manda a saída aqui.


  


14. Re: Como usar shell_exec com variável dentro? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 08/02/2017 - 19:38h

rmenchio escreveu:

É exatamente deste jeito que estou testando, abre uma página com o ip mas não altera o ip.
Talvez uma solução seja usar um shellscript, passando a variável do php pra ele.


Complementando debug do @thinomar:

<?php

echo var_dump($_POST);

$IP = isset($_POST['nome']) ? $_POST['nome'] : null;

if ($IP != null && filter_var($IP, FILTER_VALIDATE_IP))
echo "<pre>" . shell_exec("echo ifconfig wlan0 $IP netmask 255.255.255.0 up") . "</pre>";
else
echo "<p>IP não é válido</p>";


--
Linux Counter: #596371


15. Re: Como usar shell_exec com variável dentro? [RESOLVIDO]

Rodrigo
rmenchio

(usa CentOS)

Enviado em 14/02/2017 - 10:12h

Saída:

array (size=1)
'nome' => string '192.168.1.230' (length=13)
ifconfig wlan0 192.168.1.230 netmask 255.255.255.0 up



16. Re: Como usar shell_exec com variável dentro? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 15/02/2017 - 08:26h

A variável $IP recebe o valor correto, deveria funcionar normalmente.
Adicione o item em negrito logo após o echo, para executar a instrução:
<?php

echo var_dump($_POST);

$IP = isset($_POST['nome']) ? $_POST['nome'] : null;

if ($IP != null && filter_var($IP, FILTER_VALIDATE_IP))
echo "<pre>" . shell_exec("echo ifconfig wlan0 $IP netmask 255.255.255.0 up") . "</pre>";
shell_exec("ifconfig wlan0 $IP netmask 255.255.255.0 up");
else
echo "<p>IP não é válido</p>";

--
Linux Counter: #596371


17. Re: Como usar shell_exec com variável dentro?

Rodrigo
rmenchio

(usa CentOS)

Enviado em 20/02/2017 - 15:34h

Não funcionou.

Pensei em outra estratégia e agora o problema é outro.

Seguinte, modifiquei o arquivo ip.php para:

<?php
$IP = $_POST['nome'];
$fp = fopen("ipnovo.txt", "a");
$escreve = fwrite($fp, "$IP");
fclose($fp);
echo "seu ip escolhido foi $IP";
system('/bin/sh /var/www/html/shell');
?>


Este script lê o ip indicado no site e joga para um arquivo txt, depois chama o seguinte shell.


#!/bin/sh
ipa=$(ifconfig wlan0 | grep 'inet addr:' | awk -F ":" '{print substr($2,1,13)}' )
VAR=$(cat ipnovo.txt)
sudo sed -i "s/$ipa/$VAR/g" /etc/network/interfaces
service networking restart
rm ipnovo.txt


Aqui ele da um grep e awk no ifconfig para extrair somente o ip atual para uma variável, e lê o arquivo ipnovo.txt para extrair a variável do futuro ip.


O problema está neste sed. Se eu testar na mão usando a variável $1 no lugar de $VAR, e chamando o script como , ele funciona sem problemas.
sed -i "s/$ipa/$1/g" /etc/network/interfaces
./shell futuro_ip
Se eu colocar um echo e executar pelo site, ele mostra o comando perfeitamente correto, mas se eu deixo simplesmente do jeito que está, ele não altera o arquivo.
echo "sed -i "s/$ipa/$VAR/g" /etc/network/interfaces"
Alguem tem alguma outra solução?



EDIT: Resolvido, era problema de permissão.







01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts