65.9K
CodeProject 正在变化。 阅读更多。
Home

如何将 IP 地址转换为国家名称

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.53/5 (60投票s)

2008 年 8 月 5 日

CPOL

2分钟阅读

viewsIcon

283294

downloadIcon

7803

如何从 IP 号码检索国家名称和国家代码?

如何检索访问者的 IP 地址

访问您的网站或 Web 应用程序的每个访问者都有一个 IP 地址。能够获取该地址非常方便。它可以用于安全日志记录,或者可能用于跟踪。它还可以用于确定他们在世界上的位置,或者至少确定他们的 ISP 的位置。

困难在于他们位于某种代理之后,您只能看到代理服务器的 IP 地址。因此,这里是在 ASP.NET 中首先检查从代理转发的 IP 地址的代码片段,如果没有,则仅获取 IP 地址。这是在 .NET 中具有代理检测功能的相同 IP 检索器,但在 VB.NET 中。

Dim nowip As String 
nowip = Request.ServerVariables("HTTP_X_FORWARDED_FOR") 
If nowip = "" Then
   nowip = Request.ServerVariables("REMOTE_ADDR")
End If

如何将 IP 地址转换为 IP 编号?

IP 地址 (IPV4) 分为四个子块。每个子块都有一个不同的权重编号,每个都以 256 为幂。IP 编号在数据库中使用,因为它在数据库中搜索一系列数字是有效的。

起始 IP 编号和结束 IP 编号是根据以下公式计算的

IP Number = 16777216*w + 65536*x + 256*y + z (1)

其中

IP Address = w.x.y.z

例如,如果 IP 地址是“202.186.13.4”,则其 IP 编号是“3401190660”,基于上述公式。

IP Address = 202.186.13.4
So, w = 202, x = 186, y = 13 and z = 4

IP Number = 16777216*202 + 65536*186 + 256*13 + 4
          = 3388997632 + 12189696 + 3328 + 4
          = 3401190660

将 IP 编号转换为 IP 地址

w = int ( IP Number / 16777216 ) % 256
x = int ( IP Number / 65536 ) % 256
y = int ( IP Number / 256 ) % 256
z = int ( IP Number ) % 256

其中,%是模运算符,int返回除法的整数部分。

如何从 IP 编号中检索国家/地区名称和国家/地区代码?

搜索 IP-国家/地区数据库以匹配一个唯一记录,该记录的 IP 编号介于起始 IP 编号和结束 IP 编号之间。

例如,IP 地址“202.186.13.4”等效于 IP 编号“3401190660”。它属于数据库中的以下记录,因为它介于 IP 编号的起始和结束之间

"3401056256","3401400319","MY","MALAYSIA"

从记录集中,国家/地区名称是马来西亚,国家/地区代码是 MY。这是一个有用的链接

如何使用此数据库

CSV 文件格式

CSV 文件包含四个字段

  • IP 地址范围的开始
  • IP 地址范围的结束
  • 基于 ISO 3166 的两位国家/地区代码
  • 基于 ISO 3166 的三位国家/地区代码
  • 基于 ISO 3166 的国家/地区名称
"0033996344","0033996351","GB","GBR","UNITED KINGDOM"
"0050331648","0083886079","US","USA","UNITED STATES"
"0094585424","0094585439","SE","SWE","SWEDEN"
字段 数据类型 字段描述
IP_FROM 数字 (DOUBLE) IP 地址范围的开始。
IP_TO 数字 (DOUBLE) IP 地址范围的结束。
COUNTRY_CODE2 CHAR(2) 基于 ISO 3166 的两位国家/地区代码。
COUNTRY_CODE3 CHAR(3) 基于 ISO 3166 的三位国家/地区代码。
COUNTRY_NAME VARCHAR(50) 基于 ISO 3166 的国家/地区名称

下载 CSV 数据库

转换为 Access 数据库

这是代码隐藏文件

Partial Class How_to_Convert_IP_Address_Country _
        Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object,_
        ByVal e As System.EventArgs) Handles Me.Load
        Dim nowip As String
        nowip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
        If nowip = "" Then
            nowip = Request.ServerVariables("REMOTE_ADDR")
        End If

        If txtIPAddress.Text = "" Then
            txtIPAddress.Text = nowip
        End If
        lblError.Text = ""
    End Sub

    Protected Sub Button1_Click(ByVal sender As Object,_
        ByVal e As System.EventArgs) Handles Button1.Click
        On Error GoTo HandleError

        Dim dottedip As String
        Dim Dot2LongIP As Double
        Dim PrevPos As Double
        Dim pos As Double
        Dim num As Double

        dottedip = txtIPAddress.Text

            For i = 1 To 4
                pos = InStr(PrevPos + 1, dottedip, ".", 1)
                If i = 4 Then
                    pos = Len(dottedip) + 1
                End If
                num = Int(Mid(dottedip, PrevPos + 1, pos - PrevPos - 1))
                PrevPos = pos
                Dot2LongIP = ((num Mod 256) * (256 ^ (4 - i))) + Dot2LongIP
            Next

        txtIPNumber.Text = Dot2LongIP

HandleError:
        lblError.Text = Err.Description
    End Sub
End Class

输出如下

check-conutry.jpg

© . All rights reserved.