如何得到访问者ip判断所在城市?高手帮忙!!!

解决方案 »

  1.   

    网上不是dat格式的ip数据库吗?楼主可以通过Java读取里面的文件来判断,或者把文件里的数据导入到数据库中,通过数据库来判断
      

  2.   

    自己建立IP库,取得IP地址,在里面检索属于哪个城市得IP段,返回城市名称就可以了   
        
      如果你只想得到城市名称得话   ,你可以借助别人得IP库,否则就得自己建
      

  3.   

    获取客户端IP,用 request.UserHostAddress 
    所在的城市,就要使用IP库了。可以在网上CZ88IPScaner这个类。是别人写好的一个。
      

  4.   

    我下了一个QQWry.Dat的文件,但具体怎么添加到数据库中去,不知到该怎么操作?
      

  5.   

    先去下一个最新的纯真IP数据库,然后按如下操作:
    1.运行纯真QQIP数据库里带的ShowIP.exe,点解压,输入文件名,比如IP.txt,确定,就得到一个TXT文件。 2.打开ACCESS,工具-自定义,命令选项卡,把导入选项拖动到上面的工具栏。 3.建库,建一个表,四个字段 Startip 类型:文本 (相关城市的IP段信息)
    Endip 类型:文本 (相关城市的IP段信息)
    Country 类型:文本 (相关城市名称)
    ReUrl 类型:文本 (你想要跳转的城市路径如:北京 http://bj.abc.com)4.点导入按钮,文件类型选文本文件,找到刚才导出的IP.txt文件,导入到刚才建的表里~运算将真实IP转换为数字,比如北京的IP段是 : 1.1.0.0 -- 1.1.0.255 Startip: 1*256*256*256+1*256*256+0*256+0 = 16842752 (这个数字才是最终要放到数据库里)Endip: 1*256*256*256+1*256*256+0*256+255 = 16843007 (这个数字才是最终要放到数据库里的)
     最后就可以利用SQL语句查询数据库中的表来完成从ip地址到城市名的转换了。看到一个解决方法,但我看不明白
    运算将真实IP转换为数字,比如北京的IP段是 : 1.1.0.0 -- 1.1.0.255 Startip: 1*256*256*256+1*256*256+0*256+0 = 16842752 (这个数字才是最终要放到数据库里)Endip: 1*256*256*256+1*256*256+0*256+255 = 16843007 (这个数字才是最终要放到数据库里的)是什么意思????
      

  6.   

    "运算将真实IP转换为数字,比如北京的IP段是 : 1.1.0.0 -- 1.1.0.255 Startip: 1*256*256*256+1*256*256+0*256+0 = 16842752 (这个数字才是最终要放到数据库里) Endip: 1*256*256*256+1*256*256+0*256+255 = 16843007 (这个数字才是最终要放到数据库里的)是什么意思???? "
    这个方式只是数据库记录ip域方式,楼主没有必要深究(不好意思刚才吃饭去了)
      

  7.   

    我看到他是这么写的:
    user_ip = Request.ServerVariables("REMOTE_ADDR") ''取得访问者IP
    userip_ary=split(user_ip,".")
    tmp_userip=userip_ary(0)*256*256*256+userip_ary(1)*256*256+userip_ary(2)*256+userip_ary(3) '' 按规定转换IP为数字
    也就是说先将客户端ip通过计算成为上面的所谓域,然后再比较,那这个表达式的规律从何而来?
      

  8.   


    /**
     *
     * @author MoXie
     */
    public class IpConver {    private long ipLong = 0L;
        private String ipString = new String();    public long ip2longFor4(String strIp) {
            String[] ipStrList = strIp.split("\\.");        int i = 3;
            int cI = 0;
            /* 6 << 2 = 24,4 << 2 = 16,2 << 2 = 8 */
            //ip[0]*256*256*256+ip[1]*256*256+ip[2]*256+ip[3] 24 16 8;
            String ip;
            for (int j = 0; j < ipStrList.length; j++) {
                ip = ipStrList[j];
    //        for (String ip : ipStrList) {
                cI = i << 3;
                i--;
                ipLong += Long.valueOf(ip).intValue() << cI;
            }
            return getIpLong();
        }    public String long2ipFor4(long longIp) {
            // Valid range: 0.0.0.0 -> 255.255.255.255
            StringBuffer strIp = new StringBuffer();
            int cI = 0;
            if (longIp > 0L && longIp < 4294967295L) {
                for (int i = 3; i >= 0; i--) {
                    cI = i << 3;
                    strIp.append((longIp >> cI) & 255);
                    if (i > 0) {
                        strIp.append(".");
                    }
                }
            }
            return strIp.toString();
        }    public long getIpLong() {
            return ipLong;
        }    public String getIpString() {
            return ipString;
        }
    }
    Php中就是 ip2long long2ip了。
    举个例子吧:
    Ip 库内:
    127.0.0.1,127.0.0.5,A城市
    127.0.0.9,127.0.0.20,B城市
    为了高效我们将Ip转化为Long型存储,即:
    355,359,A城市
    363,374,A城市
    客户Ip:
    120.0.0.3 那么将它转化为Long即是 357
    在 355,359 之间,所以这个客户来自A城市。
    Ps.数字纯属模拟,非正常转换值。转换代码如上。
      

  9.   


    使用IP转城市区数据库就可以了官方下载地址:http://www.iptocity.cn/bbs/viewthread.php?tid=1&extra=page%3D1