Ask a questionAsk a question
 

Answer如何实现基于ip段的判断

  • Monday, December 15, 2008 6:28 AMViewFelicity Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    做了两个网站,一个中文的,一个日文的。。
      现在 我想根据两个国家的ip段来判断,
    是日本的ip段那么进入的是日文网站,如果是中国的ip段,
    进的就是中文网站,不知道怎么实现。
     或是有其他实现方式吗?

Answers

  • Tuesday, December 16, 2008 8:33 AM笨笨ONEMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer

    复制别人实现的代码,人家是城市的,换成国家也是一样的。

    1、数据库的连接文件一般的程序中都有(conn.asp 文件),我在这里就不写了。

    2、以下代码主要实现 “判断ip地址后跳转到相应页面” 也就是说根据用户的IP判断他所在的地区,转向相应的地区级页面;并不是为了 “禁用某个IP段的用户访问” 而设计的所以没用必要判断 用户是否加了代理等等。


    '以下是数据库部分

    1、建个名为表 IP 的表
    2、在在此表中建 5 个字段。
    ID : 编号 类型 :自动编号
    IP1:相关城市的IP段信息。 类型: 数字 ac需要(双精度)
    IP2:相关城市的IP段信息。 类型: 数字 ac需要(双精度)
    URL:跳转的页面URL 类型:TXT
    city:相关城市 类型:TXT

    列:

    比如北京的IP段是 : 1.1.0.0 -- 1.1.0.255

    ip1: 1*256*256*256+1*256*256+0*256+0 = 16842752

    ip2: 1*256*256*256+1*256*256+0*256+255 = 16843007


    ID IP1 IP2 URL city

    1 16842752 16843007 http://BJ.58.COM 北京

    '以下是程序部分

    Copy code
    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属于的城市
    set rs=Server.CreateObject("ADODB.Recordset")
    sql="select * from ip where ip1<="&tmp_userip&" and ip2>="&tmp_userip    
    rs.open sql,conn,1,1
    if rs.eof then
    response.redirect "index.asp"   ’如果没有转到 首页 ,也可以指定页面
    else
    response.redirect rs("url")       ’如果有转到指定页面
    end if
    rs.close
    set rs=nothin
    • Marked As Answer byViewFelicity Thursday, February 26, 2009 9:39 AM
    •  

All Replies

  • Monday, December 15, 2008 8:38 AM韦恩卑鄙 v-zhewg Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    更简单的办法是判断 浏览器 user_agent的语言 

  • Tuesday, December 16, 2008 3:12 AMJames.Ying Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

     

    一般我会用ip库,你可以用外面现有的,大概是dat文件吧,只要判断是否是日本的ip段,然后其他默认转到中文就好了,应该不是很难
  • Tuesday, December 16, 2008 5:08 AM孟宪会MVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    你可以到网上找一下ip端的数据库
    或者
    找ip与数字相互转换的函数
  • Tuesday, December 16, 2008 8:33 AM笨笨ONEMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer

    复制别人实现的代码,人家是城市的,换成国家也是一样的。

    1、数据库的连接文件一般的程序中都有(conn.asp 文件),我在这里就不写了。

    2、以下代码主要实现 “判断ip地址后跳转到相应页面” 也就是说根据用户的IP判断他所在的地区,转向相应的地区级页面;并不是为了 “禁用某个IP段的用户访问” 而设计的所以没用必要判断 用户是否加了代理等等。


    '以下是数据库部分

    1、建个名为表 IP 的表
    2、在在此表中建 5 个字段。
    ID : 编号 类型 :自动编号
    IP1:相关城市的IP段信息。 类型: 数字 ac需要(双精度)
    IP2:相关城市的IP段信息。 类型: 数字 ac需要(双精度)
    URL:跳转的页面URL 类型:TXT
    city:相关城市 类型:TXT

    列:

    比如北京的IP段是 : 1.1.0.0 -- 1.1.0.255

    ip1: 1*256*256*256+1*256*256+0*256+0 = 16842752

    ip2: 1*256*256*256+1*256*256+0*256+255 = 16843007


    ID IP1 IP2 URL city

    1 16842752 16843007 http://BJ.58.COM 北京

    '以下是程序部分

    Copy code
    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属于的城市
    set rs=Server.CreateObject("ADODB.Recordset")
    sql="select * from ip where ip1<="&tmp_userip&" and ip2>="&tmp_userip    
    rs.open sql,conn,1,1
    if rs.eof then
    response.redirect "index.asp"   ’如果没有转到 首页 ,也可以指定页面
    else
    response.redirect rs("url")       ’如果有转到指定页面
    end if
    rs.close
    set rs=nothin
    • Marked As Answer byViewFelicity Thursday, February 26, 2009 9:39 AM
    •  
  • Tuesday, December 16, 2008 2:54 PMGreatDinosaur Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    基本同笨笨ONE 的办法,千万不要用哪个dat的库,性能不行,楼主可以参考GeoIP.  他的数据库比较准

    http://www.maxmind.com/

     

    用它免费版的库,直接下载一个大的access导入到SQL中。one的方法基本没问题,有一点geoip他的数据库里ip就是ip的32位二进制换算整数值,直接使用IPAddress类对比即可,不用算。

     

    首先把整个数据库,大概也只有几万条记录,放在一个dataset里面,然后再把dataset放在一个cache["ip"]里面,使用where查询这个dataset,完全在内存中操作,性能很好,MVC的话可以写成一个filter。

  • Wednesday, December 17, 2008 12:40 AM孟宪会MVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    一般的做法不是根据IP来路进行判断的,是根据客户端的地区语言判断的。就是说,你不要将在日本境内的中国人显示成日文内容

    String[] userLang = Request.UserLanguages; 
    或者从Request.UserAgent属性或者
    Request.ServerVariables 属性 得到语言信息