ASP讀取純真IP庫代碼

來源:互聯網
上載者:User

資料庫使用的純真資料庫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();
    }


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.