将IP地址转换为地方名称

下面这段代码将IP地址转换为地方名称,例如你的IP地址为 “58.24.25.65” 则显示为 “上海徐汇区”
当然转换过程中,需要有数据库,也就是这里适用的数据库是动网论坛最新版本DVBBS8.1提供的数据库,你可以到dvbbs下载那个论坛,然后在data目录下找到
ipaddress数据库文件,其中ip1和ip2对应ip地址的范围


这里介绍如何转换,它使用的是IP地址是10进制的,简单说一下IP原理,(以下均为假设)例如www.sohu.com 对应的IP地址为
12.24.10.45
首先将IP转换为二进制
0000 1000 . 0001 1000 . 0000 1010 .  0010 1101
然后转换为十六进制
0B. 18. 0A.2C
然后去掉小数点
0b180a2c
然后转换为十进制就可以了,代码如下

<%@ Page Language="C#" %>
<%@ Import  Namespace="System.Data.OleDb"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {


        string Ip =Request.UserHostAddress;
        string[] Ip_List = Ip.Split(".".ToCharArray());
        string X_Ip = "";
        foreach (string ip in Ip_List)
        {
            string tmp = Convert.ToInt16(ip).ToString("x");
                       X_Ip += tmp;
        }
        long num = long.Parse(X_Ip, System.Globalization.NumberStyles.HexNumber);


        string aConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("ipaddress.mdb");
        System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(aConnStr);
        System.Data.OleDb.OleDbCommand cmd = new OleDbCommand();
        cmd.Connection = con;
        con.Open();
        cmd.CommandText = "select top 1 country,city from dv_address where ip1 <=" + num + " and ip2 >=" + num;
        string result = cmd.ExecuteScalar().ToString();
        con.Close();
        Response.Write(result);
    }
  
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
    </form>
</body>
</html>



有了127.0.0.1对应但是2130706433 ,所以你ping 127.0.0.1和ping 2130706433 效果是一样的
可能有人说为什么不直接转换,因为直接转换需要取位,很麻烦
测试结果:
首先准备一个IP。例如在控制台里输入cmd,然后跟中一个网站,例如
 tracert http://www.cnblogs.com
可以得到它的IP为  219.232.228.156
然后你可以到 http://www.ip138.com/ 查询其对应的地址
然后在适用上面程序进行验证是否正确。
在适用上面代码时,请注意下载需要数据库。(可以到动网论坛里下载 www.dvbbs.net)
原文地址:https://www.cnblogs.com/mqingqing123/p/1007264.html