.NET中判断国内IP和国外IP
一些朋友可能会在做网站时需要考虑浏览者如果在国内输入网址则进入中文版网站而国外则进入英文网站,如何区分是国内浏览者还是国外浏览者呢,一般是通过浏览者所在的IP进行判断(如果来个大概判断的话可以通过浏览者所用浏览器的语言版本或者操作系统的语言版本进行判断)。
要用IP进行判断话,首先要有IP的划分表。下面提供c#判断国际国内IP的代码。
注意:为了使得判断更准确,要及时更新最新的IP划分表。
附:IP划分表/Files/efly/WP_IPMAPPING.rar
/// <summary>
/// 判断IP是否为国内IP
/// </summary>
/// <returns>返回true则是国内IP,返回false则是国外IP</returns>
protected bool VerifyIP()
{
string ipaddress = System.Web.HttpContext.Current.Request.UserHostAddress;//获取浏览者所在IP
string[] str = ipaddress.Split('.');
//将IP地址转换为12位的字符串(去掉了“.”符号)
string strs = str[0].PadLeft(3, '0') + str[1].PadLeft(3, '0') + str[2].PadLeft(3, '0') + str[3].PadLeft(3, '0');
decimal it = decimal.Parse(strs.ToString());//将IP地址转换为decimal类型
ZPY.BLL.WorldIp bll_wp = new ZPY.BLL.WorldIp();
DataSet ds = bll_wp.GetAllList();//将IP划分表的中国IP所有IP段的内容填充到DataSet对象
DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows)//遍历所有的行
{
//获取每行的“StartIP”字段内容,即某一段国内IP的开始IP
decimal dl1 = decimal.Parse(dr["StartIP"].ToString());
//获取每行的“EndIP”字段内容,即某一段国内IP的结束IP
decimal dl2 = decimal.Parse(dr["EndIP"].ToString());
//如果浏览者所在IP所在在这个IP段内,则返回true 同时退出遍历
if (it >= dl1 && it <= dl2)
{
return true;
}
}
//如果所在IP没有在表里面中国IP的任何范围,则返回false
return false;
}