关于 网站客户端 ip读取后 取得相应城市问题(转)
现在有很多网站都会在用户登入后 提醒你“欢迎光临某地用户” 这个某地就是我们程序员要解决的问题了 其实这是一个很简单的功能 百分之九十九的程序员能在两个小时内搞定, 呵呵 我这有个已经封装好的类 你直接down过去那不就两分钟搞定吗
在这其中第一步是我们必需得得到一个ip地址数据库
第二步就是我们要用一个方法得到用户ip
第三步就是将用户ip与数据库ip进行比较然后得到相应的城市
但就在这个时候就会可能出现一定的问题
1.ip地址的数据如何比较
我可以告诉你用一种算法将ip转换成十进制然后再比较
而这时可能又会出现一定的问题
2.ip地址一再某个区段就归属于那个城市,所以数据库里 会有一个 起始ip会有一个结束ip 而且你拿到的这些ip都还没有转换成十进制的 试问 你是不是想过 把一个一个ip split('.')再遍历,那样或许能实现,但效率会很低,实现也会很难
所以大家在网上下载ip数据库时记得用一个以及把ip转换成十进制的数据库那样 什么事情都很顺利了
还得说一句:用sql的用户可能在网上能找到能用的数据库 会有一定的困难 网上还会有 其他的比如access数据库 标准的比较多 可以把它导到你的sql表中
实现代码如下 我是将其作为一个类文件 以后好供人调用
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
/// <summary>
///GetUserIp 的摘要说明
/// </summary>
public class GetUserIp:Page
{
string User_ip;
string City_Ip;
string User_Well;
#region 通过动态获取用户ip 将其所在城市调用出来
#region 最终调用界面
/// <summary>
/// 用户调用界面
/// </summary>
public void WellCome()
{
DataSet WellComeDs =GetCity();
User_Well = WellComeDs.Tables[0].Rows.Count.ToString();
if (User_Well != null)
{
Response.Write(User_Well + "用户你好!欢迎光临千家网--");
}
else
{
Response.Write("*无法识别网络Ip*");
}
}
#endregion
#region 动态获取用户ip 将其转换成string返回 的方法
/// <summary>
/// 动态获取用户ip 并将其转换成十进制数据
/// </summary>
/// <returns>string</returns>
public string GetIp()
{
User_ip = Request.UserHostAddress.ToString();
string[] IPArray = User_ip.Split('.');
long[] IPNum=new long[4];
for (int i = 0; i < 4;i++ )
{
IPNum[i] = long.Parse(IPArray[i].Trim());
}
long IPNumTotal = IPNum[0] * 256 * 256 * 256 + IPNum[1] * 256 * 256 + IPNum[2] * 256 + IPNum[3] - 1;
return IPNumTotal.ToString();
}
#endregion
#region 根据获取ip找到相应城市 赋给一个dataset
/// <summary>
/// 根据获取ip找到相应城市 赋给一个dataset
/// </summary>
/// <returns>dataset</returns>
public DataSet GetCity()
{
DataSet CityDs = new DataSet();
City_Ip = GetIp();
string conn ="server=.;database=Test;uid=sa;pwd=";
string sql = "SELECT COUNTRY FROM BBSGOOD_IP WHERE IP2>@HH AND IP1<@HH";
SqlDataAdapter CitySA = new SqlDataAdapter(sql,conn);
CitySA.SelectCommand.Parameters.Add(new SqlParameter("@HH", SqlDbType.NVarChar, 15));
CitySA.SelectCommand.Parameters["@HH"].Value = City_Ip;
CitySA.Fill(CityDs);
return CityDs;
}
#endregion
#endregion
}
代码我都加了很多注释 要有那位盟友有不明白的话 请留言 呵呵 哥们能帮得上一定顶