{"name":"jquery","cats":[59],"icon":"e33ee4e794a2a92ebfaa0c569cc88103", # 图标的MD5值
"implies":"javaScript","excludes":"javaScript","website":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"title":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"js":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"headers":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"html":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"url":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"cookies":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"meta":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"script":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"},"sub_param":{"Server":{"text":"//api.jquery.com" or "regex":"//api.jquery.com"}},"_fingerprint_note":"jQuery是一个快速、小且功能丰富的JavaScript库。","_fingerprint_test_url":"https://jquery.com/",}
指纹识别脚本介绍
指纹分类表结构介绍
{"分类编号":{"name":"分类名字","desc":"分类描述"},
。。。
}
指纹规则表结构介绍
headers.json,html.json,title.json
{"指纹名字":["指纹规则","指纹权重(int类型)"]
。。。
}
指纹识别代码逻辑介绍
获取指纹分类集合、headers规则集合、title规则集合、HTML规则集合
请求目标网址
获取请求头信息
对比请求头规则与内容
获取网站内容,并转化成DOM树结构对象
对比title规则与内容
去掉html中不需要的节点
对比html股则与内容
返回最终结果
对比方法代码记录
# 对比规则与内容@staticmethoddefcheck_finger(item_list, string):"""
对比规则与内容
:param item_list: 规则集合
:param string: 内容字符串
:return: 结果集合,例如:{"jquery": 30}
"""
res_dict ={}for i in item_list.keys():# 一种同时存在与和或,一种只存在与,一种只存在或,一种文本if"(?=.*"in item_list[i][0]and'|'in item_list[i][0]:for j in item_list[i][0].split("|"):if"(?=.*"in j:
list1 = re.findall(r"\*(.*?)\)", j)
list2 =[j for j in re.findall(r"\(\?=\.\*(.*?)\)", j)if j in string]+ \
[j for j in re.findall(r"\(\?!=\.\*(.*?)\)", j)if j notin string]iflen(list1)==len(list2):
res_dict[i]=int(item_list[i][1])else:if j in string:
res_dict[i]=int(item_list[i][1])elif"(?=.*"in item_list[i][0]:
list1 = re.findall(r"\*(.*?)\)", item_list[i][0])
list2 =[j for j in re.findall(r"\(\?=\.\*(.*?)\)", item_list[i][0])if j in string]+ \
[j for j in re.findall(r"\(\?!=\.\*(.*?)\)", item_list[i][0])if j notin string]iflen(list1)==len(list2):
res_dict[i]=int(item_list[i][1])elif'|'in item_list[i][0]:if re.search(item_list[i][0], string):
res_dict[i]=int(item_list[i][1])elif item_list[i][0]in string:
res_dict[i]=int(item_list[i][1])return res_dict