利用IP地址获取用户地理位置

开发者们对于IP跟踪系统并不陌生,Microsoft Visual Studio .NET 提供了许多类和方法来实现这一功能。本文不仅介绍了如何获取用户IP,还介绍了如何找到浏览ASP.NET应用程序用户的地理位置。例如,有一个ASP.NET应用程序,托管已经完成,网址假设为 "www.xyz.com",现在想要跟踪/维护访问者IP及其位置的日志,例如:

IP: XXX.XXX.XXX.XXX, 时间戳: 3/2/2010 4:18:39 PM, 国家= 孟加拉国, 国家代码= BD, 城市= 达卡, 等等。

快速概览:

在开始之前,需要了解一些基础知识,关于由Microsoft Visual Studio .Net提供的System.Net和System.Data命名空间,以及HTTP服务器变量。更多信息可以在找到。

实现方法

如果在互联网上搜索解决方案,可能会找到许多方法。例如,可以使用Web服务或下载包含IP位置映射的数据库,但它们大多数不是免费的/每天只允许有限的访问次数...发现了一些网站允许免费获取用户位置信息,以下是一些网站列表:

注意:上述所有列出的地址都以标准XML格式回复。

在本节中,将讨论如何使用这些网站来检索用户地理位置。可以任选其一,在此之前需要知道所需的参数,让一个接一个地开始:

(i)

参数:IP地址(xxx.xxx.xxx.xxx)。

URL示例:http://freegeoip.appspot.com/xml/xxx.xxx.xxx.xxx

输出:标准XML

<?xml version="1.0" encoding="UTF-8"?> <Response> <Status>true</Status> <Ip>xxx.xxx.xxx.xxx</Ip> <CountryCode>BD</CountryCode> <CountryName>Bangladesh</CountryName> <RegionCode>81</RegionCode> <RegionName>Dhaka</RegionName> <City>Dhaka</City> <ZipCode></ZipCode> <Latitude>23.723</Latitude> <Longitude>90.4086</Longitude> </Response>

(ii)

参数:IP地址 (xxx.xxx.xxx.xxx) & 许可证密钥。

URL示例:http://ws.cdyne.com/ip2geo/ip2geo.asmx/ResolveIP?ipAddress=xxx.xxx.xxx.xxx&licenseKey=0

输出:标准XML

<?xml version="1.0" encoding="utf-8"?> <IPInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://ws.cdyne.com/"> <City>Dhaka</City> <StateProvince>81</StateProvince> <Country>Bangladesh</Country> <Organization/> <Latitude>23.72301</Latitude> <Longitude>90.4086</Longitude> <AreaCode>0</AreaCode> <TimeZone/> <HasDaylightSavings>false</HasDaylightSavings> <Certainty>90</Certainty> <RegionName/> <CountryCode>BD</CountryCode> </IPInformation>

(iii)

参数:IP地址(xxx.xxx.xxx.xxx)。

URL示例:http://ipinfodb.com/ip_query.php?ip=xxx.xxx.xxx.xxx0

输出:标准XML

<?xml version="1.0" encoding="UTF-8"?> <Response> <Ip>xxx.xxx.xxx.xxx</Ip> <Status>OK</Status> <CountryCode>BD</CountryCode> <CountryName>Bangladesh</CountryName> <RegionCode>81</RegionCode> <RegionName>Dhaka</RegionName> <City>Dhaka</City> <ZipPostalCode></ZipPostalCode> <Latitude>23.7231</Latitude> <Longitude>90.4086</Longitude> <Timezone>6</Timezone> <Gmtoffset>6</Gmtoffset> <Dstoffset>6</Dstoffset> </Response>

使用了一个非常常见的技术。实际上,这只是使用HTTP服务器变量。以下是为此目的使用的服务器变量:

  • HTTP_X_FORWARDED_FOR
  • REMOTE_ADDR

以下是代码示例:

private string GetVisitor() { string strIPAddress = string.Empty; string strVisitorCountry = string.Empty; strIPAddress = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (strIPAddress == "" || strIPAddress == null) strIPAddress = Request.ServerVariables["REMOTE_ADDR"]; Tools.GetLocation.IVisitorsGeographicalLocation _objLocation; _objLocation = new Tools.GetLocation.ClsVisitorsGeographicalLocation(); DataTable _objDataTable = _objLocation.GetLocation(strIPAddress); if (_objDataTable != null) { if (_objDataTable.Rows.Count > 0) { strVisitorCountry = "IP: " + strIPAddress + ", TIMESTAMP: " + Convert.ToString(System.DateTime.Now) + ", CITY: " + Convert.ToString(_objDataTable.Rows[0]["City"]).ToUpper() + ", COUNTRY: " + Convert.ToString(_objDataTable.Rows[0]["CountryName"]).ToUpper() + ", COUNTRY CODE: " + Convert.ToString(_objDataTable.Rows[0]["CountryCode"]).ToUpper(); } else { strVisitorCountry = null; } } return strVisitorCountry; }

要获取位置,只需要使用Microsoft Visual Studio .NET提供的以下内容:

  • WebRequest
  • WebResponse
  • WebProxy

更多信息可以在找到。

以下是代码示例:

public DataTable GetLocation(string strIPAddress) { // Create a WebRequest with the current Ip WebRequest _objWebRequest = WebRequest.Create("http://freegeoip.appspot.com/xml/" + strIPAddress); // Create a Web Proxy WebProxy _objWebProxy = new WebProxy("http://freegeoip.appspot.com/xml/" + strIPAddress, true); // Assign the proxy to the WebRequest _objWebRequest.Proxy = _objWebProxy; // Set the timeout in Seconds for the WebRequest _objWebRequest.Timeout = 2000; try { // Get the WebResponse WebResponse _objWebResponse = _objWebRequest.GetResponse(); // Read the Response in a XMLTextReader XmlTextReader _objXmlTextReader = new XmlTextReader(_objWebResponse.GetResponseStream()); // Create a new DataSet DataSet _objDataSet = new DataSet(); // Read the Response into the DataSet _objDataSet.ReadXml(_objXmlTextReader); return _objDataSet.Tables[0]; } catch { return null; } } // End of GetLocation

希望这对有所帮助!享受。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485