zoukankan      html  css  js  c++  java
  • 刚刚找到的IP地址对应地区数据库

       项目原因,网上下载了 We7 CMS安装版,(想下载源码竟然发现要加入什么什么源码小组,还要一年交¥100,晕,这叫什么GP开源啊!!!),下载下来看了下app_data目录,惊奇发现有个ip.db,呵呵,我猜可能是IP地址数据库了,而且是sqlite的,打开一看:

    嘿嘿 ,果然是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[4];
                cip.CopyTo(aip, 
    0);
                
    if (cip.Length < 3)
                {
                    
    for (int i = 3; i > cip.Length; i--)
                    {
                        aip[i] 
    = "0";
                    }
                }
                
    uint[] iip = new uint[4];
                Regex reg 
    = new Regex(@"\d+");
                
    for (int x = 0; x < aip.Length; x++)
                {
                    
    if (reg.IsMatch(aip[x]))
                        iip[x] 
    = Convert.ToUInt32(aip[x]);
                    
    else
                        iip[x] 
    = 0;
                }
                
    ulong uip = Convert.ToUInt64(256 * 256 * 256 * iip[0+ 256 * 256 * iip[1+ 256 * iip[2+ iip[3]);
                
    return uip;
            }
            
    catch (Exception ess)
            {
                
    throw ess;
            }
        }

    }
    相关文件下载:点击下载


    撸码:复制、粘贴,拿起键盘就是“干”!!!
  • 相关阅读:
    swagger多个分组代码展示
    rabbitMQ基本概念
    谈谈微信支付曝出的漏洞
    谈谈离职和跳槽
    一个著名的任务调度系统是怎么设计的?
    BAT等公司必问的8道Java经典面试题,你都会了吗?
    从世界杯竞猜骗局谈二分法
    Spring4+Spring MVC+MyBatis整合思路
    十张图让你了解阿里公司架构设计的发展变化史
    一位00后程序员的成长历程
  • 原文地址:https://www.cnblogs.com/niunan/p/1758648.html
Copyright © 2011-2022 走看看