强力档正则表达式 - 若干年后自己都快看不懂了^_^
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; } }######################################### } }}??
?