voodooq

如果人类少一些私欲,世界将多一些安详……

博客园 首页 新随笔 联系 订阅 管理
  33 Posts :: 3 Stories :: 7 Comments :: 0 Trackbacks

公告

2010年10月18日 #

时间:也不记得自己有多就没有更新这个BLOG了,其实博客的思路很好,可以让人把自己的日记写在网络上。但是总觉得,这是一个需要长时间坚持的事情,而人往往是懒惰的,可能因为各种各样的事情搁置了BLOG的更新,就好像我就是这样一种情况。


事件:其实在这几年的时间里面,对我来说发生了很多事情,比如我与相恋多年的女友结婚了。第一次买了属于自己的房子。做了第一次的投资。等等等等,感觉到不同年龄阶段的人,对人生以及未来的想法是不同的,下一步就是为了未来做一个很好的规划了。


实践:作为像我这样30来岁的人来说,应该是正是事业中流砥柱的阶段,我不想碌碌无为的活一辈子,只想能够创造出属于自己的一份事情,总在思考人为什么活在世界上,除了延续种族之外,还有什么是我们要做的呢?我其实有过很多的很好的创意和思路,其中很多现在其实已经成为现实,但是可能苦于没有实践的方法和方式,被别人抢了先机,我现在又有了一个新的项目思想,我想用3-5年的时间去实践他。

posted @ 2010-10-18 17:40 Voodoo's天空 阅读(26) 评论(0) 编辑

2006年7月1日 #

上个星期,给朋友作了一个投票作弊的小程序<投票作弊程序制作思路>,后来,本来也相安无事。但是可能是朋友玩的过火了。他给自己投了1万多票了,而其他人还只有几百票,于是网站管理员发现了这个情况。不但把所有的记数全部清零,而且修改了投票的程序,这次真的变成了限制IP投票的方式了,这样就不能使用上次的方式了,我的朋友又来求我。

我拒绝了他的要求,因为他用我的程序作出了不好的事情。但是因为我想挑战一下自己,于是我就想试着作一个可以突破IP限制投票的程序,这次我就不给他了。嘿嘿

再来看看投票测试的步骤

1、联上ADSL,上网,投票,提示投票成功。重新投票,提示投票失败。
2、断开ADSL,重新联上ADSL,上网,投票,提示投票失败
3、删除了COOKIES,断开ADSL,重新联上ADSL,上网,投票,提示投票成功

从上面的操作我们可以看到,这次网站的程序员是使用了即限制COOKIES又限制IP的方法。有了上次的经验,限制COOKIES当然是没有办法难住我了,就是这个突破IP的方式应该如何呢?

我想到了使用代理方式,因为如果你使用代理服务器上网的话,网站获取的IP地址其实是代理服务器的。

于是我作了如下测试

1、在GOOGLE上搜索了一下代理服务器列表(好家伙,还挺多的)
2、打开IE的工具栏,在连接中使用代理连接,填了一个刚才代理服务器的地址。
3、重新连接投票网站,首先删除了COOKIES,然后投票,提示投票成功
4、又找了一个代理服务器地址,重新改了代理服务器的连接。
5、删除COOIKES。投票,提示成功。

看来方法找到了,但是如何在WINFORM中实现这个功能呢?

我在WINFORM中,写入一个textBox,将从网站上找到的代理服务器列表,贴进去然后在MSDN Library中搜索Proxy,发现了有好几种方式都能实现在WINFORM中的代理。

我选择了WebProxy的方式,按照上面的提示,写下如下代码:

                        WebProxy proxy = new WebProxy(proxyStr, true);
                        
//proxy.Credentials = new NetworkCredential("userId", "password", "Domain");
                        WebRequest request = WebRequest.Create("http://www.xxx.com/vonet.asp?user=xxx"); 
                        request.Proxy 
= proxy;
                        
                        HttpWebResponse response 
= (HttpWebResponse)request.GetResponse(); 
response.Close();

 我们分析一下
首先我声明了一个WebProxy的实例,proxyStr是代理服务器的地址,后面的true是对于本地服务,不是用代理服务器。这个其实可以不用写。
其次,建立request对象,写入需要创建的地址,并且设置了代理服务
然后使用resposne对象,执行对于请求的结果。
最后关闭输出

就是这么一个简单的方法,然后再结合我之前的删除COOKIES的方法。

哈哈,一个突破IP投票的小程序就写好了

我试了一下,效果还可以,有些代理由于无法使用,可能会抛出异常,我们捕获并作些处理就好了

恩,希望对大家有所帮助

 

posted @ 2006-07-01 15:17 Voodoo's天空 阅读(12225) 评论(0) 编辑

2006年6月24日 #

最近有个朋友 让我帮他在线投票,因为站点是限制IP的(这里其实是骗人的),我就帮他点了一下,可是我突然发现,第一名的投票数比后面的人多的很多,大概差3-4百票吧。我就觉得,第一个人肯定是找人帮忙投票了,但是这样就失去了投票本身的意义了。于是我就想故意搞恶一下。想到写一个自动投票的程序来完成。(算不算以暴制暴啊?)

我分析了投票的网站,上面说是限制IP的,但是根据我的分析,并不是限制IP,而是使用了COOKIES记录的投票的信息,而如果你清除了COOKIES就可以再投票了,不过这样需要每次去手动调整IE的参数,累都累死了。于是,我想能不能自动删除COOKIES并且自动提交页面提交呢?

通过以上的分析,我们知道了,作这个程序,需要两个环节:
1、自动清除COOKIES
2、自动提交表单

首先我们先看看第一个
我查询了,MSDN的网站,里面有个HI Script的专栏。介绍了很多执行WINDOWS脚本的技术,其中就有关于如何操作IE临时文件夹和COOKIES目录的功能。
http://www.microsoft.com/china/technet/community/scriptcenter/resources/hey1102.mspx

根据里面的方法,我在C#中写出了以下代码,用来删除COOKIES,要注意的是,其中的index.dat文件是无法删除的,所以我作了一个处理,删除了除他以为的所有内容,代码如下:
            const int cookies = 33;
            Shell32.Folder objFolder;
            Shell32.FolderItems objFolderItems;
            Shell32.ShellClass objShell;
            
            objShell 
= new Shell32.ShellClass();
            objFolder 
= objShell.NameSpace(cookies);
            objFolderItems 
= objFolder.Items();
            
foreach(Shell32.FolderItem objFolderItem in objFolderItems)
            
{
                
if(!"index.dat".Equals(objFolderItem.Name.ToLower()))
                
{
                    File.Delete(objFolderItem.Path.ToString());
                }

            }


第一步解决了,该解决第二个问题了,我查询了一些资料。发现有两种方式可以解决我的问题
1、使用WebClient
这种方式是直接执行类似页面提交的方式,进行页面的控制,并且可以返回提交结果页的内容,速度快。

2、使用WebBrowser
这种方式类似于自己做了一个浏览器,然后控制页面中的对象进行提交。这样的速度有点慢。

所以我决定用第一种方式,代码如下:
            WebClient wc = new WebClient();
            
string postData = "username=xxx"
            wc.Headers.Add(
"Content-Type","application/x-www-form-urlencoded"); 
            
byte[] bReturn = wc.UploadData("http://www.xxx.xxx/vote.asp","POST",Encoding.Default.GetBytes(postData));
            
//MessageBox.Show(Encoding.Default.GetString(bReturn));
            wc.Dispose();
看到了吧,这样就可以了。

剩下就是在用一个timer来循环执行就可以了。

哈哈,一切都是这么简单。不过还是觉得这么做有背公平的原则。希望大家不要用到不好的地方,当然用于惩戒作弊的人除外

posted @ 2006-06-24 15:24 Voodoo's天空 阅读(5028) 评论(0) 编辑

2006年6月16日 #

最近在做一个项目,里面有个需求是分析网页文件,并且检索到需要的内容,并且显示到客户端上。

问题就出现了,如果一个网页文件中包含了<script>alert()</script>。这样的脚本文件,则会出问题了。

于是我想了很多办法,但是都不是很好用。

我参考了dudu的替换脚本的方法
public static string FilterScript(string content)

 
{

              
string regexstr=@"<script.*</script>";

              
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

 }

但是这样有问题,也就是只能替换<script></script>在一行的情况

于是修改了以上的代码成为

public static string FilterScript(string content)

         
{

              
string regexstr=@"(?i)<script([^>])*>(\w|\W)*</script([^>])*>";

              
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

          }


这样表面看问题好像解决了,但是依旧有问题。他会把只要是在<script></script>中的任何内容都替换为空,也就是说,如果出现了,<script></script>内容<script></script>的情况,会被替换为空。

于是最终修改为
        private string FilterScript(string content)
        
{
            
string regexstr=@"<script[^>]*>([\s\S](?!<script))*?</script>";
            
return Regex.Replace(content,regexstr,string.Empty,RegexOptions.IgnoreCase);

        }

这样,就会循环的进行替换,只把<script></script>之间的内容替换,而不会从头替换到脚

希望对其他能搜索到这篇内容的朋友有所帮助
posted @ 2006-06-16 15:45 Voodoo's天空 阅读(793) 评论(0) 编辑

2006年2月23日 #

由于客户的服务器病毒防火墙的倒掉,病毒有如潮水一般连绵不绝的把客户的服务器弄垮了,没有办法,只好重新安装系统和SPS 2003了。

看了关于备份和恢复的文档,在重装之前,总结了以下几个需要注意和备份的步骤

备份的步骤

1、AD信息的备份
2、SPS数据的备份
3、其他信息的备份

第一步,AD的备份。

可以使用系统提供的 “附件”-》“系统工具”-》“备份”工具来实现。

运行改工具后,选择备份,在需要备份的位置上,选择“Stytem Sate” 然后选择需要存放的位置。



点击“开始备份” 就开始备份了

第二步 SPS的备份
可以使用 SharePoint Portal Server 数据备份恢复工具,操作起来还是比较简单的。



第三步 把其他需要备份的文件进行备份即可

恢复的步骤

1、先安装了操作系统之后,在进系统之前按F8,选择 第七项 “恢复域控制器”模式,然后使用刚才备份的AD备份进行恢复即可,要注意了,不要把服务器升级为域控制器之后才执行这个操作,本身这个备份就包含了提升服务器级别的配置了。

2、然后是安装SQLSERVER 2000

3、安装SPS2003

4、开始恢复门户

5、创建一个新的配置数据库

6、使用备份恢复工具 将之前备份的SPS门户文件进行还原

7、一切OK 了

PS:
有一点需要注意的,这也是大家可能会遇到的。就是我们在重新部署了AD控制器,并且和原来的域环境一样的情况下,还原的SPS门户会看不到,始终显示“不能完成此操作。请重试”的错误信息,这是因为保存在系统数据库中用户SID和AD中的用户不匹配造成的,解决的方法是在XXXX_Site数据库中执行以下代码

DECLARE @login varchar(40), @systemid varbinary(128)

DECLARE curUsers CURSOR LOCAL FOR
SELECT tp_login, tp_systemid FROM userinfo where tp_deleted = 0

OPEN curUsers

FETCH NEXT FROM curUsers INTO @login, @systemid

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Resetting user ' + @login + ' to new SID '
PRINT suser_sid(@login)
UPDATE UserInfo
SET tp_systemid = suser_sid(tp_login) WHERE CURRENT OF curUsers
FETCH NEXT FROM curUsers INTO @login, @systemid
END

CLOSE curUsers
DEALLOCATE curUsers

GO

这样,将用户ID重新匹配,就可以继续使用了.

参考资料:
SharePoint站点中用户信息与AD用户信息的“不一致”问题
http://support.microsoft.com/kb/827701/
Fix those SIDs

posted @ 2006-02-23 18:29 Voodoo's天空 阅读(541) 评论(0) 编辑

2005年12月16日 #

摘要: 时间过得真快,转眼一年又过去了,现在没有时间感慨了来看一下,我在从SQLSERVER2000 导数据到ORACLE9i中遇到的问题以及解决的方法1、ORACLE 字符集不匹配 字符类型不正确,注意导入的字符类型即可2、ORA-01461: 仅可以为插入LONG 列的LONG 值赋值是因为导数据的长度varchar2类型只能识别2000字符长度.需要调整一下数据库设置即可3、ora-24801: 在...阅读全文
posted @ 2005-12-16 10:49 Voodoo's天空 阅读(948) 评论(0) 编辑

2004年12月31日 #

摘要: 时间过的真快,转眼2004年就过去了,在这一年里我学到的很多新的知识,也结识了一些新的朋友,总的来说,这一年我过还算比较舒服,呵呵希望在新的一年里,能有更多新的收获……大家共同勉励,一起进步吧阅读全文
posted @ 2004-12-31 23:33 Voodoo's天空 阅读(363) 评论(0) 编辑

2004年12月16日 #

摘要: 复合控件... 1、什么是复合控件? 复合控件是由多个控件组成的控件(废话……),有点类似用户控件(*.ascx),但是却是用户自定义控件的。 2、如何做 首先要从 System.Web.UI.WebControls.WebControl 继承外,还有实现INamingContainer接口 public class SelectButton: ...阅读全文
posted @ 2004-12-16 00:09 Voodoo's天空 阅读(661) 评论(0) 编辑

2004年12月12日 #

摘要: 1、从哪个类继承System.ControlSystem.Web.WebControls.WebControlWebControl类是从Control类继承过来的,Control类只有一些基本的功能,而WebControl则有更多的关于控件的描述和修饰。2、Render 和 RenderContents方法重写Render方法,这样可以实现在设计时和运行时显示内容一样的效果另外,还有一个就是Ren...阅读全文
posted @ 2004-12-12 22:31 Voodoo's天空 阅读(601) 评论(0) 编辑

2004年12月1日 #

摘要: 建立数据库以及表表名:Recordset_Filter有字段 num INT 数据num102030405060708090...'链接数据库已经完成Sql = "select Num from Num order by Num desc"rs.open sql,conn,3,1   intCount = rs.RecordCount...阅读全文
posted @ 2004-12-01 16:03 Voodoo's天空 阅读(887) 评论(0) 编辑

仅列出标题  下一页