标签归档:ASP

asp通过域名查IP

     最近有个工作,知道了域名,把ip导出来,大约800多条记录,一个一个查麻烦了。有没有其他方法能让asp通过域名查IP呢?

在网上搜索了一下,asp通过域名查ip需要安装一个TCPIP.DNS的组件。我下载了一个测试了一下,效率并不是很高。

一般查询域名的ip的方法是ping一下,得到一个ip。我们先用VBScript测试。

Function strCut(strContent,StartStr,EndStr,CutType) 
    Dim strHtml,S1,S2
    strHtml = strContent 
    On Error Resume Next 
    Select Case CutType
    Case 1 
        S1 = InStr(strHtml,StartStr) 
        S2 = InStr(S1,strHtml,EndStr)+Len(EndStr) 
    Case 2 
        S1 = InStr(strHtml,StartStr)+Len(StartStr) 
        S2 = InStr(S1,strHtml,EndStr) 
    End Select
    If Err Then 
        strCute = "0.0.0.0" 
        Err.Clear 
        Exit Function 
    Else
        strCut = Mid(strHtml,S1,S2-S1) 
    End If
End Function

Function getIP(Domain)
	Set objWShell=CreateObject("WScript.Shell")
	Set objCmd=objWShell.Exec("ping "&Domain)
	StrPResult=objCmd.StdOut.Readall()
	Set objCmd=nothing
	Set objWShell=nothing
	getIP=strCut(StrPResult,"[","]",2)   
End Function

startTme=timer
Wscript.echo getIP("www.baidu.com")
wscript.echo timer-startTme

不过效率很低哦,大约三秒钟的时间才能得到结果。通过域名查ip还有一个快速的方法,nslookup,我们修改一下上边的函数:


Function strCut(strContent)
	ipsta=1
	strLineArr=split(strContent,vbCrlf)
	for each strLine in strLineArr
		if instr(strLine,":")>0 then
			getArr=split(strLine,":")
			if LCase(getArr(0))="address" then
				ipsta=1
			end if
			if ipsta=1 then
				if LCase(getArr(0))="address" then
					strCut=split(Trim(getArr(1)),",")(0)
					exit function
				end if
			end if
		end if
	next
	strCut="err"
End Function

Function getIP(Domain)
	Set objWShell=CreateObject("WScript.Shell")
	Set objCmd=objWShell.Exec("nslookup "&Domain)
	StrPResult=objCmd.StdOut.Readall()
	Set objCmd=nothing
	Set objWShell=nothing
	getIP=strCut(StrPResult)
End Function


startTme=timer
Wscript.echo getIP("www.baidu.com")
wscript.echo timer-startTme

现在速度快了,0.3秒即可搞定。vbscript是解决了,那asp通过域名查ip还是不可以的,一个最大的问题是虚拟主机一般都不给执行asp脚本运行WScript.Shell的权限,所以虚拟主机用户可以不用考虑了,TCPIP.DNS这种空间商肯定是不给用的。第二个问题也是安全问题,自己用的服务器,一般都不给web用户访问系统目录的权限,asp访问nslookup.exe的权限一般都没有?解决方法就是修改一下相关文件的权限即可。

< %
Function strCut(strContent) 
	strLineArr=split(strContent,vbCrlf)
	for each strLine in strLineArr
		if instr(strLine,":")>0 then
			getArr=split(strLine,":")
			if LCase(getArr(0))="addresses" then
				strCut=split(Trim(getArr(1)),",")(0)
				exit function
			end if
		end if
	next
	strCut="err"
End Function

Function getIP(Domain)
	Set objWShell=Server.CreateObject("WScript.Shell")
	Set objCmd=objWShell.Exec(server.mappath("nslookup.exe")&" "&Domain)
	StrPResult=objCmd.StdOut.Readall()
	Set objCmd=nothing
	Set objWShell=nothing
	getIP=strCut(StrPResult)
End Function

response.write getIP("www.baidu.com")
%>

ASP直接使用表单名称变量调用GET提交的数据

当PHP.ini设置register_globals = On是,通过GET提交的数据可以直接使用表单名调用GET提交的数据。asp就不可以,我想到了asp的execute,也谢了一个脚本,还能过滤SQL注入字符串

<%
Dim myRegExp

set myRegExp=New RegExp
myRegExp.Pattern = "[^a-z0-9_]"
myRegExp.Global=True

for each Req in Request.Querystring
	ReqV=Request.Querystring(Req)
	if trim(ReqV)&lt;&gt;"" then
		ReqV=replace(ReqV,"""","""""")
		Req=myRegExp.Replace(Req,"")
		Execute(Req&"="""&ReqV&"""")
	end if
next

response.write a
%>

调用很简单。比如GET提交/get_Test.asp?a=111&b=222

则直接可以使用Response.write a,输出结果为111。简单吧~

再次感谢小秦(Q48080163)提出的bug

对某网站优化草案-为ASP网站添加缓存

本文只提供思路,程序代码在此就不方便发布了~
第一:每个程序代码都不样
第二:不能随便公布客户的代码~呵呵
如有类似需求,可联系QQ:1301425789

可以看到现在首页的执行时间已经是1.8秒以上了,如果访问量太大,有可能就会导致耗资源,加入缓存是最好的解决方法。我设置的数据库表如下:

Cache_id
Cache_key
Cache_Content
Cache_LastCreate
自动编号
缓存关键字
缓存内容
最后生成日期
 
设计缓存的时候,主要需要考虑以下两点:
 

1)     不经常改动部分缓存数据同步

保持缓存同步有两种方法:设置缓存刷新频率、实时更新

设置缓存刷新频率

<%
     缓存关键字:http://www.aaa.com/cp_view.asp?ID=68727
     更 新 频率:1天
     到 期 日期:最后生成日期+更 新 频率
    Sql:select Cache_Content from CacheTable where Cache_key=缓存关键字 and Cache_LaseCreate<到期日期
     没有找到记录:{
         将页面数据保存到数据库
select * from CacheTable where Cache_key=缓存关键字
没有记录{插入记录}有记录{更新生成日期,并保存记录}
     }找到记录:{
         直接输出
     }
%>
 
实时更新
     这种有点麻烦,但是是一个比较好的方案。唯一的缺点是保存的时候需要多次操作数据库。以 市场页为例:
给市场数据库添加一个最后更新日期
数据添加页面:凡是该分类下的所有页面更新,均更新最后更新日期。
最终显示页面:多表查询,如果当前市场最后更新日期<缓存日期,并且有缓存则直接输出缓存,否则创建缓存并输出。

2)     (经常改动不废)非静态的部分

这个比较简单,主要是会员登录,ASP脚本判断状态,输出JS更改页面的动态部分

ASP WEBZip – 猫七原创ASP压缩解压系统

1.下载地址

         http://www.miaoqiyuan.cn/products/webzip.rar

2.程序源码

        http://www.miaoqiyuan.cn/p/webzip-code

3.使用说明

         http://www.miaoqiyuan.cn/p/webzip-demo

4.未解决问题

       ADODB.Stream读取asp文件时,如果文件结尾为%>,则%后的>会被忽略掉,现在本人暂未解决这个问题,用户可以在以%>结尾的asp文件,请在后边添加一个空格或换行符,恢复后程序即可正常使用。

猫七原创ASP压缩解压系统 使用说明

1.下载&安装

       到http://www.miaoqiyuan.cn/products/webzip.rar,保存为webzip.rar以供备用。

2.压缩

       将webzip.rar中的webzip.asp、webzip.asp.webzip解压到要压缩的目录。在浏览器中访问[hostname]/[保存路径]/webzip.asp打开本工具,点击压缩,稍等片刻,即可打包完毕。

3.上传

     将webzip.asp、webzip.asp.webzip通过FTP或在线文件管理系统上传到您的站点目录。

4.解压

     在浏览器中访问[hostname]/[保存路径]/webzip.asp,选择解压。稍等片刻,您的整个站点将会在服务服务器上解压完毕。

    至此,您的整个站点即可正常使用了。

[Debug]
1.ADODB.Stream读取asp文件时,如果文件结尾为%>,则%后的>会被忽略掉,现在本人暂未解决这个问题,用户可以在以%>结尾的asp文件,请在后边添加一个空格或换行符,恢复后程序即可正常使用。

2.如果您在使用中发现出现某些问题,可直接致邮:mqycn@126.com

猫七原创ASP压缩解压系统(非调用WinRAR等软件)-WEBZip

猫七原创ASP压缩解压系统-WEBZip,原理即遍历当前目录的所有文件和文件夹,将结果保存到MDB数据库中。现在已经实现了ASP无需任何插件,仅用Access数据库。
全部代码如下:

<%
Server.ScriptTimeout=9999
Response.Buffer=false

Dim WEBZip_Path,WEBZip_Date,WEBZip_CMD,WEBZip_File
Dim WEBZip_FSO,WebZip_Conn,WEBZip_Rs,WEBZip_ADOStrem

'压缩相关
'================================================================
Function findFiles(p)
	savePath(p)
	for each s in p.subfolders
		findFiles(s)
	next
	for each f in p.files
		saveFile(f)
	next
End Function

Function savePath(p)
	If trim(replace(p,WEBZip_Path,""))="" Then Exit Function
	RunSqlOne("insert into [p]([p_na],[p_pa],[p_cn])values('"&p.name&"','"&replace(p,WEBZip_Path,"")&"',"&p.subfolders.count&")")
	echo "找到路径:"&p
End Function

Function saveFile(f)
	If instr(f,WEBZip_File)>0 Then Exit Function
	RunSqlOne("insert into [f]([f_na],[f_pa],[f_sz])values('"&f.name&"','"&replace(f,WEBZip_Path,"")&"',"&f.size&")")
	SaveFileContent(replace(f,WEBZip_Path,""))
	echo "压缩文件:"&f
End Function

'写入文件内容
Function SaveFileContent(f)
	fl=WEBZip_FSO.getfile(Server.Mappath(f))
	WEBZip_Rs.Open "select * from [f] where [f_pa]='"&f&"'",WEBZip_Conn,3,2
	With WEBZip_ADOStrem
		.Type = 1
		.Open
		.LoadFromFile fl
		WEBZip_Rs("f_co") = .Read
		.Close
	End With
	WEBZip_Rs.update
	WEBZip_Rs.Close
End Function

'解压缩相关
'================================================================
Function Expand()
	WEBZip_Rs.open "select * from [p] order by [p_id] asc",WEBZip_Conn,1,1
	Do While Not WEBZip_Rs.eof
		Call ExpandPath(WEBZip_Rs("p_pa"))
		WEBZip_Rs.MoveNext
	Loop
	WEBZip_Rs.Close
	
	WEBZip_Rs.open "select * from [f] order by [f_id] asc",WEBZip_Conn,1,1
	Do While Not WEBZip_Rs.eof
		if WEBZip_Rs("f_sz")< =1 then
			Call CreateFile(WEBZip_Rs("f_pa"))
		else
			Call ExpandFile(WEBZip_Rs("f_pa"),WEBZip_Rs("f_id"))
		end if
		WEBZip_Rs.MoveNext
	Loop
	WEBZip_Rs.Close
End Function

Function ExpandPath(p)
	p=Server.Mappath(p)
	If Not WEBZip_FSO.FolderExists(p) Then
		WEBZip_FSO.CreateFolder(p)
		echo "解压目录:"&p
	End if
End Function

Function ShowFile()
	id=Request.QueryString("id")
	if not isNumeric(id) or trim(id)="" then Response.end
	WEBZip_Rs.open "select [f_co],[f_sz] from [f] where [f_id]="&id,WEBZip_Conn,1,1
	if not WEBZip_Rs.eof then
		WEBZip_RsDB=WEBZip_Rs(0).GetChunk(WEBZip_Rs(1))
	End if
	WEBZip_Rs.Close
	Response.BinaryWrite WEBZip_RsDB
End Function

Function ExpandFile(f,id)
	fl=Server.Mappath(f)
	Set Http=Server.CreateObject("MSXML2.XMLHTTP")
	randomize
	Http.open "GET","http://"&Request.Servervariables("SERVER_NAME")&":"&Request.Servervariables("SERVER_PORT")&Request.Servervariables("SCRIPT_NAME")&"?cmd=show&id="&id&"&f="&now()&rnd&f,False
	Http.send()
	if Http.readystate<>4 then
		exit Function
	end if
	
	With WEBZip_ADOStrem
		.Type = 1
		.Mode = 3
		.Open
		.Write Http.ResponseBody
		.SaveToFile Server.Mappath(f)
		.Close
	End With
	echo "解压文件:"&f
End Function

Function CreateFile(f)
	fl=Server.Mappath(f)
	WEBZip_FSO.CreateTextFile(fl)
	echo "解压文件:"&f
End function

'菜单
'================================================================
Function ShowMenu()
	Response.write "&lt;input id=""status""  style=""width:640px;background:#FFF;border:none;"" readonly=""readonly""/>&lt;hr />"
	Call AddLink("压缩","tozip")
	Call AddLink("解压","unzip")
	Call AddLink("卸载[暂不支持]","uninstall")
End Function

Function AddLink(t,l)
	Response.write "&lt;a href=""?cmd="&CommandToQuery(l)&""">"&t&"&lt;/a> "
End Function

Function RunSqlOne(sql)
	WEBZip_Rs.Open sql,WebZip_Conn,3,2
End Function

sub echo(t)
	'Response.write t&vbCrlf
	Response.write "&lt;script>document.getElementById(""status"").value='"&replace(t,"\","\\")&"';&lt;/script>"
	'Response.flush
End Sub

'扩展命令
'	tozip 压缩
'	unzip 解压
'	即将支持
'		tozip -t fr			小文件模式
'		tozip -t mu -f 100 	多文件模式,指定-f为100,每次处理100个文件
'	扩展命令转换
'		tozip -t fr -f 100 < ==>  tozip&t=fr&f=100
Function CommandToQuery(c)
	CommandToQuery=replace(replace(c," -","&")," ","=")
End Function

Function QueryToCommand(q)
	QueryToCommand=replace(replace(q,"&"," -"),"="," ")
End Function

'初始化
'================================================================
'WEBZip 安装路径
WEBZip_File=Server.Mappath(Request.Servervariables("SCRIPT_NAME"))
WEBZip_Path=Server.Mappath("./")
WEBZip_Date=WEBZip_File&".webzip"
WEBZip_CMD=Request.QueryString("cmd")

set WEBZip_FSO=Server.CreateObject("Scripting.FileSystemObject")

set WebZip_Conn=Server.CreateObject("ADODB.Connection")
WebZip_Conn.Open "provider=microsoft.jet.oledb.4.0;data source="&WEBZip_Date
set WEBZip_Rs=Server.CreateObject("ADODB.Recordset")

set WEBZip_ADOStrem=Server.CreateObject("ADODB.Stream")

'初始化菜单
Select Case WEBZip_CMD
	Case "tozip"
		Call ShowMenu()
		Call findFiles(WEBZip_FSO.GetFolder(Server.Mappath("./")))
	Case "unzip"
		Call ShowMenu()
		Call Expand()
	Case "show"
		Call ShowFile()
	Case Else
		Call ShowMenu()
End Select
%>