现在我们要求了,通过IP来判断当今是访问机器所在的位置,我现在可以通过了纯真IP库得到了IP和所在地址了,但是他不能够和我数据库里面得城市相匹配.就比如纯真取出来得是重庆市铁通,但是我的数据库对应的是重庆市或者重庆,请问各位有什么好的解决办法没有.

解决方案 »

  1.   

     #region IP地址转换成Int数据
            /// <summary>
            /// IP地址转换成Int数据
            /// </summary>
            /// <param name="ip"></param>
            /// <returns></returns>
            public  long IpToInt(string ip)
            {
                char[] dot = new char[] { '.' };
                string[] ipArr = ip.Split(dot);
                if (ipArr.Length == 3)
                    ip = ip + ".0";
                ipArr = ip.Split(dot);            long ip_Int = 0;
                long p1 = long.Parse(ipArr[0]) * 256 * 256 * 256;
                long p2 = long.Parse(ipArr[1]) * 256 * 256;
                long p3 = long.Parse(ipArr[2]) * 256;
                long p4 = long.Parse(ipArr[3]);
                ip_Int = p1 + p2 + p3 + p4;
                return ip_Int;
            }
            #endregion        #region int转换成IP
            /// <summary>
            /// int转换成IP
            /// </summary>
            /// <param name="ip_Int"></param>
            /// <returns></returns>
            public string IntToIP(long ip_Int)
            {
                long seg1 = (ip_Int & 0xff000000) >> 24;
                if (seg1 < 0)
                    seg1 += 0x100;
                long seg2 = (ip_Int & 0x00ff0000) >> 16;
                if (seg2 < 0)
                    seg2 += 0x100;
                long seg3 = (ip_Int & 0x0000ff00) >> 8;
                if (seg3 < 0)
                    seg3 += 0x100;
                long seg4 = (ip_Int & 0x000000ff);
                if (seg4 < 0)
                    seg4 += 0x100;
                string ip = seg1.ToString() + "." + seg2.ToString() + "." + seg3.ToString() + "." + seg4.ToString();            return ip;
            }
            #endregion        #region 获取起始IP范围
            /// <summary>
            /// 获取起始IP范围
            /// </summary>
            /// <param name="recNO"></param>
            /// <returns></returns>
            public long GetStartIp(long recNO)
            {
                long offSet = firstStartIp + recNO * 7;
                //objfs.Seek(offSet,SeekOrigin.Begin);
                objfs.Position = offSet;
                byte[] buff = new Byte[7];
                objfs.Read(buff, 0, 7);            endIpOff = Convert.ToInt64(buff[4].ToString()) + Convert.ToInt64(buff[5].ToString()) * 256 + Convert.ToInt64(buff[6].ToString()) * 256 * 256;
                startIp = Convert.ToInt64(buff[0].ToString()) + Convert.ToInt64(buff[1].ToString()) * 256 + Convert.ToInt64(buff[2].ToString()) * 256 * 256 + Convert.ToInt64(buff[3].ToString()) * 256 * 256 * 256;
                return startIp;
            }
            #endregion在找一个IP库
      

  2.   

    用split分割一下纯真一般返回的结果格式如辽宁省大连市你把这个字符串分割得到大连就可以了
      

  3.   

    split使用什么作为分割标签,比如空格或者"."等,如果市用空格分隔开了,也只能获得大连市,而且他里面不光市有大连市也有可能是大连大学,大连什么什么医院所以,你这样的方法好像不行哦.
      

  4.   

    如果用split 就看了本新数据库细分的要求 如果只到市就好办了 把纯真ip库的地址split出来