钓鱼网站检测 repo复现

写在前面

纠结要起个什么样的文章标题…这篇帖子不会写的太硬核,就是想稍微理一下我自己的思路。
最近看了入侵检测和钓鱼检测的论文。入侵检测给我的感觉是系统太大了,而且从199几年就开始用机器学习做了??我的天哪…加上听另外一个同学说这个方向都被做烂了,觉得很有道理。看了几天论文之后,在打算复现论文时候因为没有找到打标签的数据集,就顺理成章地先把这个方向放下了。草率如我:)
钓鱼网站/邮件检测没看多少,emm…不过至少这个方向应该是比入侵检测做的人少的…而且感觉上这个小一点,看论文里说应该是数据集是比较好找的,而且不会像入侵检测的数据集那么老,都是上个世纪的??

Github上找到一个仓库,是论文的复现(虽然那个论文质量不是很好?),就大概看了一下,简单复现了一下。
https://github.com/rohitnaik246/Malicious-Web-Content-Detection-Using-Machine-Learning

论文内容

论文用了UCI中的钓鱼网站数据集。数据集是以arff的格式给出来的,在文件里介绍了涉及到的字段。
使用的分类器是随机森林。在数据集给出的特征中选择了部分(手动)。最后论文的结果是以Chrome扩展的形式展现的。就是当用户访问一个网址时候,会通过扩展来检查一下,这个网址的特征是通过repo中的feature_extraction.py文件提取的。

整体思路很简单,因为没有真正用机器学习写过程序,所以就复现一下感受一波。

# test.py
import numpy
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report
import joblib

lables = []
file = open("Training Dataset.arff").read()
data_list = file.split('\r\n')
data = numpy.array(data_list)
data1 = [i.split(',') for i in data]
data1 = data1[0 : -1]  # ? what's the meaning? seems meaningless
for i in data1:
    lables.append(i[30])
data1 = numpy.array(data1)
features = data1[:, :-1]

features = features[:, [0, 1, 2, 3, 4, 5, 6, 8, 9, 11, 12, 13, 14, 15, 16, 17, 22, 23, 24, 25, 27, 29]]
features = numpy.array(features).astype(numpy.float)

features_test = features[10000:]
lables_test = lables[10000:]

clf = joblib.load('random_forest.pkl')

whole = len(features_test)
i = 0
right_count = 0
pred = clf.predict(features_test)
print 'The accuracy is:', accuracy_score(lables_test, pred)

训练的代码和repo里一样,测试的话就用了训练集中第10000个数据后面的1000多个数据。测试结果96%多的准确率。

之后

  1. 要看一下这个数据集中的特征都是什么含义
  2. 师姐列的论文里再找论文看一下
  3. 整理总结有哪些方法被用过了,效果怎么样
  4. 整理总结都有哪些特征
  5. 确定到底要做钓鱼网站还是钓鱼邮件
    (当然这都是我自己的计划,还没有跟老师讨论,不知道这个方向是否ok?)

数据集中的30个特征

@attribute having_IP_Address  { -1,1 }  --> 使用ip地址(可能是16进制表示的)而不是域名进行访问的url
@attribute URL_Length   { 1,0,-1 }  --> url的长度,该数据集认为url长度大于54则是钓鱼网站(因为太长可能是被用来隐藏真正的恶意部分)
@attribute Shortining_Service { 1,-1 } --> 是否使用了短网址服务,可以参考:https://www.jianshu.com/p/43eea66a2235
@attribute having_At_Symbol   { 1,-1 }  --> url中是否包含"@"(@字符前的所有内容都会被忽略,用以隐藏后面的真正恶意部分)
@attribute double_slash_redirecting { -1,1 } --> url中是否有"//",这个在浏览器中测试了一下并没有重定向
@attribute Prefix_Suffix  { -1,1 } --> url的域名部分是否有"-"
@attribute having_Sub_Domain  { -1,0,1 } --> 域名部分中"."的个数
@attribute SSLfinal_State  { -1,1,0 } --> 是否使用了HTTPS
@attribute Domain_registeration_length { -1,1 } --> 域名注册时长
@attribute Favicon { 1,-1 } --> 是否从其他域名下引入图标
@attribute port { 1,-1 } --> 端口打开情况
@attribute HTTPS_token { -1,1 } --> url的域名部分是否包含"https"
@attribute Request_URL  { 1,-1 } --> 请求其他域下url的比例
@attribute URL_of_Anchor { -1,0,1 } --> a标签的链接
@attribute Links_in_tags { 1,-1,0 } --> , 
                    
                    

你可能感兴趣的:(水滴石穿)