<?php
	$acl=$_SESSION["acl"];
	if (strlen($acl)<1 || !strpos($acl,"<05>")) {	//没有权限
		ob_clean();
		header("Location: accesserror.html");
		exit;
	}
?>

<?php
	$gpid=$_REQUEST["gpid"];
	$gpname=$_REQUEST["gpname"];
	$db=mysql_pconnect(get_cfg_var("SIPSERVER"),get_cfg_var("SIPUSER"),get_cfg_var("SIPPWD"));
	mysql_select_db(get_cfg_var("SIPDB"),$db);
	$bHaveAcl=FALSE;
	$bMode="0";
	$bIcmp="n";
	$bUdp="n";
	$bIgmp="n";
	$bCheckPort="n";
	$rs=mysql_query("select mode,icmp,udp,igmp,checkport from useracl1 where userid='gp_".$gpid."'",$db);
	if ($row = mysql_fetch_array($rs)) {
		$bHaveAcl=TRUE;
		$bMode=$row["mode"];
		$bIcmp=$row["icmp"];
		$bUdp=$row["udp"];
		$bIgmp=$row["igmp"];
		$bCheckPort=$row["checkport"];
	}
	mysql_free_result($rs);
?>

<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>组上网范围管理</title>
<script language="javascript">
function setmode(n)
{
	if (n>0) {
		document.form1.ips.disabled=false;
		document.form1.zoomip.disabled=false;
	}
	else {
		document.form1.ips.disabled=true;
		document.form1.zoomip.disabled=true;
	}
}

function setacl(n)
{
	if (n<1) {
		document.all.icmp1.disabled=true;
		document.all.icmp2.disabled=true;
		document.all.udp1.disabled=true;
		document.all.udp2.disabled=true;
		document.all.igmp1.disabled=true;
		document.all.igmp2.disabled=true;
		document.all.mode1.disabled=true;
		document.all.mode2.disabled=true;
		document.all.mode3.disabled=true;
		document.all.port1.disabled=true;
		document.all.port2.disabled=true;
		document.form1.ips.disabled=true;
		document.form1.ports.disabled=true;
		document.form1.zoomip.disabled=true;
	}
	else {
		document.all.icmp1.disabled=false;
		document.all.icmp2.disabled=false;
		document.all.udp1.disabled=false;
		document.all.udp2.disabled=false;
		document.all.igmp1.disabled=false;
		document.all.igmp2.disabled=false;
		document.all.mode1.disabled=false;
		document.all.mode2.disabled=false;
		document.all.mode3.disabled=false;
		document.all.port1.disabled=false;
		document.all.port2.disabled=false;
		document.form1.ips.disabled=false;
		document.form1.ports.disabled=false;
		document.form1.zoomip.disabled=false;
	}
}

function setport(n)
{
	if (n>0) {
		document.form1.ports.disabled=false;
	}
	else {
		document.form1.ports.disabled=true;
	}
}

function myinit()
{
<?php
	$enterstr=chr(13).chr(10);
	if ($bHaveAcl==FALSE) {
		echo("setacl(0);".$enterstr);
		echo("document.all.acl1.checked=true;".$enterstr);
		echo("document.all.mode1.checked=true;".$enterstr);
		echo("document.all.icmp1.checked=true;".$enterstr);
		echo("document.all.udp1.checked=true;".$enterstr);
		echo("document.all.igmp1.checked=true;".$enterstr);
		echo("document.all.port1.checked=true;".$enterstr);
	}
	else {
		echo("document.all.acl2.checked=true;".$enterstr);
		echo("setmode(".$bMode.");".$enterstr);
		if ($bCheckPort=="y") {
			echo("setport(1);".$enterstr);
		}
		else {
			echo("setport(0);".$enterstr);
		}
		if ($bMode=="0") {
			echo("document.all.mode1.checked=true;".$enterstr);
		}
		elseif ($bMode="1") {
			echo("document.all.mode2.checked=true;".$enterstr);
		}
		else {
			echo("document.all.mode3.checked=true;".$enterstr);
		}
		if ($bIcmp=="n") {
			echo("document.all.icmp1.checked=true;".$enterstr);
		}
		else {
			echo("document.all.icmp2.checked=true;".$enterstr);
		}
		if ($bUdp=="n") {
			echo("document.all.udp1.checked=true;".$enterstr);
		}
		else {
			echo("document.all.udp2.checked=true;".$enterstr);
		}
		if ($bIgmp=="n") {
			echo("document.all.igmp1.checked=true;".$enterstr);
		}
		else {
			echo("document.all.igmp2.checked=true;".$enterstr);
		}
		if ($bCheckPort=="n") {
			echo("document.all.port1.checked=true;".$enterstr);
		}
		else {
			echo("document.all.port2.checked=true;".$enterstr);
		}
	}
?>
}

function editsite()
{
	window.open("editsite.php")
}
</script>
</head>

<body background="bkg.bmp" onload="javascript:myinit();">

<p align="center"><font size="5"><b>组上网范围管理</b></font></p>
<hr color="#999966">

<form name="form1" method="post" action="groupacl2.php">
<p align="center">组别“<?php echo $gpname; ?>”的上网范围设置</p>
<div align="center">
  <center>
  <table border="1" width="90%" bordercolor="#008080" cellspacing="0" cellpadding="5" height="460">
    <tr>
      <td width="37%" height="38">是否控制组别的上网范围</td>
      <td width="63%" height="38">&nbsp; <input id="acl1" type="radio" value="n" name="haveacl" onclick="javascript:setacl(0);">否&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                       
        <input id="acl2" type="radio" name="haveacl" value="y" onclick="javascript:setacl(1);">是</td>
    </tr>
    <tr>
      <td width="37%" height="39">是否禁止ICMP包</td>
      <td width="63%" height="39">&nbsp; <input id="icmp1" type="radio" name="icmp" value="n">允许&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                       
        <input id="icmp2" type="radio" name="icmp" value="y">禁止</td>
    </tr>
    <tr>
      <td width="37%" height="39">是否禁止UDP包</td>
      <td width="63%" height="39">&nbsp; <input id="udp1" type="radio" name="udp" value="n">允许&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                       
        <input id="udp2" type="radio" name="udp" value="y">禁止</td>
    </tr>
    <tr>
      <td width="37%" height="39">是否禁止IGMP包</td>
      <td width="63%" height="39">&nbsp; <input id="igmp1" type="radio" name="igmp" value="n">允许&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                       
        <input id="igmp2" type="radio" name="igmp" value="y">禁止</td>
    </tr>
    <tr>
      <td width="37%" height="38">是否检查目标IP地址</td>
      <td width="63%" height="38">&nbsp; <input id="mode1" type="radio" name="mode" value="0" onclick="javascript:setmode(0);">不检查&nbsp;                                       
        <input id="mode2" type="radio" name="mode" value="1" onclick="javascript:setmode(1);">检查拒绝&nbsp; <input id="mode3" type="radio" name="mode" value="2" onclick="javascript:setmode(2);">检查允许</td>                                      
    </tr>
    <tr>
      <td width="37%" height="39">是否检查目标端口</td>
      <td width="63%" height="39">&nbsp; <input id="port1" type="radio" name="checkport" value="n" onclick="javascript:setport(0);">不检查&nbsp;&nbsp;&nbsp;                                       
        <input id="port2" type="radio" name="checkport" value="y" onclick="javascript:setport(1);">检查</td>
    </tr>
    <tr>
      <td width="37%" height="306">检查目标IP地址（或域名）列表</td>
      <td width="63%" height="306">&nbsp;              
      <textarea rows="8" name="ips" cols="20" wrap=off><?php
	if ($bHaveAcl && bMode!="0") {
		$rs=mysql_query("select site,orderid from useracl2 where userid='gp_".$gpid."' order by orderid",$db);
		while ($row = mysql_fetch_array($rs)) {
			echo($row["site"].$enterstr);
		}
		mysql_free_result($rs);
	}
?></textarea>
      &nbsp;<input type="button" value="大窗口显示" name="zoomip" onclick="javascript:editsite();"><br>                       
      (一行一个目标IP地址（或域名）。域名可以设置通配符，例如‘sex’表示包含有'sex'字符串的所有域名网站。)
      </td>
    </tr>
    <tr>
      <td width="37%" height="39">检查目标端口列表</td>
      <td width="63%" height="39">&nbsp;              
      <textarea rows="5" name="ports" cols="10"><?php
	if ($bHaveAcl && $bCheckPort=="y") {
		$rs=mysql_query("select port,orderid from useracl3 where userid='gp_".$gpid."' order by orderid",$db);
		while ($row = mysql_fetch_array($rs)) {
			echo(strval($row["port"]).$enterstr);
		}
		mysql_free_result($rs);
	}
?></textarea><br>                        
      (一行一个目标端口。)
      </td>
    </tr>
    <tr>
      <td width="100%" height="39" colspan="2">
        <p align="center"><input type="submit" value="确认修改" name="B1"></td>
    </tr>
  </table>
  </center>
</div>
<input type=hidden name=gpid value=<?php echo $gpid; ?>>
<input type=hidden name=gpname value=<?php echo $gpname; ?>>
</form>

<?php
	mysql_close($db);
?>

<p>说明：</p>
<p>1、即使选择禁止UDP包，或者检查端口但53端口不在端口列表范围内，53端口的DNS查询UDP包，都被允许通过。即DNS查询包和响应包，不在控制范围里面，自由通行。</p>
<p>2、如果选择检查目标端口，则只检查允许端口。即只有在检查目标端口列表范围内的端口，才能被允许访问和通信；其它端口，不能与之通信。</p>
<p>3、如果选择检查目标IP地址，则存在两种检查方式：检查拒绝、检查允许。检查拒绝方式，指在检查目标IP地址列表中列出的网站，将被拒绝访问，不能与之通信。检查允许方式，指在检查目标IP地址列表范围内的网站，才能访问；没有在列表中列出的其它所有网站，都将被拒绝访问。</p>
<p>&nbsp;&nbsp;&nbsp;   
由于需要禁止访问的网站，数量巨大，不可能一一全部列出。所以，如果需要控制访问的网站范围，推荐采用‘检查允许’的方式，设置一个允许访问的网站范围，其它网站均被拒绝访问。如此，才能有效地进行范围控制。</p>
<p>4、如果选择‘检查目标端口’，则端口不分是TCP端口、还是UDP端口，设置的端口对TCP通信和UDP通信都同样有效。</p>
<p>5、设置检查目标IP地址时，只有网站域名才能设置通配字符串。如果设置具体的IP地址，则必须设置完整的IP地址，否则将被视作域名通配字符串。</p>
<p>6、设置网站范围时，如果是检查允许，只设置被允许的网站范围。注意有的网站会自动跳转到另外一个域名，则必须把跳转的网站域名也设置到允许访问范围内，否则这种类型的网站，还是不能被正常访问。</p>
<p>7、设置的网站范围，所有设置网站的字符串全部加起来，总长度不能超过8K字节，超过部分无效；所有网站对应的实际IP地址，总数量不能超过8K。</p>
<p>8、设置的端口范围，最多只能设置32个端口，超过部分无效。</p>
<p>9、上网范围的修改，对已经上网的用户，不会立即生效。只有在用户下次登录上网后，才会产生作用效果。而且如果修改了检查目标IP或者域名，客户机最好重新启动，否则可能影响其正常上网。</p>

<p>10、如果SIP监视计费器中也设置了上网范围限制，则该上网范围是全局的上网范围，对任何登录上网用户都有效。组别和用户的上网范围，只对相关的用户才有作用。实际上网时的上网范围检查，首先检查SIP监视计费器中设置的全局规则，如果没有通过检查，则直接拒绝；如果通过全局检查，才再进行该用户（组）的规则检查，通过检查则放行，未通过则拒绝。</p>

<hr>
<p align="center">SIP企业上网管理系统</p>
<p align="center">作者：<b>深圳市飞沃软件有限公司</b></p>
</body>

</html>
