ASP判断IP的来源是电信还是网通
发布时间:2011/6/4 10:28 不多废话,直接开始说一种超快的算法吧.既然要极快,莫过于o(1)的复杂度,所以开辟一巨大的缓冲区,用经典的空间换时间,通过查表一步即可判定.那如何定义表的大小,还有key?先从CNC.txt这个文件看起.
(http://www.etherdream.com/FunnyScript/IPRange/CNC.txt)
这个文件是中国网通的路由表.仔细观察下,不难发现掩码位数最高不超过24(即255.255.255.0).事实上24位的掩码是非常至少,毕竟一个网通的网段里只划分了256个ip,已是相当的少了.既然掩码位数最多只有24,所以ip的最后一位可以忽略不计,而ip的前3位共有256^3(=16M)的组合.所以将ip的前3位作为key,16M的表长度,正好定义出ip对应网段的表.可以形象如下表示:
123.0.0.0/24 => Table[123.0.0] = TRUE
202.0.0.0/16 => Table[202.0.0] = TRUE
Table[202.0.1] = TRUE
...
Table[202.0.255] = TRUE
检测的时候取IP前3位,检测表中对应是否为TRUE即可判断出此ip的类型.事实上,本例中ip只有电信和网通两种状态(非网通网段都当作电信),因此只需1bit即可保存每个记录.这时表占用的内存只需16M/8=2M.下面就用ASP来实现这功能.
首先将路由表转化成一个2M大小的缓存表.考虑到ASP的运行速度,这里事先用c程序直接处理,然后保存为一个2M的二进制文件.ASP通过ADBDO.Stream读取数据流,并缓存在Appliction集合中.所谓的数据流其实也就是个Byte()变量,可以通过MidB,AscB这类二进制函数来处理.
初始化函数:
Sub Init()
If LenB(Application("cnc")) Then
Exit Sub
End If
With Server.CreateObject("ADODB.Stream")
.Type = 1
.Open
.LoadFromFile Server.MapPath("CNC.dat")
Application("cnc") = .Read
.Close
End With
End Sub
通过Appliction集合的缓存,就不必每次都读取文件.2M大小的内存也是可以接受的.接着就是分析IP地址,将其前3位转换成一个数字,因为这里每个记录是按位(bit)保存的,所以还要整除8来对应到Byte()的位置.最后通过Mod运算对应到具体字节的具体bit上.听着有些复杂,不过实现起来确是相当的简单:
Function IPIsCNC(IP)
Dim arr, val
Dim c
arr = Split(IP, ".")
val = CLng(arr(0)) * 65536 + CLng(arr(1)) * 256 + CLng(arr(2))
c = AscB(MidB(Application("cnc"), val \ 8 + 1, 1))
IPIsCNC = _
(c And 2^(val Mod 8)) <> 0
End Function
IPIsCNC(IP),返回IP地址是否为网通.
到此关键的两个函数就大功告成了,接着测试:
Sub Main()
On Error Resume Next
Init()
If Err Then
Response.Write "系统错误: " & Err.Description
Exit Sub
End If
Dim IP
IP = Request.ServerVariables("REMOTE_ADDR")
If IPIsCNC(IP) Then
Response.Write IP & "属于网通IP"
Else
Response.Write IP & "属于电信IP"
End If
End Sub
Main()
考虑到Init函数需要文件的读取,所以添加了错误捕捉.不过通常情况下IPIsCNC是不会错误的,因为REMOTE_ADDR返回的必然是个正确格式的IP.
每当访问ASP时,除了第一次需加载文件外,其余时候只需三四行代码既可以判定,真正实现了空间换时间.
关于banner设计的话题相信之前已经有很多设计师发表过自己的经
于background不必多做说明了,如果不了解的可以单独论坛发帖。css
这里做了一个基于HTML5和CSS3的登录表单。实例代码使用到HTML5提供
前阵子做了个css3文字效果,涉及css3投影,渐变,蒙版,伪类等常识
说明:因为屏幕分辨率不同,想实现浏览器中的一个层随浏览器宽度高
你也许已经意识到,你可以通过指定每一键接的不同风格以建立C
再点选Filetype为.cpp,打开说话属性调解对话框,在使用CCS3.3写代
HTML教程如需学习更多有关HTML的内容,请阅读大家的HTML教程。如需
W3C是什么?W3C指万维网联盟(WorldWideWebConsortium)W3C创建于
网站主机的类型有:免费主机、虚拟(分享的)主机或独享主机。免费
一.影响PR的因素影响网站PR最主要的因素是网站的外部链接.当你的网
建网站的投入可是很大的。首先是申请免费个人主页空间(当然也可以
一、网站制作的主题 这些计划中规划好网站的主题。为网站创建一
Intranet、Internet服务器具有相同的名称,运行原理与操作系统相似
很多朋友问我,如何制作网页,类似这样的问题很多。大家这里就再次
网页听起来似乎是一个很难懂的概念,极其抽象,看得见摸不着。但是
写在前面的话:大家不要把那些挂黑页挂马的黑客想得太利害了,利害的
!DOCTYPEhtmlPUBLIC-//W3C//DTDXHTML1.0Transitional//ENhttp://w
诸如之类的符号在HTML中拥有特殊的含义,所以在文本中使用它们。为
您是否有过这样的经历,当你看到一个很棒的站点,你会很想知道开发