# 数据读取 import pandas as pd # 数据处理 from sklearn.utils import shuffle from tensorflow.keras.preprocessing import sequence import numpy as np # 划分数据集 from sklearn.model_selection import train_test_split # 模型构建 from keras.models import Sequential from keras.layers import Dense, LSTM # 加载模型 from keras.models import load_model
defread_dga(file_path): withopen(file_path, 'r') as f: lines = f.readlines()[18:1324316] dga_list = [line.split('\t')[1].split('\s')[0] for line in lines]
defdata_process(data_list): # 将字母转化为Ascall码,并做归一化处理 X = [[ord(char) - 96for char in domain] for domain in data_list] # 填充数据,使得每个序列长度一致 X = sequence.pad_sequences(X, maxlen=253) return X
# X = data_process(dga_list + umbrella_list) # y = np.array([1] * len(dga_list) + [0] * len(umbrella_list)) # # X, y = shuffle(X, y, random_state=42) # X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
defmodel_save(model): save = input("是否保存模型到model.h5(y/n):") if save == "Y"or save == "y": model.save("model.h5") returnTrue else: returnFalse
# model_save(model)
model = load_model('model.h5') whileTrue: domain_list = input("输入需要检测的域名:").split('\n') X = [[ord(char) - 96for char in domain] for domain in domain_list] X = sequence.pad_sequences(X, maxlen=253) # print(X.shape) X = np.reshape(X, (X.shape[0], X.shape[1], 1)) # print(X.shape) y = model.predict(X) if y > 0.5: print(y, ":预测结果为dga域名") else: print(1-y, ":预测结果为正常的域名")