感觉可能会有点用,就直接把代码帖出来了,很简单,也就不做什么说明了 :)
private static Int64 GetIPNum(string ip)
{
Int64 num = 0;
string[] ips = new string[4];
ips = ip.Split('.');
num = Convert.ToInt64(ips[0])*256*256*256+Convert.ToInt64(ips[1])*256*256+Convert.ToInt64(ips[2])*256+Convert.ToInt64(ips[3])-1;
return num;
}
public static bool CheckUserIPAddress()
{
bool yes = false;
SqlConnection conn = null;
SqlCommand cmd = null;
SqlDataReader dr = null;
string sql = string.Empty;
string bip = string.Empty;
string eip = string.Empty;
string UserIP = string.Empty;
string connstr = System.Configuration.ConfigurationSettings.AppSettings["webmedia"];
#region Get UserIP
if(System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"]!=null)
{
UserIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}
else
{
UserIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString();
}
#endregion
try
{
sql = string.Format("select bip,eip from [iptable] order by id");
conn = new SqlConnection(connstr);
conn.Open();
cmd = new SqlCommand(sql,conn);
dr = cmd.ExecuteReader();
if(dr.Read())
{
do
{
bip = dr.GetString(0);
eip = dr.GetString(1);
if(GetIPNum(UserIP)>=GetIPNum(bip)&&GetIPNum(UserIP)<=GetIPNum(eip))
return true;
}while(dr.Read());
}
}
catch(Exception ex)
{ System.Web.HttpContext.Current.Response.Write(ex); }
finally
{
if(conn!=null)
conn.Close();
if(cmd!=null)
cmd.Dispose();
if(dr!=null)
dr.Close();
}
return yes ;
}