ASP读取纯真IP库代码

数据库使用的纯真数据库QQwry.Dat,6兆左右。

数据库下载地址:北方网通 | 华东电信 |  自动选择线路

一直想做带水印的IP签名图来着。周末闲着就动手了。ASP这方面的资料很多,就不多说了。只把算法贴上。.NET关于这方面的文章很少,我反正搜到。 .Net的现在先说说算法,过几天把做成水印图的教程发一下。

ASP版的,找到两种算法,一种是搜到的,另一种是数据库附带的一份说明(作者很厚道) 。

两种算法都贴上:

第一种算法:

引用:

function cip(sip)
       tip=cstr(sip)
       sip1=left(tip,cint(instr(tip,".")-1))
       tip=mid(tip,cint(instr(tip,".")+1))
       sip2=left(tip,cint(instr(tip,".")-1))
       tip=mid(tip,cint(instr(tip,".")+1))
       sip3=left(tip,cint(instr(tip,".")-1))
       sip4=mid(tip,cint(instr(tip,".")+1))
       if cint(sip1)<128 then
              cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
       else
              cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)-4294967296
       end if
end function

这个算法,有点乱。没看懂什么意思。特别是,

引用:

       if cint(sip1)<128 then
              cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
       else
              cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)-4294967296
       end if

经测试,无需判断。即
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
就可以得出正确的值。

第二种算法,这个比较简单和简洁,算法一目了然,傻子都会选这个,给注释了一下:

引用:

Function cacuIp(sIP)
On Error Resume Next
Dim srIp, aIp
srIp=0
aIp = Split(sIP,".") '截取字符串,得到数组aIp[0]到aIp[3]
If UBound(aIP)<>3 Then '如果不是正确的IP
cacuIP=0  '返回0
Exit Function  '退出函数
End If
For i=0 To 3
srIp=srIp+(CInt(aIP(i))*(256^(3-i))) '每个数乘上256的3-i次幂,再把值相加
Next
cacuIp=srIp-1 '最后再减去1,就得到纯真数据库里那看不懂的一堆数了
If Err Then cacuIp=0
End Function

简单明了,偶喜欢~

OK,下面换成.NET的算法.

引用:

    void ciker_ip(string IP)
    {
    System.Int64 ip0 = 0;  //64位
    string[] ip_array = IP.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries); //同ASP
    for (int i = 0; i <= 3;i++ )
    {
        ip0 = ip0 + Convert.ToInt64(ip_array[i]) * Convert.ToInt64(Math.Pow(256, 3 - i));  //64位
    }
        ip0=ip0-1;
    }

OK,到此,.NET算法结束了.把.NET全部代码奉上.

Web.config:

引用:

<appSettings>
<add key="access" value="Ciker_IP.mdb" />
<connectionStrings/>

IP.ASPX.CS:

添加下面的命名空间:

引用:

using System.Data.OleDb;
using System.Text;

    protected void Page_Load(object sender, EventArgs e)
    {
        ciker_ip(Request.ServerVariables["Remote_Addr"].ToString());
    }

    void ciker_ip(string IP)
    {
    System.Int64 ip0 = 0;
    string[] ip_array = IP.Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i <= 3;i++ )
    {
        ip0 = ip0 + Convert.ToInt64(ip_array[i]) * Convert.ToInt64(Math.Pow(256, 3 - i));
    }
        ip0=ip0-1;

        string strConnection = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=" + Server.MapPath(ConfigurationSettings.AppSettings["access"]);
        OleDbConnection conn = new OleDbConnection(strConnection);
        OleDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = "SELECT pos,Detail FROM ip where StartIP<=" + ip0 + " and EndIP>=" + ip0;  
        conn.Open();  
        OleDbDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            Response.Write("你丫的IP: " + IP + "<br />");
            Response.Write("IP编码: " + ip0 + "<br />");
            Response.Write("地区: " + dr[0].ToString() + " " + dr[1].ToString());
        }
        dr.Close();
        conn.Close();
    }

时间: 2025-01-19 18:31:21

ASP读取纯真IP库代码的相关文章

asp.net 纯真ip库取得所在地实现代码_实用技巧

有关纯真IP库的相关知识:查看( pdf格式) 纯真IP库官方下载地址:http://www.cz88.net/ 使用的类(已经经过调试.net 2.0,已对错误做了修改): 复制代码 代码如下: using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Text.RegularExpressions; namespace QQWry.NET { public

asp.net/C#读取纯真IP数据库

C#读取纯真IP数据库 免费下载地址:http://download.csdn.net/detail/virone/4568159 using System; using System.Collections.Generic; using System.Text; using System.IO; namespace 纯真IP数据库研究 {     ///<summary>     /// 提供从纯真IP数据库搜索IP信息的方法:     /// 感谢LumaQQ提供纯真IP数据库格式文档:

php读取纯真ip数据库使用示例

 这篇文章主要介绍了php读取纯真ip数据库显示详细信息的使用示例,大家参考使用吧  代码如下: <?php /*--------------------------------------------------  ip2address [qqwry.dat] --------------------------------------------------*/   class ip {  var $fh; //IP数据库文件句柄  var $first; //第一条索引  var $las

读取纯真IP数据库的公用组件接口QQWry.NET_实用技巧

这是一个读取纯真IP数据库的公用组件接口,我是通过luma的<纯真IP数据库格式详解>了解了纯真IP数据库数据格式,并且基于网络上的一个IPLocation.dll源码的基础改编而来.我为什么要改编这个组件呢?因为我看到这个组件在使用过程中,每次都要打开文件流,并且整个接口使用静态的属性.并不适合Web环境下,多线程并发查询的需求,并且在性能上也不是最优.有了luma的格式详解,和现有的IPLocation.dll的源码,使我的工作变得异常的简单.出现的一个小错误,也是经过一次调试后就解决了.

Discuz 5.0 中读取纯真IP数据库函数分析

函数|数据|数据库 Discuz  5.0 不在使用自己的IP数据,而是使用纯真IP的数据格式, 存取纯真IP数据库稍微有点麻烦,它的存储格式比较特殊也很有趣,具体的格式分析参考下面两个链接,其他语言实现参考文章末的链接. <纯真IP数据库格式详解>链接一:http://blog.csdn.net/heiyeshuwu/archive/2006/05/12/725675.aspx链接二:http://lumaqq.linuxsir.org/article/qqwry_format_detail

Discuz 5.0 中读取纯真IP数据库函数分析_php技巧

Discuz  5.0 不在使用自己的IP数据,而是使用纯真IP的数据格式, 存取纯真IP数据库稍微有点麻烦,它的存储格式比较特殊也很有趣,具体的格式分析参考下面两个链接,其他语言实现参考文章末的链接. <纯真IP数据库格式详解> 链接一:http://blog.csdn.net/heiyeshuwu/archive/2006/05/12/725675.aspx 链接二:http://lumaqq.linuxsir.org/article/qqwry_format_detail.html 纯真

php读取纯真ip数据库使用示例_php实例

复制代码 代码如下: <?php/*-------------------------------------------------- ip2address [qqwry.dat]--------------------------------------------------*/ class ip { var $fh; //IP数据库文件句柄 var $first; //第一条索引 var $last; //最后一条索引 var $total; //索引总数  //构造函数 functio

python访问纯真IP数据库的代码_python

核心代码: #!/usr/bin/env python # -*- coding: utf-8 -*- from bisect import bisect _LIST1, _LIST2 = [], [] _INIT = False ip2int = lambda ip_str: reduce(lambda a, b: (a << 8) + b, [int(i) for i in ip_str.split('.')]) def _init(): global _LIST, _INIT if no

珊瑚虫IP库浅析_php实例

这不是什么新鲜事情了,很早之前就已经有人做出来了.就是使用PHP操作纯真IP库或珊瑚虫IP库,根据来访者的IP得到所在的物理位置. 我先帖出代码.然后再慢慢一步步浅析出来.希望对想了解这一块的朋友们有帮助. Only For PHP5的代码.会继续优化代码的. class IpLocation{    private $fp;    private $wrydat;    private $wrydat_version;    private $ipnumber;    private $fir