根据IP定位地理位置

参考http://bbs.csdn.net/topics/390336760

出处 http://blog.sina.com.cn/s/blog_49b6b5590100kkxr.html

网上实现IP定位地理位置的技术大部分是PHP和Java,.NET的我找了好久还是还没找到。黄某于是不自量力,经过几个小时的找资料,写代码,终于皇天不负有心人,基于.net的IP定位地理位置的网页实现了,如有同志有兴趣,不妨看看,最还能提些意见,感激不尽!

1.准备工作:
要下载的东西是MaxMind的免费GeoLiteCity数据库和C# API。地址www.maxmind.com如下图: 用.NET(C#)实现IP定位地理位置 <wbr>(1)

用.NET(C#)实现IP定位地理位置 <wbr>(1)

用.NET(C#)实现IP定位地理位置 <wbr>(1)

用.NET(C#)实现IP定位地理位置 <wbr>(1)

用.NET(C#)实现IP定位地理位置 <wbr>(1)

二进制数据可下载完成后,解压GeoLiteCity.dat就可以了。
然后在VS2008中新建一个网站和一个类库,给网站添加Bin文件夹.
把下载下来的GeoIP-CSharp-1_2.zip解压出来,把将CS文件添加到类库中。其中有几个以Example结尾的文件不用加。不然重新生成会报错。然后将生成的dll文件添加到bin文件夹中。
这样准备工作就完成了。 用.NET(C#)实现IP定位地理位置 <wbr>(1)

2.Ip地址搜索页面的生成
用于往地图页面“传输”数据。
前台页面只要这句话就够了:
<%@ Page Language="C#" CodeFile="SearchIP.aspx.cs" Inherits="SearchIP"%>
不然地图页面调用eval(data);会出错;

后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using System.Data;
using System.Configuration;
using System.Net;

public partial class SearchIP : System.Web.UI.Page
{
 
    stringIP="";
      stringDomain="";
      protectedvoid Page_Load(object sender, EventArgs e)
      {
              try
              {

                      if (Request.QueryString.Count != 0)
                              Domain = Request.QueryString["q"].ToString();
                      if (Domain == "")
                      {
                              IP = IPAddress;
                              if (IP == "" || IP.Equals(null))
                              {
                                      Response.Write("<script>alert(找不到IP地址!');</script>");
                                      return;
                              }
                      }
                      else
                      {
                              if (!IsIPAddress(Domain))
                              {
                                      IP = GetIPByDomain(Domain);
                                      if (!IsIPAddress(IP))
                                      {
                                              Response.Write("<script>alert('找不到IP地址!');</script>");
                                              return;
                                      }
                              }
                              else
                                      IP = Domain;
                      }
                     
              }
              catch (Exception e1)
              {
                      Response.Write("<script>alert('出错了!');</script>");
                      return;
              }
                  LoadPage();

      }
//获取IP地址
      publicstatic string IPAddress
      {
              get
              {
                      string result = String.Empty;

                      result =HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                      if (result != null && result !=String.Empty)
                      {
                              //可能有代理
                              if (result.IndexOf(".") ==-1)        //没有“.”肯定是非IPv4格式
                                      result = null;
                              else
                              {
                                      if (result.IndexOf(",") != -1)
                                      {
                                              //有“,”,估计多个代理。取第一个不是内网的IP。
                                              result = result.Replace(" ", "").Replace("'", "");
                                              string[] temparyip = result.Split(",;".ToCharArray());
                                              for (int i = 0; i < temparyip.Length; i++)
                                              {
                                                      if (IsIPAddress(temparyip[i])
                                                              && temparyip[i].Substring(0, 3) !="10."
                                                              && temparyip[i].Substring(0, 7) !="192.168"
                                                              && temparyip[i].Substring(0, 7) !="172.16.")
                                                      {
                                                              returntemparyip[i];        //找到不是内网的地址
                                                      }
                                              }
                                      }
                                      else if (IsIPAddress(result)) //代理即是IP格式
                                              return result;
                                      else
                                              result =null;        //代理中的内容非IP,取IP
                              }

                      }

                      string IpAddress =(HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!= null &&HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]!= String.Empty) ?HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]: HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                      //if (IpAddress == "127.0.0.1" || IpAddress=="localhost")
                      //      result =Dns.GetHostEntry(Dns.GetHostName()).AddressList[5].ToString();
                      using (System.Net.WebClient wc = new System.Net.WebClient())
                      {
                              result = wc.DownloadString("http://www.zu14.cn/ip/"); //用自己的电脑访问http://www.zu14.cn/ip/获取IP地址
                      }


                      if (null == result || result == String.Empty)
                              result =HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];

                      if (result == null || result == String.Empty)
                              result = HttpContext.Current.Request.UserHostAddress;

                      return result;
              }
      }

      publicstatic bool IsIPAddress(string str1) //判断是不是IP地址的格式
      {
              if (str1 == null || str1 == string.Empty || str1.Length< 7 || str1.Length > 15) returnfalse;
              string regformat =@"^\d{1,3}[\.]\d{1,3}[\.]\d{1,3}[\.]\d{1,3}$";
              Regex regex = new Regex(regformat, RegexOptions.IgnoreCase);
              return regex.IsMatch(str1);
      }

      publicstring GetIPByDomain(string url) //根据域名取得IP地址
      {
              if (url.Trim() == string.Empty)
                      return "";
              try
              {
                      System.Net.IPHostEntry host =System.Net.Dns.GetHostEntry(url);
                      return host.AddressList.GetValue(0).ToString();
              }
              catch
              {
                      return "";
              }
      }

      public voidLoadPage()
      {
              try
              {
                      LookupService ls = newLookupService("C:/Users/hzh-PC/Desktop/GeoLiteCity.dat",LookupService.GEOIP_STANDARD); //使用MaxMind的API
                      //get city location of the ip address
                      if (IP != null)
                      {
                              Location l = new Location();
                                l = ls.getLocation(IP);
                              if (l != null)
                              {
                                      string fun= "loadGeoInfo("+
                                              '"' + Domain + "\"," +
                                              '"'+ IP +"\","+
                                              '"'+ l.countryCode + "\","+
                                              '"'+ l.countryName +"\","+
                                              '"'+ l.regionName +"\","+
                                              '"' + l.city + "\"," +
                                              l.latitude +',' +
                                              l.longitude+")";                                     
                                      Response.Write(fun);
                                     
                                     
                              }
                              else
                                                                 
                                      Response.Write("<script>alert('找不到IP地址!');</script>");
                                      return;
                              }
                      }
                      else
                      {
                              Response.Write("<script>alert('找不到IP地址!!');</script>");
                              return;
                      }
              }
              catch (Exception e)
              {
                      Response.Write("<script>alert('错误:" +e.Message + "');</script>");
              }
      }
}
该页面的默认是获得自己电脑的IP的信息,可以通过SearchIP?q= XXX来获取特定IP或域名的信息。
运行结果:
用.NET(C#)实现IP定位地理位置 <wbr>(1)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值