如何将 IP 地址转换为国家名称
如何从 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 数据库
- 下载最新的 IP-to-Country 数据库(上次更新于 2008 年 7 月 21 日)。
- IP-to-Country 手册
转换为 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
输出如下