目前大部分针对应用层的防护设备,尤其是WEB应用,主流的防护手段还是基于正则表达式进行匹配过滤。
最近发现自己使用的设备出现很多误报,期望通过匹配日志记录定位问题,手动匹配会是一个很繁琐的过程,所以考虑程序自动化实现。
问题定义:
1、文件A存储了一系列正则表达式,每行一条
2、文件B中存储了所有的日志,每行为一次访问记录,保护请求源IP、客户端浏览器信息、请求url等
要求:输出文件B中的url,该url与文件A中任意一条正则相匹配,并同时输出该正则表达式
以下是代码实现
import re
import sys
import urllib
de=urllib.unquote
url_file=sys.argv[1]
regex_file=sys.argv[2]
print url_file
print regex_file
p_ufile=open(url_file)
p_rfile=open(regex_file)
uline=p_ufile.readline().strip('\n')
rline=p_rfile.readline().strip('\n')
while(uline):
url=uline.split(" ")[8]
# print url
url=de(url)
while(rline):
# print rline
# print url
if re.search(rline,url):
print "**********************************************"
print rline
print "##########regex#########"
print uline
print "**********************************************"
break
rline=p_rfile.readline().strip('\n')
# break
# print uline
# break
p_rfile.close()
p_rfile=open(regex_file)
rline=p_rfile.readline().strip('\n')
uline=p_ufile.readline().strip('\n')
如果正则表达式中使用'(单引号)进行匹配,而在url中出现的确实%27,这种情况下是无法匹配成功的,为了解决这个问题,可以先将url进行解码:
de=urllib.unquote
url=de(url)