예제 #1
0
파일: IpLocator.cs 프로젝트: liumeifu/OSky
        /// <summary>
        /// 由IP地址查找对应的位置信息
        /// </summary>
        /// <param name="ip"> 要查找的IP地址 </param>
        /// <returns> </returns>
        /// <exception cref="ArgumentException"></exception>
        public IpLocation Query(string ip)
        {
            if (ip == "::1")
            {
                ip = "127.0.0.1";
            }
            if (!_regex.Match(ip).Success)
            {
                throw new ArgumentException("IP格式错误");
            }
            IpLocation ipLocation = new IpLocation {
                Ip = ip
            };
            long intIp = IpToInt(ip);

            if ((intIp >= IpToInt("127.0.0.1") && (intIp <= IpToInt("127.255.255.255"))))
            {
                ipLocation.Country = "本机内部环回地址";
                ipLocation.Local   = "";
            }
            else
            {
                if ((((intIp >= IpToInt("0.0.0.0")) && (intIp <= IpToInt("2.255.255.255"))) ||
                     ((intIp >= IpToInt("64.0.0.0")) && (intIp <= IpToInt("126.255.255.255")))) ||
                    ((intIp >= IpToInt("58.0.0.0")) && (intIp <= IpToInt("60.255.255.255"))))
                {
                    ipLocation.Country = "网络保留地址";
                    ipLocation.Local   = "";
                }
            }
            long right = Count;
            long left  = 0L;
            long startIp;
            long endIpOff;
            int  countryFlag;

            while (left < (right - 1L))
            {
                long middle = (right + left) / 2L;
                startIp = GetStartIp(middle, out endIpOff);
                if (intIp == startIp)
                {
                    left = middle;
                    break;
                }
                if (intIp > startIp)
                {
                    left = middle;
                }
                else
                {
                    right = middle;
                }
            }
            startIp = GetStartIp(left, out endIpOff);
            long endIp = GetEndIp(endIpOff, out countryFlag);

            if ((startIp <= intIp) && (endIp >= intIp))
            {
                string local;
                ipLocation.Country = GetCountry(endIpOff, countryFlag, out local);
                ipLocation.Local   = local.Replace("(我们一定要解放台湾!!!)", "");
            }
            else
            {
                ipLocation.Country = "未知";
                ipLocation.Local   = "";
            }
            return(ipLocation);
        }
예제 #2
0
파일: IpLocator.cs 프로젝트: liumeifu/OSky
        /// <summary>
        /// 由IP地址查找对应的位置信息的字符串
        /// </summary>
        public string Query2(string ip)
        {
            IpLocation result = Query(ip);

            return((result.Country + result.Local).Replace("CZ88.NET", ""));
        }
예제 #3
0
파일: IpLocator.cs 프로젝트: liumeifu/OSky
 /// <summary>
 /// 由IP地址查找对应的位置信息
 /// </summary>
 /// <param name="ip"> 要查找的IP地址 </param>
 /// <returns> </returns>
 /// <exception cref="ArgumentException"></exception>
 public IpLocation Query(string ip)
 {
     if (ip == "::1")
     {
         ip = "127.0.0.1";
     }
     if (!_regex.Match(ip).Success)
     {
         throw new ArgumentException("IP格式错误");
     }
     IpLocation ipLocation = new IpLocation { Ip = ip };
     long intIp = IpToInt(ip);
     if ((intIp >= IpToInt("127.0.0.1") && (intIp <= IpToInt("127.255.255.255"))))
     {
         ipLocation.Country = "本机内部环回地址";
         ipLocation.Local = "";
     }
     else
     {
         if ((((intIp >= IpToInt("0.0.0.0")) && (intIp <= IpToInt("2.255.255.255"))) ||
             ((intIp >= IpToInt("64.0.0.0")) && (intIp <= IpToInt("126.255.255.255")))) ||
             ((intIp >= IpToInt("58.0.0.0")) && (intIp <= IpToInt("60.255.255.255"))))
         {
             ipLocation.Country = "网络保留地址";
             ipLocation.Local = "";
         }
     }
     long right = Count;
     long left = 0L;
     long startIp;
     long endIpOff;
     int countryFlag;
     while (left < (right - 1L))
     {
         long middle = (right + left) / 2L;
         startIp = GetStartIp(middle, out endIpOff);
         if (intIp == startIp)
         {
             left = middle;
             break;
         }
         if (intIp > startIp)
         {
             left = middle;
         }
         else
         {
             right = middle;
         }
     }
     startIp = GetStartIp(left, out endIpOff);
     long endIp = GetEndIp(endIpOff, out countryFlag);
     if ((startIp <= intIp) && (endIp >= intIp))
     {
         string local;
         ipLocation.Country = GetCountry(endIpOff, countryFlag, out local);
         ipLocation.Local = local.Replace("(我们一定要解放台湾!!!)", "");
     }
     else
     {
         ipLocation.Country = "未知";
         ipLocation.Local = "";
     }
     return ipLocation;
 }