ASP教程之ASP读取单纯IP库代码
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全数据库利用的单纯数据库QQwry.Dat,6兆摆布。数据库下载地点:南方网通|华东电信|主动选择线路
一向想做带水印的IP署名图来着。周末闲着就下手了。ASP这方面的材料良多,就未几说了。只把算法贴上。.NET关于这方面的文章很少,我归正搜到。.Net的如今先说说算法,过几天把做成水印图的教程发一下。
ASP版的,找到两种算法,一种是搜到的,另外一种是数据库附带的一份申明(作者很刻薄)。
两种算法都贴上:
第一种算法:
援用:
functioncip(sip)
tip=cstr(sip)
sip1=left(tip,cint(instr(tip,".")-1))
tip=mid(tip,cint(instr(tip,".")+1))
sip2=left(tip,cint(instr(tip,".")-1))
tip=mid(tip,cint(instr(tip,".")+1))
sip3=left(tip,cint(instr(tip,".")-1))
sip4=mid(tip,cint(instr(tip,".")+1))
ifcint(sip1)<128then
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
else
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)-4294967296
endif
endfunction这个算法,有点乱。没看懂甚么意义。出格是,
援用:
ifcint(sip1)<128then
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
else
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)-4294967296
endif经测试,无需判别。即
cip=cint(sip1)*256*256*256+cint(sip2)*256*256+cint(sip3)*256+cint(sip4)
就能够得出准确的值。
第二种算法,这个对照复杂和简便,算法一览无余,傻子城市选这个,给正文了一下:
援用:
FunctioncacuIp(sIP)
OnErrorResumeNext
DimsrIp,aIp
srIp=0
aIp=Split(sIP,".")截取字符串,失掉数组aIp到aIp
IfUBound(aIP)3Then假如不是准确的IP
cacuIP=0前往0
ExitFunction加入函数
EndIf
Fori=0To3
srIp=srIp+(CInt(aIP(i))*(256^(3-i)))每一个数乘上256的3-i次幂,再把值相加
Next
cacuIp=srIp-1最初再减往1,就失掉单纯数据库里那看不懂的一堆数了
IfErrThencacuIp=0
EndFunction复杂了然,偶喜好~
OK,上面换成.NET的算法.
援用:
voidciker_ip(stringIP)
{
System.Int64ip0=0;//64位
string[]ip_array=IP.Split(newchar[]{.},StringSplitOptions.RemoveEmptyEntries);//同ASP
for(inti=0;i<=3;i++)
{
ip0=ip0+Convert.ToInt64(ip_array)*Convert.ToInt64(Math.Pow(256,3-i));//64位
}
ip0=ip0-1;
}OK,到此,.NET算法停止了.把.NET全体代码送上.
Web.config:
援用:
<appSettings>
<addkey="access"value="Ciker_IP.mdb"/>
<connectionStrings/>IP.ASPX.CS:
增加上面的定名空间:
援用:
usingSystem.Data.OleDb;
usingSystem.Text;
protectedvoidPage_Load(objectsender,EventArgse)
{
ciker_ip(Request.ServerVariables["Remote_Addr"].ToString());
}
voidciker_ip(stringIP)
{
System.Int64ip0=0;
string[]ip_array=IP.Split(newchar[]{.},StringSplitOptions.RemoveEmptyEntries);
for(inti=0;i<=3;i++)
{
ip0=ip0+Convert.ToInt64(ip_array)*Convert.ToInt64(Math.Pow(256,3-i));
}
ip0=ip0-1;
stringstrConnection="Provider=Microsoft.Jet.Oledb.4.0;DataSource="+Server.MapPath(ConfigurationSettings.AppSettings["access"]);
OleDbConnectionconn=newOleDbConnection(strConnection);
OleDbCommandcmd=conn.CreateCommand();
cmd.CommandText="SELECTpos,DetailFROMipwhereStartIP<="+ip0+"andEndIP>="+ip0;
conn.Open();
OleDbDataReaderdr=cmd.ExecuteReader();
while(dr.Read())
{
Response.Write("你丫的IP:"+IP+"<br/>");
Response.Write("IP编码:"+ip0+"<br/>");
Response.Write("区域:"+dr.ToString()+""+dr.ToString());
}
dr.Close();
conn.Close();
}asp可以使用微软的activeX使得网页功能无比强大,不过安全性也较差,而且是基于的windows服务器,所以性能稳定性也一般 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名") 以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。 最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
页:
[1]