同步操作将从 zhang_star/NBbook 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding:utf-8 -*-import sysimport urllibimport urlparseimport refrom hmmlearn import hmmimport numpy as npfrom sklearn.externals import joblibimport HTMLParserimport nltkimport csvimport matplotlib.pyplot as pltimport os#处理域名的最小长度MIN_LEN=10#状态个数N=8#最大似然概率阈值T=-50#模型文件名FILE_MODEL="9-2.m"def load_alexa(filename):domain_list=[]csv_reader = csv.reader(open(filename))for row in csv_reader:domain=row[1]if len(domain) >= MIN_LEN:domain_list.append(domain)return domain_listdef domain2ver(domain):ver=[]for i in range(0,len(domain)):ver.append([ord(domain[i])])return verdef train_hmm(domain_list):X = [[0]]X_lens = [1]for domain in domain_list:ver=domain2ver(domain)np_ver = np.array(ver)X=np.concatenate([X,np_ver])X_lens.append(len(np_ver))remodel = hmm.GaussianHMM(n_components=N, covariance_type="full", n_iter=100)remodel.fit(X,X_lens)joblib.dump(remodel, FILE_MODEL)return remodeldef load_dga(filename):domain_list=[]#xsxqeadsbgvpdke.co.uk,Domain used by Cryptolocker - Flashback DGA for 13 Apr 2017,2017年04月13日,# http://osint.bambenekconsulting.com/manual/cl.txtwith open(filename) as f:for line in f:domain=line.split(",")[0]if len(domain) >= MIN_LEN:domain_list.append(domain)return domain_listdef test_dga(remodel,filename):x=[]y=[]dga_cryptolocke_list = load_dga(filename)for domain in dga_cryptolocke_list:domain_ver=domain2ver(domain)np_ver = np.array(domain_ver)pro = remodel.score(np_ver)#print "SCORE:(%d) DOMAIN:(%s) " % (pro, domain)x.append(len(domain))y.append(pro)return x,ydef test_alexa(remodel,filename):x=[]y=[]alexa_list = load_alexa(filename)for domain in alexa_list:domain_ver=domain2ver(domain)np_ver = np.array(domain_ver)pro = remodel.score(np_ver)#print "SCORE:(%d) DOMAIN:(%s) " % (pro, domain)x.append(len(domain))y.append(pro)return x, ydef show_hmm():domain_list = load_alexa("../data/top-1000.csv")if not os.path.exists(FILE_MODEL):remodel=train_hmm(domain_list)remodel=joblib.load(FILE_MODEL)x_3,y_3=test_dga(remodel, "../data/dga-post-tovar-goz-1000.txt")x_2,y_2=test_dga(remodel,"../data/dga-cryptolocke-1000.txt")x_1,y_1=test_alexa(remodel, "../data/test-top-1000.csv")fig,ax=plt.subplots()ax.set_xlabel('Domain Length')ax.set_ylabel('HMM Score')ax.scatter(x_3,y_3,color='b',label="dga_post-tovar-goz",marker='o')ax.scatter(x_2, y_2, color='g', label="dga_cryptolock",marker='v')ax.scatter(x_1, y_1, color='r', label="alexa",marker='*')ax.legend(loc='best')plt.show()def get_aeiou(domain_list):x=[]y=[]for domain in domain_list:x.append(len(domain))count=len(re.findall(r'[aeiou]',domain.lower()))count=(0.0+count)/len(domain)y.append(count)return x,ydef show_aeiou():x1_domain_list = load_alexa("../data/top-1000.csv")x_1,y_1=get_aeiou(x1_domain_list)x2_domain_list = load_dga("../data/dga-cryptolocke-1000.txt")x_2,y_2=get_aeiou(x2_domain_list)x3_domain_list = load_dga("../data/dga-post-tovar-goz-1000.txt")x_3,y_3=get_aeiou(x3_domain_list)fig,ax=plt.subplots()ax.set_xlabel('Domain Length')ax.set_ylabel('AEIOU Score')ax.scatter(x_3,y_3,color='b',label="dga_post-tovar-goz",marker='o')ax.scatter(x_2, y_2, color='g', label="dga_cryptolock",marker='v')ax.scatter(x_1, y_1, color='r', label="alexa",marker='*')ax.legend(loc='best')plt.show()def get_uniq_char_num(domain_list):x=[]y=[]for domain in domain_list:x.append(len(domain))count=len(set(domain))count=(0.0+count)/len(domain)y.append(count)return x,ydef show_uniq_char_num():x1_domain_list = load_alexa("../data/top-1000.csv")x_1,y_1=get_uniq_char_num(x1_domain_list)x2_domain_list = load_dga("../data/dga-cryptolocke-1000.txt")x_2,y_2=get_uniq_char_num(x2_domain_list)x3_domain_list = load_dga("../data/dga-post-tovar-goz-1000.txt")x_3,y_3=get_uniq_char_num(x3_domain_list)fig,ax=plt.subplots()ax.set_xlabel('Domain Length')ax.set_ylabel('UNIQ CHAR NUMBER')ax.scatter(x_3,y_3,color='b',label="dga_post-tovar-goz",marker='o')ax.scatter(x_2, y_2, color='g', label="dga_cryptolock",marker='v')ax.scatter(x_1, y_1, color='r', label="alexa",marker='*')ax.legend(loc='best')plt.show()def count2string_jarccard_index(a,b):x=set(' '+a[0])y=set(' '+b[0])for i in range(0,len(a)-1):x.add(a[i]+a[i+1])x.add(a[len(a)-1]+' ')for i in range(0,len(b)-1):y.add(b[i]+b[i+1])y.add(b[len(b)-1]+' ')return (0.0+len(x-y))/len(x|y)def get_jarccard_index(a_list,b_list):x=[]y=[]for a in a_list:j=0.0for b in b_list:j+=count2string_jarccard_index(a,b)x.append(len(a))y.append(j/len(b_list))return x,ydef show_jarccard_index():x1_domain_list = load_alexa("../data/top-1000.csv")x_1,y_1=get_jarccard_index(x1_domain_list,x1_domain_list)x2_domain_list = load_dga("../data/dga-cryptolocke-1000.txt")x_2,y_2=get_jarccard_index(x2_domain_list,x1_domain_list)x3_domain_list = load_dga("../data/dga-post-tovar-goz-1000.txt")x_3,y_3=get_jarccard_index(x3_domain_list,x1_domain_list)fig,ax=plt.subplots()ax.set_xlabel('Domain Length')ax.set_ylabel('JARCCARD INDEX')ax.scatter(x_3,y_3,color='b',label="dga_post-tovar-goz",marker='o')ax.scatter(x_2, y_2, color='g', label="dga_cryptolock",marker='v')ax.scatter(x_1, y_1, color='r', label="alexa",marker='*')ax.legend(loc='lower right')plt.show()if __name__ == '__main__':#show_hmm()#show_aeiou()#show_uniq_char_num()show_jarccard_index()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。