Radius 測試 – radtest.php (每半小時執行一次)

既然都可以從資料庫取得測試資料了
那位什麼不把測試結果丟回去呢?
所以就有了這一支


php
  header("Content-Type:text/html; charset=utf-8");
  $link = mysql_pconnect("資料庫", "帳號", "密碼") or die("無法與MySQL建立連線");
  mysql_select_db("資料庫") or die("無法選擇std資料庫");

  $fp=fopen( '/radtest/temp1.log',"w");    #把相關資訊都有各log紀錄

  function radtest($un, $pw, $hn, $po, $sr){     #進行radtest測試
    return exec('radtest '.trim($un).' ''.trim($pw).'' '.trim($hn).':'.trim($po).' 0 '.trim($sr).'|grep Accept|grep -c Accept');
  }

  function insertintodb($name, $status, $note){      #將log記錄新增至資料庫中
    checkdb(strtolower($name));
    $myquery1 = "insert into `wordpress`.`".strtolower($name)."`(status, time, note) values ('".$status."','".date('Y-m-d G:i:s')."','".$note."')";
    $result1 = mysql_query($myquery1) or die("Insert 錯誤");
    return $result1;
  }

  function checkdb($name){       #檢查要新增資料的資料表是否存在,若不存在則新增
    $sql ='SHOW TABLES in wordpress WHERE Tables_in_wordpress = '' . $name . ''';
    $rs = mysql_query($sql);
    if(!mysql_fetch_array($rs)){
      //echo "createdb ".$name."n";
      createdb($name);
      return FALSE;}
    else
      return TRUE;
  }

  function createdb($name){        #新增資料表
    $myquery2 = "CREATE TABLE `wordpress`.`".$name."` (
          `id` int(10) NOT NULL AUTO_INCREMENT,
          `status` int(5) NOT NULL,
          `time` datetime NOT NULL,
          `note` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci";
    $result2 = mysql_query($myquery2) or die("Create ".$name." 錯誤");
  }

  mysql_query('SET NAMES utf8',$link);
  mysql_query('SET CHARACTER_SET_CLIENT=utf8',$link);
  mysql_query('SET CHARACTER_SET_RESULTS=utf8',$link);

  $myquery   = "select nasname, port, secret, schoolname, testaccounting, testpasswd, shortname from 資料表";
  $result = mysql_query($myquery) or die("查詢 Query 錯誤");
  fwrite($fp, "下列單位進行radtest時發生錯誤!!n");
  $count=0;
  while($row = mysql_fetch_array($result))
  {
    //checkdb('LOG_'.$row["shortname"]);
    if(($row["testaccounting"]<>"測試帳號") and ($row["testaccounting"]<>"測試帳號")) # Have Testing username password
    {
      if( radtest($row["testaccounting"], $row["testpasswd"], '10.1.0.7', '1812', $row["secret"])  =='1')
      {
        ########### Test Ok ##########
        insertintodb('LOG_'.$row["shortname"].'_'.$row["nasname"],'1','使用連線單位提供測試帳號密碼測試成功');
      }
      else
      {
        ########## Test Fault #########
        if( radtest( '預設帳號', '預設密碼', $row["nasname"], $row["port"], $row["secret"])  =='1')
        {
          insertintodb('LOG_'.$row["shortname"].'_'.$row["nasname"],'2','連線單位提供測試帳號密碼測試失敗,使用預設帳密測試成功');
        }
        else
        {
          insertintodb('LOG_'.$row["shortname"].'_'.$row["nasname"],'3','連線單位提供及預設測帳號密碼測試皆失敗');
          fwrite($fp, date('Y-m-d G:i:s').' : '.$row["schoolname"].' '.$row["nasname"]."失敗n");
          $count++;
        }
      }
    }
    else
    {
      if( radtest($row["testaccounting"], $row["testpasswd"], $row["nasname"], $row["port"], $row["secret"])  =='1')
      {
        ########### Test Ok ##########
        insertintodb('LOG_'.$row["shortname"].'_'.$row["nasname"],'4','連線單位未提供測試帳號密碼,使用預設帳密測試成功');
      }
      else
      {
        ########## Test Fault #########
        insertintodb('LOG_'.$row["shortname"].'_'.$row["nasname"],'5','連線單位未提供測試帳號密碼,使用預設帳密測試失敗');
        fwrite($fp, date('Y-m-d G:i:s').' : '.$row["schoolname"].' '.$row["nasname"]."失敗n");
        $count++;
      }
    }
  }
  fwrite($fp, "共有".$count."間單位發生錯誤!!n");
  fclose($fp);
This entry was posted in Radius. Bookmark the permalink.