如何实现基于ip段的判断
- 做了两个网站,一个中文的,一个日文的。。
现在 我想根据两个国家的ip段来判断,
是日本的ip段那么进入的是日文网站,如果是中国的ip段,
进的就是中文网站,不知道怎么实现。
或是有其他实现方式吗?
Respostas
复制别人实现的代码,人家是城市的,换成国家也是一样的。
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- Marcado como RespostaViewFelicity quinta-feira, 26 de fevereiro de 2009 9:39
Todas as Respostas
更简单的办法是判断 浏览器 user_agent的语言
一般我会用ip库,你可以用外面现有的,大概是dat文件吧,只要判断是否是日本的ip段,然后其他默认转到中文就好了,应该不是很难- 你可以到网上找一下ip端的数据库
或者
找ip与数字相互转换的函数 复制别人实现的代码,人家是城市的,换成国家也是一样的。
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- Marcado como RespostaViewFelicity quinta-feira, 26 de fevereiro de 2009 9:39
基本同笨笨ONE 的办法,千万不要用哪个dat的库,性能不行,楼主可以参考GeoIP. 他的数据库比较准
用它免费版的库,直接下载一个大的access导入到SQL中。one的方法基本没问题,有一点geoip他的数据库里ip就是ip的32位二进制换算整数值,直接使用IPAddress类对比即可,不用算。
首先把整个数据库,大概也只有几万条记录,放在一个dataset里面,然后再把dataset放在一个cache["ip"]里面,使用where查询这个dataset,完全在内存中操作,性能很好,MVC的话可以写成一个filter。
- 一般的做法不是根据IP来路进行判断的,是根据客户端的地区语言判断的。就是说,你不要将在日本境内的中国人显示成日文内容
String[] userLang = Request.UserLanguages;
或者从Request.UserAgent属性或者 Request.ServerVariables 属性 得到语言信息

