[会员中心]  [发布文章][发布软件]  [中文繁體] 
 文章·资料  电脑软件  手机软件  网站源码
   本 站 搜 索
[选项]
   推 荐 文 章       More...
华硕易电脑(ASUS Eee PC 1025C)驱动程序(Windows XP)安装参考(图) 华硕易电脑(ASUS Eee PC 1025C..
先来段开场白:为了外出携带方便..
Acronis True Image 使用说明 Acronis True Image 使用说明
  一款可以在Windows下使用..
Norton Ghost 使用详解 Norton Ghost 使用详解
一、分区备份   使用Ghost..
   阅 读 排 行
Windows 系统安装或备份时 ISO,GHO,WIM,ESD,PMF 都是什么文件类型 Windows 系统安装或备份时 ISO,GH..
【ISO 文件】 ISO 文件其实就..
使用“自动点击器”APP 在抖音直播间自动点赞 使用“自动点击器”APP 在抖音直..
看过抖音直播的朋友都知道,进入..
OPPO 手机的锁屏时间设置成横向显示 OPPO 手机的锁屏时间设置成横向..
第一次使用 OPPO 手机,桌面和锁..
电脑机箱(主板)前面板 USB 数据线的接线参考(图) 电脑机箱(主板)前面板 USB 数据..
  一、概述   因为每个 US..
抖音直播录屏的草稿保存位置 抖音直播录屏的草稿保存位置
抖音直播录屏,保存为“草稿”后,..
微信收到 flv 格式视频,如何播放? 微信收到 flv 格式视频,如何播放?
  微信上收到一个 flv 格式视频..
TrustAsia/DigiCert/Let s Encrypt 的免费 SSL 证书,多款网页浏览器都无法正常打开 TrustAsia/DigiCert/Let s Encryp..
云服务器安装了 Windows Server 2..
三星打印机(SCX-4521)提示“墨粉不足”设置 三星打印机(SCX-4521)提示“墨粉..
  三星打印机(SCX-4521)在添加..
文 章 信 息
用ASP判断某IP是否属于某网段的另类算法
评论()][留言][收藏
[文章分类:电脑·手机·网络 / 网站设计·开发·优化][阅读选项
    有时候我们需要判断某一个IP地址是否属于一个网段,以决定该用户能否访问系统。
    比如用户登录的IP是218.6.7.7,而我们的程序必须判断他是否属于218.6.0.0/16这个网段(其中/16是新的子网掩码的表示方式,相当于255.255.0.0)。
    要实现这样的功能,现在流行的算法是将218.6.0.0和218.6.7.7按256进制换算成10进制并进行比较得出,如先计算出218.6.0.0和218.6.255.255的十进制:218×256×256×256+6×256×256=3657826304,218×256×256×256+6×256×256+255×256×256+255=3657891839。再计算出218.6.7.7的十进:218×256×256×256+6×256×256+7×256+7=3657828103,最后再比较3657828103是否大于等于3657826304和小于等于3657891839。但明显有一个问题,计算量非常多,值非常大,如果IP地址是61开头的还好,如果是218开头的,这将会造成数据溢出而出错。
其实比较IP是否属于某一网段,最好的方式就是将IP与网段分别转为32位二进制,再比较他们的网络部分是否相同就可以了.asp本身不具备位运行功能,所以要实现这个只有我们手工实现,具体如下: 
’将十进制转为二进制字符串
function dec2bin(octNumber)
vara=octNumber
do 
dec2bin=cstr(vara mod 2) & dec2bin
vara=vara \ 2
loop until vara=0
end function

’将二进制字符串填充为8位
function pad(str)
pad=right("00000000" & str,8)
end function

’判断是否是一个IP地址
function isIp(ipadd)
isIp=false
set oReg=new RegExp
oReg.IgnoreCase=true
oReg.global=true
oReg.Pattern="(\d{1,4}\.\d{1,4}\.\d{1,4}\.\d{1,4})|(\d{1,4}\.\d{1,4}\.\d{1,4}\.\d{1,4}\/\d{1,2})"
if oReg.test(ipadd) then isIp=true
set oReg=nothing
end function

’其中UserIP是我们要检测的IP
’NetIP是要检测的网段或某个IP,用xxx.xxx.xxx.xxx/N来表示网段,其中N表示子网掩码位数 
’注,该程序是环球万维原创程序,所以如果您要转载,请保留出处信息,谢谢.
’程序设计:环球万维,专业提供域名注册,虚拟主机服务
’网址:http://www.netInter.cn
’以上信息与文章正文是不可分割的一部分,所以如果您要转载本文章,您必须保留以上信息.

Function check_ip(UserIp,NetIP)
currentip=UserIp
collection_ips=split(iplist,",") ’将网络按点分割成4段
check_ip=false ’初始函数值,false假设IP不在这网段
NetIP=trim(NetIP)
slashPos=inStr(NetIP,"/")
if slashPos=0 then ’网段没含有/符号,他只是一个IP,所以比较比个字符串是否相同就可以了
if NetIP=currentip then
check_ip=true ’check_ip=true表示IP相等
exit function
end if
else
netRang=mid(NetIP,slashPos+1) ’得到/后边的数字
if not isNumeric(netRang) then ’/后边不是数字,格式不正确
exit function
end if
netRang=cint(netRang) ’将字符转为数字
if netRang>31 then
exit function ’/后的数字不能超过32位
end if
ipsets=split(currentip,".") ’将用户IP按点分成四段

C_IP_BIN=pad(dec2bin(ipsets(0))) & pad(dec2bin(ipsets(1))) & pad(dec2bin(ipsets(2))) & pad(dec2bin(ipsets(3)))
’上边这行是将用户IP地址手工转换为对应的一个32个字符长的二进制
ipsets=split(NetIP,".") ’按上边的过程将网段IP同样转为32个字符长的二进制
sPos=instr(ipsets(3),"/") ’最后一点格式应该是 数字/数字
if sPos=0 then
exit function
end if
ipsets(3)=left(ipsets(3),sPos-1) ’得到最后一段/前边的数字
S_IP_BIN=pad(dec2bin(ipsets(0))) & pad(dec2bin(ipsets(1))) & pad(dec2bin(ipsets(2))) & pad(dec2bin(ipsets(3)))
’将其转换为32个字符长的二进制
if left(C_IP_BIN,netRang) = left(S_IP_BIN,netRang) then ’比较网段络是否相同就可以判断用户IP否属于某个网段了
check_ip=true
end if
end if
end function

应用举例:

要判断61.139.1.1是否在61.139.0.0/16 (255.255.0.0)这个网段
只需要简单的使用这个函数就可以了,如:

if check_ip("61.139.1.1","61.139.0.0/16") then
Response.write "同一网段"
else
Response.write "不是同一网段"
end if

文章作者:未知  更新日期:2006-09-07
[文章浏览:][打印文章][发送文章
相关文章
·用ASP来发送邮件2005-12-17
·用ASP编写下载网页中所有资源的程序2005-12-02
·用ASP判断链接是否有效2005-12-12
·对学习,使用ASP的做网站的人的一点建议2006-05-13
·利用ASP程序来使用JMail发邮件的例子2006-05-22
·用ASP的Jmail发邮件2006-05-22
·用ASP 按修改时间读取文件夹中文件并排序2008-03-07
·利用ASP小偷和Google实现在线翻译功能的代码2009-07-07
阅读说明
·本站大部分文章转载于网络,如有侵权请留言告知,本站即做删除处理。
·本站法律法规类文章转载自[中国政府网(www.org.cn)],相关法律法规如有修订,请浏览[中国政府网]网站。
·本站转载的文章,不为其有效性,实效性,安全性,可用性等做保证。
·如果有什么问题,或者意见建议,请联系[网站管理员]
  原“浪人文章”和“浪人下载”网站已合并为“老若尔文章软件站”,域名:https://lre.cn
  本站使用【啊估文章软件站】网站系统    网站管理员留言簿〗〖捐助     闽ICP备08009617号