读书人

强力档正则表达式 - 若干年后自个儿都

发布时间: 2012-12-18 12:43:41 作者: rapoo

强力档正则表达式 - 若干年后自己都快看不懂了^_^

blog最主要还是作为自己积淀的一个总结,所以逛逛电脑上许久未曾到过的地方先,果不其然,下面这段代码甚至让自己也汗了一把,仔细想了想,应该是做网络安全审计的时候,从POST数据包中,窃取可能存在的用户名和密码的代码,罪过啊罪过,好在只是验证测试性质,未实际投入使用

估计不会有什么复用价值,所以其它不多说了,上代码,一边精读《精通正则表达式》,一遍写的,顺便赞一下这本书,以及强大的perl!

?

perl代码(JE居然木有perl高亮。。。):

?

?

# 用法 perl findUser.pl 文件夹$dir=$ARGV[0];#print "(debug) dir is $dir , \n";if(opendir DD,"$dir"){    @dirList = readdir(DD);    #print @dirList;    closedir(DD);    foreach  $mydir (@dirList){                        if($mydir=~/txt$|CONTENT$/){                    #print "(debug) var mydir is $mydir \n";                open(MYFILE,$mydir)|| die ( "cannot open $mydir\n");#########################################        # 解析头        while($line = <MYFILE>){                    #print $line;                    if($line =~ m/Host:\s*(\S+)/i){                $host = $1;        #print "\nhost:====$host====\t";        #last;        }                # 头体分割行        #if($line =~ m/^\s$/m){        #last;        #}                #}                #while($line = <$mydir>){        if($line =~ m/                # 匹配用户名的部分                (?:&|\s)                (u(?:se?r)?|login|account|member|alias|chat|nick)?_?                    # 用户名不规则,如果前半部分出现,则后半部分可以不出现                    # 如果前半部分没出现,则后半部分必须出现                    (?(1)                        (?:name|id|key)?                        |(?:name|id|key)                    )                # 这里就是保存到的用户名了                =                ([^&\s]+)                                                # 用户名和密码之间,是不是一定有一个&?,用户名是不是一定在密码之前?                # 有密码在用户名之前的,目前还没有处理这种情况                #&(?:.+&)*                                # 先找到用户名了才去找密码                (?(2)                    (?:                                (?:&|\s)                        # 匹配密码的部分,QQ密码可以为空格,密码为(多个)空格如何处理?\s包括空格么?                        (?:(?:user)?|(?:login)?)                        # 还需要优化,搞得不清楚 password passwords pwd pwds pass key keys                        (?:p(?:ass)?w(?:or)?ds?|key|pass)                         # 这里就是保存到的密码了                        =                        ([^&\s]+)                     )                )                # i-忽略大小写,x-可以对正则表达式排版                /ix                ){                                $name=$2;                $pass=$3;                        print "host:==$host==\tname:==$name==\tpass:==$pass==\n";                #last;            }                    }#########################################        }    }}
?

?

?

读书人网 >编程

热点推荐