山がMagomedに行かない場合...湾曲したアームプロバイダーとアクティブなADSL接続を維持する方法

プロバイダーとのネゴシエーションによって接続が失われることがあり、ADSLモデムはこの事実に気付かず、何もしませんでした。 私は他の方法を探さなければなりませんでした。



タスク :PPPoEセッションの再インストールを強制するために、接続が失われたときにADSLモデムをプログラムで再起動します。



以下のソリューションは、DリンクDSL 2640U ADSLモデムでテストされていますが、他のADSLモデムモデルに簡単に適応できると思います。







そのため、ソリューションは、プロバイダーのpingサイトの接続を5分ごとにチェックするphpスクリプトです。

pingがない場合は、ADSLモデムにリブートコマンドを送信します。



Windows XPを使用している場合、5分ごとにスクリプトを実行することは非常に問題です。 したがって、System Shedulerとして、無料のSplinterware System Schedulerが使用されました。



簡単にするために、 denwerがコンピューターにインストールされ、すべてのファイルがZにあると仮定します。\ home \ inet-keeper \ www \



解決策:

上記のディレクトリには、



1)System Schedulerから5分ごとに実行されるinet-keeper.batファイル

inet-keeper.batファイルは、同じ名前のphpスクリプトを起動します。

z:\usr\bin\php -n -f inet-keeper.php >> inet-keeper.log









2)inet-keeper.phpファイル

inet-keeper.phpファイルの内容:

<?php

set_time_limit(60*5);



$res = exec("ping google.com -n 10", $output, $var);

$output = date('r');

$output .= " ## Ping result: $var"; // 0- 1-Error

$output .= " ## $res";

if ($var || substr_count($res, '= 0ms') == 3) // In case like Minimum = 0ms, Maximum = 0ms, Average = 0ms

{

$error = true;

$output .= " ## Error detected!";

$output .= "\nRebooting modem...\n";

reboot_modem();

}

$output .= "\n";



if ($error) // or true)

echo $output;



function reboot_modem()

{

$log = send_request("getlog");

file_put_contents("logs\\" . date('YM-d_H-i-s') . ".html" ,$log);

send_request("reboot");

}



function send_request($r) {

$login = "admin";

$password = "admin";

$auth = base64_encode($login . ":" . $password);

$fp = fsockopen('192.168.1.1', 80, $errno, $errstr, 60);

if ($fp)

{

switch ($r) {

case "reboot":

$out = "GET /rebootinfo.cgi HTTP/1.0\r\n";

break;

case "getlog":

$out = "GET /logview.cmd HTTP/1.0\r\n";

break;

default:

return;

}

$out .= "Host: 192.168.1.1\r\n";

$out .= "Authorization: Basic $auth\r\n";

$out .= "Connection: Close\r\n\r\n";

//

fwrite($fp, $out);

$html = "";



while (!feof($fp)){

$part=fgets($fp);

$html.=$part;

}

fclose($fp);

}

return $html;

}

?>









プロバイダーのサイト(上記の例ではgoogle.com)がpingを停止すると、スクリプトはモデムを再起動し、 192.168.1.1 / rebootinfo.cgiページを開きます



モデムには認証が必要なため、send_request関数にはユーザー名とパスワードを指定する行があります

$login = "admin";

$password = "admin";








モデムがリロードされると、

1)inet-keeper.logファイルにそれについて書きます

2)logサブディレクトリ、モデムのシステムログページの内容(私の場合、ページ192.168.1.1/logview.cmdの内容)



All Articles