Smeagol's blog

Month: 六月 2008

用asp实现ping(转载+翻译+原创)

This article presents a simple way to ping an address and get the results of the ping using ASP. The idea was supplied by Bart Silverstein.

这是介绍用asp来ping一个域名并获得结果的文章。作者是:Bart Silverstein。

First, a .BAT file needs to be created that will be run from the Active Server Page. Let’s call this file DoPing.BAT. It will contain only one statement, which will ping a passed in IP address. Here is the code for DoPing.BAT:

首先,我们需要建立一个.bat文件,然后从asp里运行它。我们给这个bat文件取名为doping。它只包含一个语句。我们要传递2个参数给它。一个是域名,一个是输出结果的文件。下面就是这个文件的代码:
ping -a %1 > d:\\INetPub\\cgi-bin\\%2.txt

This will, if you can’t tell, ping the address passed in as the first command line argument (%1), and redirect the results to a text file named by the second command line argument (%2). Now, let’s look how we would call this from an ASP file:

这里有两个参数需要传递,一个是%1,他代表了ping的地址,可以是域名或者ip。一个是%2,代表了目标文件的文件名。现在我们来看看这个asp文件是怎么写的。

<%

Set FileSys = Server.CreateObject(“Scripting.FileSystemObject”)
FileName = FileSys.GetTempName

Set WShShell = Server.CreateObject(“WScript.Shell”)

IP = “204.123.54.1” ‘ or whatever you want to ping
RetCode = WShShell.Run(“d:\\Inetpub\\cgi-bin\\DoPing.bat ” & IP & ” ” & FileName, 1, True)

if RetCode = 0 Then

‘There were no errors

else

Response.Redirect “PingErrors.htm”

end if

Set TextFile = FileSys.OpenTextFile(“d:\\InetPub\\cgi-bin\\” & FileName & “.txt”, 1)
TextBuffer = TextFile.ReadAll

For i = 1 to Len(TextBuffer)

If Mid(TextBuffer,i,1) = chr(13) Then

Response.Write(“<BR>”)

else

Response.Write(Mid(TextBuffer,i,1))

end if

Next

TextFile.Close

FileSys.DeleteFile “d:\\Inetpub\\cgi-bin\\” & FileName & “.txt”

%>
Before you go hog wild and implement this code or use similar techniques on your site, there are a few things you should be wary of. From a secutiry standpoint, this is really dangerous, for any time you let someone run an application on your server there is always the potential that it will come back to haunt you. One suggestion to lessen the threat: make a separate folder with no script or execute priviledges, and have your DoPing.bat output its results to that folder.

 当你要将这些代码插入你的网页时,有几个地方是需要注意的。一个是安全。wscript.shell是一个很危险的组件。还有一个建议就是,建一个特殊的文件夹,取消它的可执行权限。应用程序保护选”无”,让它无法执行脚本。然后将doping.bat的输入结果放在这个文件夹里。

I hope this article was informative an interesting. Happy Programming!

(翻译结束)

给出我修改后的程序。

这里要说的是,当asp调用cmd命令时,其执行的页面本身不会等待ping命令执行完成。他们是异步的。也就是说,如果ping的时候超时,需要一段时间ping命令才结束。而asp页面已经在读取.txt文件的内容了。但这时.txt还没有生成。这样就会出现错误。
而我要实现的是群ping的功能。我把程序改成两个页面分别执行。

一个是ping.asp:

<%
const ForReading = 1
dim f,fso
Set fso = server.CreateObject(“Scripting.FileSystemObject”)
Set f = fso.OpenTextFile(server.Mappath(“domain.txt”),ForReading)
alltext = f.readall
alltext=replace(alltext,chr(13),””)
dim myarr
myarr=split(alltext,chr(10))
Set WShShell = Server.CreateObject(“WScript.Shell”)
Set FileSys = Server.CreateObject(“Scripting.FileSystemObject”)
for i = 0 to ubound(myarr)
 ‘ or whatever you want to ping
 RetCode = WShShell.Run(“D:\\ping\\doping.bat ” & “www.” & myarr(i) & ” ” & myarr(i))

 if RetCode = 0 Then

‘There were no errors
‘ response.write “运行成功”

 else

 Response.Redirect “PingErrors.htm”
 
 end if

next

response.write “运行完成”
%>
程序写的不是很好啊,呵呵,不过功能是有的。。。。

domain.txt文件里是要ping的域名

格式是要每个域名一行。就行。

执行这个页面时可以看到系统进程里多了很多的cmd.exe,等这些进程都消失,说明都ping完了。

我自己的机器一次只能ping 25个域名左右。ping多了会出现ping应用程序初始化失败。(高手帮忙解决啊~呵呵)

下面只要用get.asp读取刚才ping完生成的.txt文件就可以了

<%
const ForReading = 1
dim f,fso
Set fso = server.CreateObject(“Scripting.FileSystemObject”)
Set f = fso.OpenTextFile(server.Mappath(“domain.txt”),ForReading)
alltext = f.readall
alltext=replace(alltext,chr(13),””)
dim myarr
myarr=split(alltext,chr(10))
Set WShShell = Server.CreateObject(“WScript.Shell”)
Set FileSys = Server.CreateObject(“Scripting.FileSystemObject”)
for i = 0 to ubound(myarr)

 Set TextFile = FileSys.OpenTextFile(“d:\\ping\\” & myarr(i) & “.txt”, 1)

 TextBuffer = TextFile.ReadAll
 begin= instr(textbuffer,”[“)
 if begin = false then
 response.write chr(13)
 textfile.close
 else
 iresule = Mid(textbuffer,begin+1,instr(textbuffer,”]”)-begin-1)
 TextFile.Close
 response.write iresule & chr(13)
 response.flush
 end if

next
%>

公司里有很多域名要ping,所以想了个土方法。呵呵。起码手工的部分减少了很多。不过还是要等待第一个文件把域名都ping完,这里需要点时间。如果程序能自动延时,自动判断是否ping完了。这样就更好了。可惜本人才疏学浅,只能写到这种地步了。

Serv-u的安全配置

勾选general下面的Block “FTP_bounce”attack and FXP。这个可以避免跨服务器攻击。

在”Advanced”选项卡中,检查 “Enable security”是否被选中,如果没有,选择它们。

windows服务器配置

在安装时最好不要使用系统默认的目录,如将\\WINNT改为其他目录

分区的时候用ntfs文件系统,装邮局的分区要1024字节来格式化,因为有很多邮件是1kb的。

这里我按打开“计算机管理”后,里面的顺序,从上到下配置。

1、本地用户和组:

重命名administrator的用户名,加复杂密码。修改guest用户名,然后禁用。新建一个administrator,复杂密码,属于guest组。新建一个china-net组,以后可能有用。

2:服务(红色表示有疑问):

禁用以下服务:Alerter、ClipBook、Computer Browser、 Distributed File System、Indexing Service、Internet Connection Sharing、Messenger、NetMeeting Remote Desktop Sharing、Print Spooler、Remote Registry Service、Routing and Remote Access、Smart Card、Task Scheduler、TCP/IP NetBIOS Helper Service、Telnet、Terminal Services、Windows Time、Workstation

3、internet信息服务:

Internet信息服务-属性-WWW服务(编辑)-主目录-配置-应用程序映射,删除下面的应用程序映射:.htr、.idc、.printer、.cer、.shtm、.stm 、.cdx 。只保留.asp和.asa映射。在进程选项卡的脚本文件高速缓存中把放入高速缓存的最多ASP文件数设成300,以改善ASP文件的执行效率。在应用程序调试选项卡中选中”发送文本错误消息给客户”以防止通过错误消息来取得系统、网络、数据库的信息。在Internet信息服务-计算机名称-属性-WWW服务(编辑)-服务选项卡选中HTTP压缩的压缩静态文件,提高执行效率。在一个非系统分区中建立日志文件夹,来保存各个站点的日志。日志的扩充的属性里,勾选时间、客户ip地址、服务器端口、方法、uri资源、uri查询、协议状态、主机、用户代理。isapi筛选器。主目录。自定义错误信息(这里要修改404文件,和500文件。)。IIS6.0由于运行机制的不同,出现了应用程序池的概念。一般建议10个左右的站点共用一个应用程序池,应用程序池对于一般站点可以采用默认设置。还要设置回收进程工作,可以设置在凌晨的时候回收。

在一个站点的某些目录里,譬如这个”uploadfile”目录,不需要在里面运行asp程序或其他脚本的,就去掉这个目录的执行脚本程序权限,在”应用程序设置”的”执行权限”这里,默认的是”纯脚本”,我们改成”无”,这样就只能使用静态页面了。

用任意一个dll文件来解析.mdb后缀名的映射。这样数据库就不容易被下载了。不用改成.asp的。

2,打开“我的电脑”做如下配置:

删除所有盘默认的everyone完全控制权限,添加相应权限 administrators和system  WINNT添加一个users读取和运行权限。给 c:\\program files\\common files 一个users默认权限。给 c:\\winnt\\temp 默认权限下面还加个写入权限。
C:\\winnt\\sytem32文件夹和net.exe、net1.exe、netstat、netsh、cacls、cmd.exe、ftp.exe、tftp.exe、at.exe、format.com、xcopy.exe这几个文件的权限设置成只有管理员和system完全控制权限,取消父系继承来的权限。c:\\inetpub目录,这个目录的所有权限删除,目录不删,以后可能有用。如果仅仅只是设置了C盘给administrators权限,而在All Users/Application Data目录下会 出现everyone用户有完全控制权限,这个地方也要注意一下。

3、接下来打开的是“组策略gpedit.msc”:

计算机配置-Windows配置-安全设置-帐户策略-密码策略

密码策略 密码必须符合复杂性要求:启用
密码长度最小值:8个字符
密码最长存留期:30天
密码最短存留期:3天
强制密码历史:5个记住的密码

帐户锁定策略设置
复位帐户锁定计数器:20分钟之后
帐户销定时间:20分钟
帐户锁定阀值:5次无效登录(这些可以自己拿捏)

计算机配置-Windows配置-安全设置-本地策略,审核策略设置:
审核策略更改:成功、失败
审核登录事件:成功、失败
审核对象访问:失败
审核过程追踪:无审核
审核目录服务访问:无审核
审核特权使用:失败
审核系统事件:失败
审核帐户登录事件:成功、失败
审核帐户管理:成功、失败

计算机配置-Windows配置-安全设置-本地策略-用户权限指派
更改系统时间:administrators
关闭系统:administrators
管理审核和安全日志:administrators(这里自己要多看看

计算机配置-Windows配置-安全设置-本地策略-安全选项
登录屏幕上不要显示上次登录的用户名:已启用
对匿名连接的额个限制:不允许枚举 SAM 帐号和共享
故障恢复控制台:允许对所以驱动器和文件夹进行软盘复制和访问:已启用
在关机时清理虚拟内存页面交换文件:已启用(这里自己也要多看看,应该会有所发现

打开组策略编辑器,依次展开“计算机配置→管理模板→系统”,在右侧窗口中找到“关闭自动播放”选项并双击,在打开的对话框中选择“已启用”,然后在“关闭自动播放”后面的下拉菜单中选择“所有驱动器”,按“确定”即可生效。

打开组策略编辑器,依次展开“计算机配置→Windows 设置→安全设置→安全选项”,在右侧窗口中找到“网络访问:可远程访问的注册表路径”,然后在打开的如图所的窗口中,将可远程访问的注册表路径和子路径内容全部删除。

4、接下来就到注册表了regedit:

把HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\GraphicsDrivers\\DCI,Timeout双字节值改为0。建议大家设为0.这个键值对玩游戏有用,做虚拟主机我们用不到。

把HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Lsa项下的数值restrictanonymous,由0改为1。

在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\lanmanserver\\parameters项下新建双字节值AutoShareServer值为0。(没找到~~~-_-!)

在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\NetBT\\Parameters项下新建双字节值SMBDeviceEnabled值为0。(又没找到。。)

[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Lsa ]分支,在右侧窗口中找到“restrictanonymous”子键,将其值改为“1”。关闭ipc连接

5、其他需要注意的地方:

本地连接属性-把”Microsoft网络的文件和打印机共享”卸载掉。在选定的组件中之留下TCP/IP协议和Microsoft网络客户端。选中TCP/IP协议-属性-高级-WINS-禁用TCP/IP上的Netbios选项。由于要控制带宽流量服务,额外安装了Qos数据包计划程序。

< P>regsvr32 /u C:\\WINNT\\System32\\wshom.ocx对应于WScript.Shell组件。
regsvr32/u C:\\WINNT\\System32\\shell32.dll对应于Shell.Application组件。
禁止guests组的用户调用它:
cacls C:\\WINNT\\system32\\scrrun.dll /e /d guests
cacls C:\\WINNT\\system32\\shell32.dll /e /d guests(会在“安全”里加入guest拒绝的权限)

注册表关闭默认共享,打补丁。

在防火墙中添加IP规则,允许21、25、80、110。禁止135端口。最后启动禁止所有别的端口的通过。
我们也可以通过系统自带的本地安全策略和TCP/IP筛选来设置相应打开和关闭的端口。(这个怎么弄?装防火墙,还是用自带的?)对于win2000配置的方法是在网卡属性-TCP/IP-高级-选项-TCP/IP筛选中启用TCP/IP筛选。

 

phpmyadmin

要注意的几个地方:

register_globals = Off
extension_dir =
extension=php_dbase.dll(可选)
extension=php_gd2.dll(gd库的支持)
extension=php_ldap.dll(可选)
extension=php_mbstring.dll(没有发现 PHP 的扩展设置mbstring, 而当前系统好像在使用宽字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确识别字符串,可能产生不可意料的结果.)
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mcrypt.dll
五、安装 phpMyAdmin:
下载得到 phpMyAdmin-2.6.0.zip ,将其解压到 IIS 根目录,找到并打开 config.inc.php ,做以下修改:

搜索$cfg[‘PmaAbsoluteUri’],设置你的phpmyadmin的URL,如:$cfg[‘PmaAbsoluteUri’] = ‘http://localhost/phpmyadmin/’; 注意这里假设phpmyadmin在默认站点的根目录下
搜索$cfg[‘blowfish_secret’],设定好root密码后这里也要填写比如ROOT密码xqin.com则设置为$cfg[‘blowfish_secret’] = ‘xqin.com’;
搜索$cfg[‘DefaultLang’] ,将其设置为 zh-gb2312 ;
搜索$cfg[‘DefaultCharset’] ,将其设置为 gb2312 ;
搜索$cfg[‘Servers’][$i][‘auth_type’],默认为config,是不安全的,不推荐,推荐使用cookie,将其设置为$cfg[‘Servers’][$i][‘auth_type’]     = ‘cookie’;
注意这里如果设置为config请在下面设置用户名和密码!例如:
$cfg[‘Servers’][$i][‘user’]          = ‘root’;      // MySQL user—–MySQL连接用户
$cfg[‘Servers’][$i][‘password’]      = ‘xqin.com’;  

如出现如下错误:

Warning: require_once(./libraries/common.inc.php) [function.require-once]: failed to open stream: No such file or directory in X:xxxxxxphpmyadminindex.php on line 34

Fatal error: require_once() [function.require]: Failed opening required ‘./libraries/common.inc.php’ (include_path=’.;C:php5pear’) in X:xxxxxxphpmyadminindex.php on line 34 

给予phpmyadmin安装目录的上一级目录一个读取权限。

如果phpmyadmin出现如下错误[以下方法解决]
Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.
环境是win2003std II6
在php的目录建立个文件夹tmp,设置tmp属性为ervery one完全控制。
在php.ini找到session.save_path 这一行,设成session.save_path = “C:/php/tmp”把分号弄掉。

+====================
解决它:
将php.ini中的session.auto_start的值改为1(启动),默认是0(禁用),
在php.ini找到session.save_path 这一行,设成session.save_path = “C:/php/tmp”把分号去掉
在phpmyadmin中找到,config.sample.inc.php,改成config.inc.php,
找到 $cfg[‘blowfish_secret’] 将后面的赋值,加入数字和字母组合

Copyright © 2017 Smeagol's blog

Theme by Anders NorenUp ↑