# urldetection
恶意URL检测,对应与机器学习是个分类问题,这里分别用逻辑回归和SVM支持向量机分类模型进行模型实现。
恶意URL检测的方法很多,这里介绍通过机器学习分析URL文本分词词频来检测恶意URL。训练的数据集为开源数据集,通过机器学习训练检测模型,然后做了部分工程化的应用,将模型持久化,在应用的时候加载进来直接应用,不用重新进行训练。通过接口调用实现恶意URL检测预测判断。
恶意URL检测,对应与机器学习是个分类问题,这里分别用逻辑回归和SVM支持向量机分类模型进行模型实现。
具体实现过程包括**数据载入**-->**数据处理(分词、向量化处理)**-->**模型训练**-->**模型保存**-->**模型应用**
**项目组织结构如下:**
![项目组织结构](https://img-blog.csdnimg.cn/cdcd148129c346f8a79ab6d91a120fe9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAeGllamF2YTEwMTg=,size_11,color_FFFFFF,t_70,g_se,x_16#pic_center)
# 一、数据载入
从数据集中载入数据,读取数据,将URL和标签进行识别和区分。
```python
#从文件中获取数据集
def getDataFromFile(filename='data/data.csv'):
input_url = filename
data_csv = pd.read_csv(input_url, ',', error_bad_lines=False)
data_df = pd.DataFrame(data_csv)
url_df = np.array(data_df)
random.shuffle(url_df)
y = [d[1] for d in url_df]
inputurls = [d[0] for d in url_df]
return inputurls,y
```
# 二、数据处理(分词、向量化处理)
数据处理实现对URL的分词及向量化处理
分词:分析URL根据\,.-进行分词,由于com、cn等常用域名不是关键影响因素,所以分词的时候去掉了
## 分词
```python
#分词
def getTokens(input):
web_url = input.lower()
urltoken = []
dot_slash = []
slash = str(web_url).split('/')
for i in slash:
r1 = str(i).split('-')
token_slash = []
for j in range(0, len(r1)):
r2 = str(r1[j]).split('.')
token_slash = token_slash + r2
dot_slash = dot_slash + r1 + token_slash
urltoken = list(set(dot_slash))
if 'com' in urltoken:
urltoken.remove('com')
if 'cn' in urltoken:
urltoken.remove('cn')
return urltoken
```
## 向量化处理
将分词以后的结果进行词频的向量化处理,形成可以用于模型训练的稀疏矩阵向量
```python
all_urls,y=getDataFromFile(datapath)
url_vectorizer = TfidfVectorizer(tokenizer=getTokens)
x = url_vectorizer.fit_transform(all_urls)
```
# 三、模型训练
将经过处理后的训练数据用模型进行训练,将数据集分为两部分一部分用于训练,一部分用于测试评估。
```python
#训练,通过逻辑回归模型训练
def trainLR(datapath):
all_urls,y=getDataFromFile(datapath)
url_vectorizer = TfidfVectorizer(tokenizer=getTokens)
x = url_vectorizer.fit_transform(all_urls)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
l_regress = LogisticRegression() # Logistic regression
l_regress.fit(x_train, y_train)
l_score = l_regress.score(x_test, y_test)
print("score: {0:.2f} %".format(100 * l_score))
return l_regress,url_vectorizer
```
用逻辑回归模型训练的结果是 score: 98.50 %
```python
#训练,通过SVM支持向量机模型训练
def trainSVM(datapath):
all_urls, y = getDataFromFile(datapath)
url_vectorizer = TfidfVectorizer(tokenizer=getTokens)
x = url_vectorizer.fit_transform(all_urls)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
svmModel=svm.LinearSVC()
svmModel.fit(x_train, y_train)
svm_score=svmModel.score(x_test, y_test)
print("score: {0:.2f} %".format(100 * svm_score))
return svmModel,url_vectorizer
```
用SVM模型训练的结果是 score: 99.64 %
可以看出SVM模型训练的结果比逻辑回归模型训练的效果要稍好。
# 四、保存模型
将训练好的模型进行持久化保存,通过pickle.dump()的方式把训练好的模型参数及特征保存至模型文件,以便于应用的时候不要再进行训练,直接应用训练好的模型。
```python
#保存模型及特征
def saveModel(model,vector):
#保存模型
file1 = modelfile_path
with open(file1, 'wb') as f:
pickle.dump(model, f)
f.close()
#保存特征
file2 = vectorfile_path
with open(file2, 'wb') as f2:
pickle.dump(vector, f2)
f2.close()
```
通过main方法执行训练模型及保存模型
```python
if __name__ == '__main__':
#model,vector=trainLR('data/data.csv')
model, vector = trainSVM('data/data.csv')
saveModel(model,vector)
```
# 四、模型应用
通过pickle.load载入已经训练好的模型和特征,并用Flask暴露一个接口调用模型的预测方法进行预测。
## 载入已经训练好的模型
```python
#载入已经训练好的模型
def loadModel():
file1 = modelfile_path
with open(file1, 'rb') as f1:
model = pickle.load(f1)
f1.close()
file2 = vectorfile_path
with open(file2, 'rb') as f2:
vector = pickle.load(f2)
f2.close()
return model,vector
```
## 通过接口进行调用
```python
#通过接口进行调用
@app.route('/<path:path>')
def show_predict(path):
X_predict = []
X_predict.append(path)
model, vector = loadModel()
x = vector.transform(X_predict)
y_predict = model.predict(x)
print(y_predict[0])
return "url predict: "+str(y_predict[0])
```
# 五、应用效果
将需要检测的URL,输入到http://127.0.0.1:5000/后面,就可以根据输入的URL进行检测给出模型预测的结果。
http://127.0.0.1:5000/sohu.com/a/338823532_354899
![检测效果1](https://img-blog.csdnimg.cn/7f17697af706490ba693272f6f3780ad.png#pic_center)
http://127.0.0.1:5000/sohu.com/a/%3Cscript%3E/test
![检测效果2](https://img-blog.csdnimg.cn/d6e2542df8944ce4803da80fe0f9f145.png#pic_center)
本资源包括完整代码及测试数据集
博客:[http://xiejava.ishareread.com/](http://xiejava.ishareread.com/)
没有合适的资源?快使用搜索试试~ 我知道了~
机器学习实现恶意URL检测实战(代码+数据集)
共8个文件
py:3个
pkl:2个
txt:1个
需积分: 8 29 下载量 18 浏览量
2023-02-06
11:04:02
上传
评论 9
收藏 13.15MB ZIP 举报
温馨提示
恶意URL检测,对应与机器学习是个分类问题,这里分别用逻辑回归和SVM支持向量机分类模型进行模型实现。 恶意URL检测的方法很多,这里介绍通过机器学习分析URL文本分词词频来检测恶意URL。训练的数据集为开源数据集,通过机器学习训练检测模型,然后做了部分工程化的应用,将模型持久化,在应用的时候加载进来直接应用,不用重新进行训练。通过接口调用实现恶意URL检测预测判断。 恶意URL检测,对应与机器学习是个分类问题,这里分别用逻辑回归和SVM支持向量机分类模型进行模型实现。 本资源包括机器学习实现恶意URL检测实战的代码和数据集
资源推荐
资源详情
资源评论
收起资源包目录
机器学习实现恶意URL检测实战.zip (8个子文件)
data
data.csv 22.12MB
modeluse.py 968B
modeltrain.py 2KB
model
vector.pkl 14.3MB
model.pkl 2.85MB
requirements.txt 710B
README.md 6KB
DataUtils.py 973B
共 8 条
- 1
资源评论
xiejava1018
- 粉丝: 3w+
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功