⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 index.php

📁 辅助radius软件的管理程序web平台下的程序代码自己还没有测试过
💻 PHP
字号:
<?php
	define ("DatetimeZeroValue","0000-00-00 00:00:00");
	define ("DBRadius","radius");
	define ("DBmis","nmis");
	$time_out=180;
/*
	$fp_time=fopen("time.txt","r+");
	$curr_time=time();
	if(!$fp_time)
	{
		$fp_time=fopen("time.txt","w+") or Die("file error");
		fputs($fp_time,$curr_time) or Die("file error");
	}
	$last_time=fgets($fp_time);
//*/
  $link = mysql_connect("localhost","root","") or die("radius Could not connect");
  print "Connected successfully\n";
  //mysql_select_db(DBRadius,$link_radius) or die("Could not select database");

  /* 执行 SQL 查询 */
  $query=sprintf("SELECT RadAcctId,UserName,NASIPAddress,NASPortId,
	AcctStartTime,AcctStopTime,AcctSessionTime,AcctInputOctets,
	AcctOutputOctets,AcctTerminateCause FROM %s.radacct",DBRadius);
  $result = mysql_query($query) or die("Query failed");
	$count=mysql_num_rows($result);
	echo "$count\n";

  /* 在 HTML 中打印结果 */
	/*
    print "<table>\n";
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
        print "\t<tr>\n";
        foreach ($line as $col_value) {
            print "\t\t<td>$col_value</td>\n";
        }
        print "\t</tr>\n";
    }
    print "</table>\n";
	*/

	$query=sprintf("CREATE TABLE %s.use_record (
		AutoId BIGINT(21) NOT NULL AUTO_INCREMENT PRIMARY KEY,
		user_serialno BIGINT(21) NOT NULL,
		UserName VARCHAR(64) NOT NULL,
		NASIPAddress VARCHAR(15) NOT NULL,
		NASPortId INT(12) NULL DEFAULT NULL,
		AcctStartTime DATETIME NOT NULL,
		AcctStopTime DATETIME NOT NULL,
		AcctSessionTime INT(12) DEFAULT 0,
		AcctInputOctets INT(12) NULL DEFAULT NULL,
		AcctOutputOctets INT(12) NULL DEFAULT NULL,
		LastStartTime INT(12) NOT NULL DEFAULT 0,
		admin_address VARCHAR(60) NOT NULL)",DBmis);
	mysql_query($query);
	while ($line=mysql_fetch_array($result,MYSQL_ASSOC))
	{
		var_dump($line);
		$query=sprintf("SELECT * FROM %s.use_record WHERE NASIPAddress=\"%s\" and
			NASPortId=%s and ((AcctStartTime<=\"%s\" and AcctStopTime>=\"%s\") or
			(AcctStartTime<=\"%s\" and AcctStopTime>=\"%s\")) LIMIT 1",
			DBmis,$line[NASIPAddress],$line[NASPortId],$line[AcctStartTime],
			$line[AcctStartTime],$line[AcctStopTime],$line[AcctStopTime]);
		var_dump($query);
		$rec=mysql_query($query) or Die("selete use_record failed");
		$rec=mysql_fetch_array($rec,MYSQL_ASSOC);
		if($rec)
		{
			echo "already operated,skip\n";
			continue;
		}
		$query=sprintf("SELECT * FROM %s.use_record WHERE NASIPAddress=\"%s\" and
			NASPortId=%s and AcctStopTime=\"%s\" ORDER BY user_serialno DESC LIMIT 1",
			DBmis,$line[NASIPAddress],$line[NASPortId],DatetimeZeroValue);
		//echo $query."\n";
		$rec=mysql_query($query) or Die("selete use_record failed");
		$rec=mysql_fetch_array($rec,MYSQL_ASSOC);
		//var_dump($rec);
		if($rec)
		{
			$bNext=false;
			if($line[AcctStartTime]!=DatetimeZeroValue || $line[AcctStopTime]!=DatetimeZeroValue)
			{
				if($line[AcctStartTime]!=DatetimeZeroValue)
					$tmp=strtotime($line[AcctStartTime]);
				else
					$tmp=strtotime($line[AcctStopTime]);
				if($rec[LastStartTime] && $tmp-$rec[LastStartTime]>$time_out)
				{
					$line[AcctStopTime]=date("Y-m-d H:i:s",$rec[LastStartTime]);
					$line[AcctInputOctets]=$line[AcctOutputOctets]="NULL";
					$SessionTime=$rec[LastStartTime]-strtotime($rec[AcctStartTime]);
					if($tmp!=strtotime($line[AcctStartTime]))
						$bNext=true;
				}
				else
				{
					if($tmp>$rec[LastStartTime])
					{
						$query=sprintf("UPDATE %s.use_record SET LastStartTime=%d WHERE AutoId=%s",
							DBmis,$tmp,$rec[AutoId]);
						mysql_query($query) or Die("update use_record set LastStartTime failed");
					}
					$OldAcctStartTime=$line[AcctStartTime];
					$tmp=$OldAcctStartTime>$line[AcctStopTime]?$OldAcctStartTime:$line[AcctStopTime];
					$SessionTime=strtotime($tmp)-strtotime($rec[AcctStartTime]);
				}
			}
			if($SessionTime>$rec[AcctSessionTime])
			{
				echo $rec[AutoId]." ".$SessionTime."\n";
				$query=sprintf("UPDATE %s.use_record SET AcctSessionTime=%d WHERE AutoId=%s",
					DBmis,$SessionTime,$rec[AutoId]);
				//echo $query."\n";
				mysql_query($query) or Die("update use_record set AcctSessionTime failed");
			}
			if($line[AcctStopTime]!=DatetimeZeroValue)
			{
				$query=sprintf("UPDATE %s.use_record SET AcctStopTime=\"%s\",
					AcctInputOctets=%s,AcctOutputOctets=%s WHERE AutoId=%s",DBmis,
					$line[AcctStopTime],$line[AcctInputOctets],$line[AcctOutputOctets],$rec[AutoId]);
				var_dump($query);
				echo "bNext:";
				var_dump($bNext);
				mysql_query($query) or Die("update use_record set AcctStopTime failed");
				if($bNext)
					continue;
				else
					$rec=NULL;
			}
		}
		if(!$rec)
		{
			if($line[AcctStartTime]==DatetimeZeroValue)
				continue;
//*rem for debug
			$query=sprintf("SELECT user_serialno,admin_address FROM %s.user LIMIT 2",DBmis);
			$rec = mysql_query($query) or Die("select user failed");
			$count=mysql_num_rows($rec);
			if(1!=$count)
				Die(sprintf("user error:none or multi:%d",$count));
			$user_serialno=mysql_fetch_array($rec,MYSQL_ASSOC);
			$user_admin_address=$user_serialno[admin_address];
			$user_serialno=$user_serialno[user_serialno];
//*/
			$query=sprintf("INSERT %s.use_record (user_serialno,UserName,NASIPAddress,NASPortId,
				AcctStartTime,LastStartTime,admin_address) VALUES (\"%s\",\"%s\",\"%s\",%s,\"%s\",%d,\"%s\")",DBmis,
				$user_serialno,$line[UserName],$line[NASIPAddress],$line[NASPortId],
				$line[AcctStartTime],strtotime($line[AcctStartTime]),$user_admin_address);
			//echo $query."\n";
			mysql_query($query) or Die("insert use_record failed");
			$query=sprintf("SELECT * FROM %s.use_record ORDER BY AutoId DESC LIMIT 1",DBmis);
			$rec=mysql_query($query) or Die("select use_record failed");
			$rec=mysql_fetch_array($rec,MYSQL_ASSOC);
			//var_dump($rec);
		}
		if($line[AcctStartTime]<$rec[AcctStartTime] && $line[AcctStartTime]!=DatetimeZeroValue)
		{
			$query=sprintf("UPDATE %s.use_record SET AcctStartTime=\"%s\" WHERE AutoId=%s",
				DBmis,$line[AcctStartTime],$rec[AutoId]);
			mysql_query($query) or Die("update use_record set AcctStartTime failed");
		}
	}
	//处理DBmis.use_record没有结束时间,但是已经超时的条目。
	$query=sprintf("SELECT * FROM %s.use_record WHERE AcctStopTime=\"%s\" and
		LastStartTime+%d<%d",DBmis,DatetimeZeroValue,$time_out,time());
	//var_dump($query);
	$result=mysql_query($query) or Die("selete use_record failed");
	while ($line=mysql_fetch_array($result,MYSQL_ASSOC))
	{
		$line[AcctStopTime]=date("Y-m-d H:i:s",$line[LastStartTime]);
		$query=sprintf("UPDATE %s.use_record SET AcctStopTime=\"%s\" WHERE AutoId=%s",
			DBmis,$line[AcctStopTime],$line[AutoId]);
		var_dump($query);
		mysql_query($query) or Die("update use_record set AcctStopTime failed");
	}

	$curr_time=time();
//从Radius删除过期用户
	$query=sprintf("SELECT * FROM %s.user WHERE (status=\"ok\" and UNIX_TIMESTAMP(valid_date)<%d)",DBmis,$curr_time);
  $result = mysql_query($query) or die("SELECT * FROM user failed");
	while ($line=mysql_fetch_array($result,MYSQL_ASSOC))
	{
		$query=sprintf("DELETE FROM %s.radcheck WHERE	UserName=\"%s\"",DBRadius,$line[username]);
		mysql_query($query) or Die("DELETE FROM radcheck failed");
		$query=sprintf("UPDATE %s.user SET status=\"st\" where user_serialno=%d",DBmis,$line[user_serialno]);
		mysql_query($query) or Die("UPDATE user failed");
	}
//恢复已过暂停期用户
	$query=sprintf("SELECT * FROM %s.user WHERE (status=\"pa\" and UNIX_TIMESTAMP(pausend_date)<%d)",DBmis,$curr_time);
  $result = mysql_query($query) or die("SELECT * FROM user failed");
	while ($line=mysql_fetch_array($result,MYSQL_ASSOC))
	{
		$query=sprintf("SELECT * FROM %s.radcheck WHERE UserName=\"%s\" LIMIT 2",DBRadius,$line[username]);
		$rec = mysql_query($query) or Die("select radcheck failed");
		$count=mysql_num_rows($rec);
		if(1<$count)
			Die("more than one same user in radius");
		else
		{
			if(0==$count)
			{
				$query=sprintf("INSERT %s.radcheck (UserName,Attribute,op,Value) VALUES(\"%s\",\"%s\",\"%s\",\"%s\")",
					DBRadius,$line[username],"Password",":=",$line[password]);
				mysql_query($query) or Die("INSERT radcheck failed");
			}
			else
			{
				if($rec[Attribute]!="Password"||$rec[op]!=":="||$rec[Value]!=$line[password])
					Die("user already existing and conflict");
			}
		}
		$query=sprintf("UPDATE %s.user SET status=\"ok\",pausend_date=\"%s\" where user_serialno=%d",
			DBmis,DatetimeZeroValue,$line[user_serialno]);
		mysql_query($query) or Die("UPDATE user failed");
	}

  /* 释放资源 */
  mysql_free_result($result);

/*rem for debug
	$query=sprintf("DELETE FROM %s.radacct",DBRadius);
	var_dump($query);
	mysql_query($query) or Die("delete radacct failed");
//*/

  /* 断开连接 */
  mysql_close($link);
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -