Page : | [ 1 ] | [ 2 ] | [ 3 ] | [ 4 ] |
Here is the PHP script that does the work:
NOTE: I hardcoded the IPv4 address of the server into this file for the sake of simplicity. (example IP 157.202.243.181)
I'm also simply rewriting the /etc/ppp/peers/piavpn and the /etc/ppp/chap-secrets files with the relevant data passed in via the querystring. I'm sure there's a more elegant way to do this but it gets the job done! :)
<?php
function changeVpn($vpn, $originalip){
$ctx = stream_context_create(array('http'=>
array(
'timeout' => 5, // 1 200 Seconds = 20 Minutes
)
));
exec("/usr/bin/sudo /usr/bin/poff piavpn");
sleep(2);
exec("/usr/bin/sudo /etc/clean.sh");
sleep(2);
$str = "pty \"pptp " . $vpn['ip'] . " --nolaunchpppd\"\nlock\nnoauth\nnobsdcomp\nnodeflate\nname " . $vpn['user'] . "\nremotename piavpn\nipparam piavpn\nrequire-mppe-128\nusepeerdns\ndefaultroute\npersist";
file_put_contents('/etc/ppp/peers/piavpn', $str);
$str = "" . $vpn['user'] . "\tpiavpn\t\"" . $vpn['pass'] . "\"\t*";
file_put_contents('/etc/ppp/chap-secrets', $str);
$dd = exec("/usr/bin/sudo /usr/bin/pon piavpn");
$currentip = $originalip;
$counter = 0;
while (($currentip == $originalip) || (!strlen($currentip))){
if ($counter){
sleep(3);
}
$dat = @file_get_contents("http://ipecho.net/plain",false, $ctx);
if (!(filter_var($dat, FILTER_VALIDATE_IP))) {
$currentip = "";
} else {
$currentip = $dat;
}
$counter++;
if ($counter > 5){
return false;
}
}
return true;
}
$act = isset($_REQUEST['act']) ? $_REQUEST['act'] : '';
$data = array();
$data['status'] = 'fail';
if ($act == 'changeip'){
$ip = isset($_REQUEST['ip']) ? $_REQUEST['ip'] : '';
$user = isset($_REQUEST['user']) ? $_REQUEST['user'] : '';
$pass = isset($_REQUEST['pass']) ? $_REQUEST['pass'] : '';
if ($ip == 'off'){
$ret = shell_exec('/sbin/ifconfig | /bin/grep ppp0');
$data['prior'] = $ret;
exec("/usr/bin/sudo /usr/bin/poff piavpn");
sleep(2);
exec("/usr/bin/sudo /etc/clean.sh");
sleep(1);
$ret = shell_exec('/sbin/ifconfig | /bin/grep ppp0');
$data['after'] = $ret;
if (!strlen($ret)){
$data['status'] = 'success';
}
header('Content-Type: application/json');
echo json_encode($data);
die();
}
// hardcoding this. the IP of the server this is on
$originalip = '157.202.243.181';
$vpn = array();
$vpn['ip'] = $ip;
$vpn['user'] = $user;
$vpn['pass'] = $pass;
$data['status'] = 'success';
$ok = changeVpn($vpn, $originalip);
if ($ok){
$data['result'] = 'changed';
} else {
$data['result'] = 'notchanged';
exec("/usr/bin/sudo /usr/bin/poff piavpn");
sleep(2);
exec("/usr/bin/sudo /etc/clean.sh");
}
}
header('Content-Type: application/json');
echo json_encode($data);
die();
?>
Example:
Again this is the username and password supplied by PIA for making a PPTP connection
http://yourserver/script.php?user=PIA_USER&pass=PIA_PASS&ip=71.202.44.12&act=changeip
http://yourserver/script.php?ip=off&act=changeip
(Page 4 of 4) | ||