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;
}
}
#########################################
}
}
}