日期:2014-05-18  浏览次数:20455 次

限制IP访问
B/S中
如何这个网站   启动后只让固定的几个IP访问?
比如说只让   192.168.1.3,192.168.1.4,192.168.1.5   这三个IP访问
我用的是左右两栏的框架页。


------解决方案--------------------
Request.UserHostAddress.Trim() 取得客户端的IP地址。
然后去判断就行了,你和本机文件判断还是和数据库里的信息判断这个就随便你了。
------解决方案--------------------
string userip = Request.UserHostAddress.ToString();
switch (userip)
{
case "192.168.1.3 ":
Response.Write( "该Ip可以访问 ");
break;

case "192.168.1.4 ":
Response.Write( "该Ip可以访问 ");
break;

case "192.168.1.5 ":
Response.Write( "该Ip可以访问 ");
break;

}
------解决方案--------------------
不要用代码实现!用IIS的IP限制功能是最恰当的!
------解决方案--------------------
Request.UserHostAddress.Trim()
------解决方案--------------------
如果只是对少量IP的限制,在IIS里面直接设置比较方便。
如果包含大量的IP段,那么使用HttpModule、HttpHeader的方法通过程序控制,把需要过滤的IP写在配置文件,比较合适。
------解决方案--------------------
TO JYYCOM:
限制一个IP段。
比如:192.168.1.1 --- 192.168.10.50
如果客户端IP为:192.168.3.123
那么将以上三个IP地址转换成特定的格式:
192.168.1.1 --- 192.168.10.50 ===> 192.168.001.001 --- 192.168.010.050
192.168.3.123 ===> 192.168.003.123

这样的话,就可以直接用字符串比较大小的方法
(只适用于在数据库中用sql语句,或者DataTable里面筛选)
"192.168.001.001 " < "192.168.003.123 " < "192.168.010.050 "

再或者把IP转成这样的格式:
192.168.1.1 --- 192.168.10.50 ===> 192168001001 --- 192168010050
192.168.3.123 ===> 192168003123
这样就可以直接判断数字的大小了。
------解决方案--------------------
刚巧,写了个操作类

#region
/// <summary>
/// 检测客户端ip是否在某一ip段内
/// </summary>
/// <param ClientIp> 客户端ip </param>
/// <returns> 1,通过;0;不通过 </returns>
public int IpExamination(string ClientIp)
{
string ksip = " ";//开始ip
string jsip = " ";//结束ip
long intksip;
long intjsip;
long intClientIp;
int returnvalue = 0;

string sql = "select top 1 ksip,jsip from tb_ipsd "; //数据库中的表
DataSet ds = db.dsSelect(sql);//
if (ds != null && ds.Tables[0].Rows.Count != 0)
{
ksip = ds.Tables[0].Rows[0][ "ksip "].ToString();
jsip = ds.Tables[0].Rows[0][ "jsip "].ToString();
}

intksip = IptoInt(ksip);
intjsip = IptoInt(jsip);
intClientIp = IptoInt(ClientIp);
//直接比较数值大小,判断是否在范围ip内
if (intClientIp > = intksip && intClientIp <= intjsip)
{
returnvalue = 1;
}
return returnvalue;
}

/// <summary>
/// 转换ip为数值类型
/// </summary>
/// <param ip> ip </param>
/// <returns> 数值ip </returns>
public long IptoInt(string ip)
{
long number;
string[] iparry = ip.Split( '. ');
number = long.Parse(iparry[0]) * 256 * 256 * 256 + long.Parse(iparry[1]) * 256 * 256 + long.Parse(iparry[2]) * 256 + long.Parse(iparry[3]);