niunan 发表于 2013-1-30 01:20:50

刚刚找到的IP地址对应地区数据库

    项目原因,网上下载了 We7 CMS安装版,(想下载源码竟然发现要加入什么什么源码小组,还要一年交¥100,晕,这叫什么GP开源啊!!!),下载下来看了下app_data目录,惊奇发现有个ip.db,呵呵,我猜可能是IP地址数据库了,而且是sqlite的,打开一看:
http://niunan.org/upload/20100615153504.jpg
嘿嘿 ,果然是IP地址数据库,而且都转成长IP格式的了,自己写了个aspx页面来获取IP的:
http://5mdn.com/getip.aspx
给网上的人测试发现其实这个IP数据库也不是很完全的,算了,不管了,先记下来吧,下面是aspx.cs的代码:

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Text.RegularExpressions;using System.Data;using System.Data.SQLite;public partial class test : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {      string ip = Request.UserHostAddress;      string longip = IpToLong(ip).ToString();      litmes.Text = "<h3>您的IP:" + ip + "</h3>";      litmes.Text += "<h3>转换后的IP:" + longip + "</h3>";      litmes.Text += "<h4>从IP数据库中取出的记录:</h4>";      SQLiteConnection conn = null;      SQLiteCommand cmd = null;      SQLiteDataReader sdr = null;      string connStr = "Data Source=" + HttpContext.Current.Server.MapPath("~/App_Data/ip.db");      conn = new SQLiteConnection(connStr);      conn.Open();      string sql = "SELECT * FROM iptocity where " + longip + " between ip_start and ip_end";      cmd = new SQLiteCommand(sql, conn);      DataTable dt = new DataTable();      using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))      {            dt.Load(sdr);      }      GridView1.DataSource = dt;      GridView1.DataBind();    }    // 把IP地址转成长数字,    // 算法:128.125.1.24 → (128*256*256*256) + (125*256*256) + (1*256) +24    public static ulong IpToLong(string ip)    {      try      {            string[] cip = ip.Trim().Split('.');            string[] aip = new string;            cip.CopyTo(aip, 0);            if (cip.Length < 3)            {                for (int i = 3; i > cip.Length; i--)                {                  aip = "0";                }            }            uint[] iip = new uint;            Regex reg = new Regex(@"\d+");            for (int x = 0; x < aip.Length; x++)            {                if (reg.IsMatch(aip))                  iip = Convert.ToUInt32(aip);                else                  iip = 0;            }            ulong uip = Convert.ToUInt64(256 * 256 * 256 * iip + 256 * 256 * iip + 256 * iip + iip);            return uip;      }      catch (Exception ess)      {            throw ess;      }    }} 相关文件下载:点击下载
页: [1]
查看完整版本: 刚刚找到的IP地址对应地区数据库