《Web安全之机器学习入门》笔记:第七章 7.6朴素贝叶斯检测DGA域名

本文阅读 2 分钟

        DGA(域名生成算法(Domain Generation Algorithm)是一种僵尸网络利用随机字符来生成C&C域名,从而逃避安全设备域名黑名单检测的技术手段。

        1.白样本

        使用alexa前1000域名(679个样本)作为白样本,标记为0,由于域名长度设置最低长度10,所以选取到679个样本,

x1_domain_list = load_alexa("../data/top-1000.csv")

        处理逻辑如下所示:

#处理域名的最小长度
MIN_LEN=10

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_list

        2.黑样本

        使用dga-cryptolocker(1000个样本)和dga-tovar-goz(1000个样本)做为黑样本,代码逻辑如下:

x2_domain_list = load_dga("../data/dga-cryptolocke-1000.txt")
    x3_domain_list = load_dga("../data/dga-post-tovar-goz-1000.txt")

        load_dga函数详细逻辑

def 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.txt
    with open(filename) as f:
        for line in f:
            domain=line.split(",")[0]
            if len(domain) >= MIN_LEN:
                domain_list.append(domain)
    return  domain_list

        3.构造数据集

x_domain_list=np.concatenate((x1_domain_list, x2_domain_list,x3_domain_list))

    y1=[0]*len(x1_domain_list)
    y2=[1]*len(x2_domain_list)
    y3=[2]*len(x3_domain_list)

    y=np.concatenate((y1, y2,y3))

        打印x与y的size,如下所示为2679(白样本679,黑样本1000+1000)

print(len(x_domain_list), len(y))

        4.N-gram特征化处理

cv = CountVectorizer(ngram_range=(2, 2), decode_error="ignore",
                                          token_pattern=r"\w", min_df=1)
    x= cv.fit_transform(x_domain_list).toarray()

        可以看到,这段代码是以2-gram(ngram-range=[2,2])处理dga域名,切割单元是字符(token_pattern=w),也就是说是整个数据集合的2-gram结果作为词汇表并并行映射,得到特征化的向量,我们看一下特征值

print(cv.get_feature_names())

        结果如下所示

['0 0', '0 1', '0 2', '0 3', '0 4', '0 5', '0 6', '0 7', '0 8', '0 9', '0 a', '0 b', '0 c', '0 d', '0 e', '0 f', '0 g', '0 h', '0 i', '0 j', '0 k', '0 l', '0 m', '0 n', '0 o', '0 p', '0 q', '0 r', '0 s', '0 t', '0 u', '0 v', '0 w', '0 x', '0 y', '0 z', '1 0', '1 1', '1 2', '1 3', '1 4', '1 5', '1 6', '1 7', '1 8', '1 9', '1 a', '1 b', '1 c', '1 d', '1 e', '1 f', '1 g', '1 h', '1 i', '1 j', '1 k', '1 l', '1 m', '1 n', '1 o', '1 p', '1 q', '1 r', '1 s', '1 t', '1 u', '1 v', '1 w', '1 x', '1 y', '1 z', '2 0', '2 1', '2 2', '2 3', '2 4', '2 5', '2 6', '2 7', '2 8', '2 9', '2 a', '2 b', '2 c', '2 d', '2 e', '2 f', '2 g', '2 h', '2 i', '2 j', '2 k', '2 l', '2 m', '2 n', '2 o', '2 p', '2 q', '2 r', '2 s', '2 t', '2 u', '2 v', '2 w', '2 x', '2 y', '2 z', '3 0', '3 1', '3 2', '3 3', '3 4', '3 5', '3 6', '3 7', '3 8', '3 9', '3 a', '3 b', '3 c', '3 d', '3 e', '3 f', '3 g', '3 h', '3 i', '3 j', '3 k', '3 l', '3 m', '3 n', '3 o', '3 p', '3 q', '3 r', '3 s', '3 t', '3 u', '3 v', '3 w', '3 x', '3 y', '3 z', '4 0', '4 1', '4 2', '4 3', '4 4', '4 5', '4 6', '4 7', '4 8', '4 9', '4 a', '4 b', '4 c', '4 d', '4 e', '4 f', '4 g', '4 h', '4 i', '4 j', '4 k', '4 l', '4 m', '4 n', '4 o', '4 p', '4 q', '4 r', '4 s', '4 t', '4 u', '4 v', '4 w', '4 x', '4 y', '4 z', '5 0', '5 1', '5 2', '5 3', '5 4', '5 5', '5 6', '5 7', '5 8', '5 9', '5 a', '5 b', '5 c', '5 d', '5 e', '5 f', '5 g', '5 h', '5 i', '5 j', '5 k', '5 l', '5 m', '5 n', '5 o', '5 p', '5 q', '5 r', '5 s', '5 t', '5 u', '5 v', '5 w', '5 x', '5 y', '5 z', '6 0', '6 1', '6 2', '6 3', '6 4', '6 5', '6 6', '6 7', '6 8', '6 9', '6 a', '6 b', '6 c', '6 d', '6 e', '6 f', '6 g', '6 h', '6 i', '6 j', '6 k', '6 l', '6 m', '6 n', '6 o', '6 p', '6 q', '6 r', '6 s', '6 t', '6 u', '6 v', '6 w', '6 x', '6 y', '6 z', '7 0', '7 1', '7 2', '7 3', '7 4', '7 5', '7 6', '7 7', '7 8', '7 9', '7 a', '7 b', '7 c', '7 d', '7 e', '7 f', '7 g', '7 h', '7 i', '7 j', '7 k', '7 l', '7 m', '7 n', '7 o', '7 p', '7 q', '7 r', '7 s', '7 t', '7 u', '7 v', '7 w', '7 x', '7 y', '7 z', '8 0', '8 1', '8 2', '8 3', '8 4', '8 5', '8 6', '8 7', '8 8', '8 9', '8 a', '8 b', '8 c', '8 d', '8 e', '8 f', '8 g', '8 h', '8 i', '8 j', '8 k', '8 l', '8 m', '8 n', '8 o', '8 p', '8 q', '8 r', '8 s', '8 t', '8 u', '8 v', '8 w', '8 x', '8 y', '8 z', '9 0', '9 1', '9 2', '9 3', '9 4', '9 5', '9 6', '9 7', '9 8', '9 9', '9 a', '9 b', '9 c', '9 d', '9 e', '9 f', '9 g', '9 h', '9 i', '9 j', '9 k', '9 l', '9 m', '9 n', '9 o', '9 p', '9 q', '9 r', '9 s', '9 t', '9 u', '9 v', '9 w', '9 x', '9 y', '9 z', 'a 0', 'a 1', 'a 2', 'a 3', 'a 4', 'a 5', 'a 6', 'a 7', 'a 8', 'a 9', 'a a', 'a b', 'a c', 'a d', 'a e', 'a f', 'a g', 'a h', 'a i', 'a j', 'a k', 'a l', 'a m', 'a n', 'a o', 'a p', 'a q', 'a r', 'a s', 'a t', 'a u', 'a v', 'a w', 'a x', 'a y', 'a z', 'b 0', 'b 1', 'b 2', 'b 3', 'b 4', 'b 5', 'b 6', 'b 7', 'b 8', 'b 9', 'b a', 'b b', 'b c', 'b d', 'b e', 'b f', 'b g', 'b h', 'b i', 'b j', 'b k', 'b l', 'b m', 'b n', 'b o', 'b p', 'b q', 'b r', 'b s', 'b t', 'b u', 'b v', 'b w', 'b x', 'b y', 'b z', 'c 0', 'c 1', 'c 2', 'c 3', 'c 4', 'c 5', 'c 6', 'c 7', 'c 8', 'c 9', 'c a', 'c b', 'c c', 'c d', 'c e', 'c f', 'c g', 'c h', 'c i', 'c j', 'c k', 'c l', 'c m', 'c n', 'c o', 'c p', 'c q', 'c r', 'c s', 'c t', 'c u', 'c v', 'c w', 'c x', 'c y', 'c z', 'd 0', 'd 1', 'd 2', 'd 3', 'd 4', 'd 5', 'd 6', 'd 7', 'd 8', 'd 9', 'd a', 'd b', 'd c', 'd d', 'd e', 'd f', 'd g', 'd h', 'd i', 'd j', 'd k', 'd l', 'd m', 'd n', 'd o', 'd p', 'd q', 'd r', 'd s', 'd t', 'd u', 'd v', 'd w', 'd x', 'd y', 'd z', 'e 0', 'e 1', 'e 2', 'e 3', 'e 4', 'e 5', 'e 6', 'e 7', 'e 8', 'e 9', 'e a', 'e b', 'e c', 'e d', 'e e', 'e f', 'e g', 'e h', 'e i', 'e j', 'e k', 'e l', 'e m', 'e n', 'e o', 'e p', 'e q', 'e r', 'e s', 'e t', 'e u', 'e v', 'e w', 'e x', 'e y', 'e z', 'f 0', 'f 1', 'f 2', 'f 3', 'f 4', 'f 5', 'f 6', 'f 7', 'f 8', 'f 9', 'f a', 'f b', 'f c', 'f d', 'f e', 'f f', 'f g', 'f h', 'f i', 'f j', 'f k', 'f l', 'f m', 'f n', 'f o', 'f p', 'f q', 'f r', 'f s', 'f t', 'f u', 'f v', 'f w', 'f x', 'f y', 'f z', 'g 0', 'g 1', 'g 2', 'g 3', 'g 4', 'g 5', 'g 6', 'g 7', 'g 8', 'g 9', 'g a', 'g b', 'g c', 'g d', 'g e', 'g f', 'g g', 'g h', 'g i', 'g j', 'g k', 'g l', 'g m', 'g n', 'g o', 'g p', 'g q', 'g r', 'g s', 'g t', 'g u', 'g v', 'g w', 'g x', 'g y', 'g z', 'h 0', 'h 1', 'h 2', 'h 3', 'h 4', 'h 5', 'h 6', 'h 7', 'h 8', 'h 9', 'h a', 'h b', 'h c', 'h d', 'h e', 'h f', 'h g', 'h h', 'h i', 'h j', 'h k', 'h l', 'h m', 'h n', 'h o', 'h p', 'h q', 'h r', 'h s', 'h t', 'h u', 'h v', 'h w', 'h x', 'h y', 'h z', 'i 0', 'i 1', 'i 2', 'i 3', 'i 4', 'i 5', 'i 6', 'i 7', 'i 8', 'i 9', 'i a', 'i b', 'i c', 'i d', 'i e', 'i f', 'i g', 'i h', 'i i', 'i j', 'i k', 'i l', 'i m', 'i n', 'i o', 'i p', 'i q', 'i r', 'i s', 'i t', 'i u', 'i v', 'i w', 'i x', 'i y', 'i z', 'j 0', 'j 1', 'j 2', 'j 3', 'j 4', 'j 5', 'j 6', 'j 7', 'j 8', 'j 9', 'j a', 'j b', 'j c', 'j d', 'j e', 'j f', 'j g', 'j h', 'j i', 'j j', 'j k', 'j l', 'j m', 'j n', 'j o', 'j p', 'j q', 'j r', 'j s', 'j t', 'j u', 'j v', 'j w', 'j x', 'j y', 'j z', 'k 0', 'k 1', 'k 2', 'k 3', 'k 4', 'k 5', 'k 6', 'k 7', 'k 8', 'k 9', 'k a', 'k b', 'k c', 'k d', 'k e', 'k f', 'k g', 'k h', 'k i', 'k j', 'k k', 'k l', 'k m', 'k n', 'k o', 'k p', 'k q', 'k r', 'k s', 'k t', 'k u', 'k v', 'k w', 'k x', 'k y', 'k z', 'l 0', 'l 1', 'l 2', 'l 3', 'l 4', 'l 5', 'l 6', 'l 7', 'l 8', 'l 9', 'l a', 'l b', 'l c', 'l d', 'l e', 'l f', 'l g', 'l h', 'l i', 'l j', 'l k', 'l l', 'l m', 'l n', 'l o', 'l p', 'l q', 'l r', 'l s', 'l t', 'l u', 'l v', 'l w', 'l x', 'l y', 'l z', 'm 0', 'm 1', 'm 2', 'm 3', 'm 4', 'm 5', 'm 6', 'm 7', 'm 8', 'm 9', 'm a', 'm b', 'm c', 'm d', 'm e', 'm f', 'm g', 'm h', 'm i', 'm j', 'm k', 'm l', 'm m', 'm n', 'm o', 'm p', 'm q', 'm r', 'm s', 'm t', 'm u', 'm v', 'm w', 'm x', 'm y', 'm z', 'n 0', 'n 1', 'n 2', 'n 3', 'n 4', 'n 5', 'n 6', 'n 7', 'n 8', 'n 9', 'n a', 'n b', 'n c', 'n d', 'n e', 'n f', 'n g', 'n h', 'n i', 'n j', 'n k', 'n l', 'n m', 'n n', 'n o', 'n p', 'n q', 'n r', 'n s', 'n t', 'n u', 'n v', 'n w', 'n x', 'n y', 'n z', 'o 0', 'o 1', 'o 2', 'o 3', 'o 4', 'o 5', 'o 6', 'o 7', 'o 8', 'o 9', 'o a', 'o b', 'o c', 'o d', 'o e', 'o f', 'o g', 'o h', 'o i', 'o j', 'o k', 'o l', 'o m', 'o n', 'o o', 'o p', 'o q', 'o r', 'o s', 'o t', 'o u', 'o v', 'o w', 'o x', 'o y', 'o z', 'p 0', 'p 1', 'p 2', 'p 3', 'p 4', 'p 5', 'p 6', 'p 7', 'p 8', 'p 9', 'p a', 'p b', 'p c', 'p d', 'p e', 'p f', 'p g', 'p h', 'p i', 'p j', 'p k', 'p l', 'p m', 'p n', 'p o', 'p p', 'p q', 'p r', 'p s', 'p t', 'p u', 'p v', 'p w', 'p x', 'p y', 'p z', 'q 0', 'q 1', 'q 2', 'q 3', 'q 4', 'q 5', 'q 6', 'q 7', 'q 8', 'q 9', 'q a', 'q b', 'q c', 'q d', 'q e', 'q f', 'q g', 'q h', 'q i', 'q j', 'q k', 'q l', 'q m', 'q n', 'q o', 'q p', 'q q', 'q r', 'q s', 'q t', 'q u', 'q v', 'q w', 'q x', 'q y', 'q z', 'r 0', 'r 1', 'r 2', 'r 3', 'r 4', 'r 5', 'r 6', 'r 7', 'r 8', 'r 9', 'r a', 'r b', 'r c', 'r d', 'r e', 'r f', 'r g', 'r h', 'r i', 'r j', 'r k', 'r l', 'r m', 'r n', 'r o', 'r p', 'r q', 'r r', 'r s', 'r t', 'r u', 'r v', 'r w', 'r x', 'r y', 'r z', 's 0', 's 1', 's 2', 's 3', 's 4', 's 5', 's 6', 's 7', 's 8', 's 9', 's a', 's b', 's c', 's d', 's e', 's f', 's g', 's h', 's i', 's j', 's k', 's l', 's m', 's n', 's o', 's p', 's q', 's r', 's s', 's t', 's u', 's v', 's w', 's x', 's y', 's z', 't 0', 't 1', 't 2', 't 3', 't 4', 't 5', 't 6', 't 7', 't 8', 't 9', 't a', 't b', 't c', 't d', 't e', 't f', 't g', 't h', 't i', 't j', 't k', 't l', 't m', 't n', 't o', 't p', 't q', 't r', 't s', 't t', 't u', 't v', 't w', 't x', 't y', 't z', 'u 0', 'u 1', 'u 2', 'u 3', 'u 4', 'u 5', 'u 6', 'u 7', 'u 8', 'u 9', 'u a', 'u b', 'u c', 'u d', 'u e', 'u f', 'u g', 'u h', 'u i', 'u j', 'u k', 'u l', 'u m', 'u n', 'u o', 'u p', 'u q', 'u r', 'u s', 'u t', 'u u', 'u v', 'u w', 'u x', 'u y', 'u z', 'v 0', 'v 1', 'v 2', 'v 3', 'v 4', 'v 5', 'v 6', 'v 7', 'v 8', 'v 9', 'v a', 'v b', 'v c', 'v d', 'v e', 'v f', 'v g', 'v h', 'v i', 'v j', 'v k', 'v l', 'v m', 'v n', 'v o', 'v p', 'v q', 'v r', 'v s', 'v t', 'v u', 'v v', 'v w', 'v x', 'v y', 'v z', 'w 0', 'w 1', 'w 2', 'w 3', 'w 4', 'w 5', 'w 6', 'w 7', 'w 8', 'w 9', 'w a', 'w b', 'w c', 'w d', 'w e', 'w f', 'w g', 'w h', 'w i', 'w j', 'w k', 'w l', 'w m', 'w n', 'w o', 'w p', 'w q', 'w r', 'w s', 'w t', 'w u', 'w v', 'w w', 'w x', 'w y', 'w z', 'x 0', 'x 1', 'x 2', 'x 3', 'x 4', 'x 5', 'x 6', 'x 7', 'x 8', 'x 9', 'x a', 'x b', 'x c', 'x d', 'x e', 'x f', 'x g', 'x h', 'x i', 'x j', 'x k', 'x l', 'x m', 'x n', 'x o', 'x p', 'x q', 'x r', 'x s', 'x t', 'x u', 'x v', 'x w', 'x x', 'x y', 'x z', 'y 0', 'y 1', 'y 2', 'y 3', 'y 4', 'y 5', 'y 6', 'y 7', 'y 8', 'y 9', 'y a', 'y b', 'y c', 'y d', 'y e', 'y f', 'y g', 'y h', 'y i', 'y j', 'y k', 'y l', 'y m', 'y n', 'y o', 'y p', 'y q', 'y r', 'y s', 'y t', 'y u', 'y v', 'y w', 'y x', 'y y', 'y z', 'z 0', 'z 1', 'z 2', 'z 3', 'z 4', 'z 5', 'z 6', 'z 7', 'z 8', 'z 9', 'z a', 'z b', 'z c', 'z d', 'z e', 'z f', 'z g', 'z h', 'z i', 'z j', 'z k', 'z l', 'z m', 'z n', 'z o', 'z p', 'z q', 'z r', 'z s', 'z t', 'z u', 'z v', 'z w', 'z x', 'z y', 'z z']

        再看一下词汇表

print(cv.vocabulary_)

        结果如下

{'g o': 600, 'o o': 888, 'o g': 880, 'g l': 597, 'l e': 770, 'e c': 516, 'c o': 456, 'o m': 886, 'y o': 1248, 'o u': 894, 'u t': 1109, 't u': 1074, 'u b': 1091, 'b e': 410, 'f a': 550, 'a c': 372, 'c e': 446, 'e b': 515, 'b o': 420, 'o k': 884, 'k c': 732, 'w i': 1170, 'i k': 668, 'k i': 738, 'i p': 673, 'p e': 914, 'e d': 517, 'd i': 486, 'i a': 658, 'a o': 384, 'o r': 891, 'r g': 988, 'r e': 986, 'd d': 481, 'i t': 677, 't c': 1056, 'o i': 882, 'i n': 671, 't w': 1076, 't t': 1073, 't e': 1058, 'e r': 531, 'r c': 984, 't a': 1054, 'o b': 875, 'b a': 406, 'o c': 876, 'a m': 382, 'm a': 802, 'a z': 395, 'z o': 1284, 'o n': 887, 'n c': 840, 'o j': 883, 'j p': 709, 'n s': 856, 's t': 1037, 'a g': 376, 'g r': 603, 'r a': 982, 'm c': 804, 's i': 1026, 'n a': 838, 'c n': 455, 'u k': 1100, 'l i': 774, 'n k': 848, 'k e': 734, 'm b': 803, 'b r': 423, 'y a': 1234, 'a h': 377, 'h o': 636, 'n e': 842, 'e t': 533, 't f': 1059, 'f l': 561, 'i x': 681, 'x c': 1200, 'm h': 809, 'h k': 632, 'h a': 622, 'o 1': 865, '1 2': 38, '2 3': 75, '3 c': 120, 'p o': 924, 'r n': 995, 'n h': 845, 'h u': 642, 'b c': 408, 'a l': 381, 'i e': 662, 'e x': 537, 'x p': 1213, 'p r': 927, 'e s': 532, 's s': 1036, 's c': 1020, 'w o': 1176, 'r d': 985, 'd p': 493, 'u m': 1102, 'b l': 417, 'l r': 783, 'm i': 810, 'i c': 660, 'c r': 459, 'r o': 996, 'o s': 892, 's o': 1032, 'o f': 879, 'f t': 569, 'i v': 679, 'v e': 1130, 'e j': 523, 'j a': 694, 'a s': 388, 's m': 1030, 'c k': 452, 'k o': 744, 'o v': 895, 'r f': 987, 'l o': 780, 'o w': 896, 'w c': 1164, 'd e': 482, 'a i': 378, 'i l': 669, 'l t': 785, 't m': 1066, 'l l': 777, 'l c': 768, 'c l': 453, 'l k': 776, 'k d': 733, 'd s': 496, 'm m': 814, 'm x': 825, 'f f': 555, 'f i': 558, 'g s': 604, 's p': 1033, 'o t': 893, 'g i': 594, 't h': 1061, 'p i': 918, 'n t': 857, 'x v': 1219, 'v i': 1134, 'i d': 661, 'e o': 528, 't o': 1068, 'n l': 849, 'o p': 889, 'p a': 910, 'a d': 373, 's n': 1031, 'm t': 821, 't r': 1071, 'w h': 1169, 'a t': 389, 't s': 1072, 's a': 1018, 'a p': 385, 'p p': 925, 'p c': 912, 'a u': 390, 'a y': 394, 'y c': 1236, 'y p': 1249, 's e': 1022, 'r v': 1003, 'x h': 1205, 'm s': 820, 'i s': 676, 'x n': 1211, 't n': 1067, 'c c': 444, 'd r': 495, 'p b': 911, 'o x': 897, 'n g': 844, 'g a': 586, 'c a': 442, 'n 5': 833, '5 5': 185, '5 c': 192, 'e u': 534, 'u s': 1108, 'e n': 527, 'm e': 806, 'e g': 520, 'm p': 817, 'p k': 920, 'i g': 664, 's l': 1029, 'u n': 1103, 'n d': 841, 'd c': 480, 'u d': 1093, 'a r': 387, 'h e': 626, 'e p': 529, 'i r': 675, 'u p': 1105, 'p t': 929, 'o d': 877, 'd o': 492, 'w n': 1175, 'd a': 478, 'a n': 383, 'c h': 449, 'x x': 1221, 'l y': 790, 'y m': 1246, 'm o': 816, 't i': 1062, 'i o': 672, 'g c': 588, 'k s': 748, 's g': 1024, 'g e': 590, 'e a': 514, 'y n': 1247, 'a w': 392, 'w s': 1180, 'a k': 380, 'k u': 750, 'l a': 766, 'g n': 599, 'e w': 536, 'n y': 862, 'y t': 1253, 'i m': 670, 'g g': 592, 't 3': 1047, '3 6': 114, '6 5': 221, 's f': 1023, 'f o': 564, 'u a': 1090, 'a b': 371, 'k y': 754, 'g u': 606, 'u y': 1114, 'y e': 1238, 'n v': 859, 'v n': 1139, 'n i': 846, 's b': 1019, 'b i': 414, 'o z': 899, 'z a': 1270, 'r i': 990, 'i b': 659, 'b u': 426, 'n n': 851, 'i f': 663, 'f y': 574, 'm v': 823, 'c t': 461, 's h': 1025, 'u z': 1115, 'z z': 1295, 'z f': 1275, 'f e': 554, 'e e': 518, 'a v': 391, 'e f': 519, 'f r': 567, 'm n': 815, 'u r': 1107, 'r b': 983, 'x i': 1206, 't y': 1078, 'y f': 1239, 'm u': 822, 'a f': 375, 'u o': 1104, 'o l': 885, 'e v': 535, 'r t': 1001, 'p h': 917, 'k a': 730, 'i h': 665, 'h i': 630, 'i z': 683, 'z m': 1282, 'r k': 992, 'w 3': 1155, '3 s': 136, 'l s': 784, 'h n': 635, 'r r': 999, 'r u': 1002, 'z i': 1278, 'd y': 502, 'o a': 874, 'w a': 1162, 'g t': 605, 'n p': 853, 'm g': 808, 'k r': 747, 'g f': 591, 'v a': 1126, 'r z': 1007, 'z e': 1274, 'h 3': 615, 'w e': 1166, 'u f': 1095, 'i w': 680, 'e l': 525, 'd t': 497, 'r j': 991, 'b p': 421, 'n b': 839, 'e i': 522, 'p l': 921, 'l u': 786, 'l m': 778, 'h c': 624, 'p s': 928, 'n o': 852, 'b y': 430, 'v r': 1143, 't l': 1065, 't b': 1055, 'd n': 491, 'd v': 499, 'm y': 826, 'b s': 424, 'c b': 443, 'b n': 419, 'k b': 731, 'j o': 708, 's w': 1040, 'k n': 743, 'u i': 1098, 'p u': 930, 'n 6': 834, '6 c': 228, 'd l': 489, 'u c': 1092, 'x t': 1217, 'y k': 1244, 'k l': 741, 'n z': 863, 'r s': 1000, 't d': 1057, 's k': 1028, 'e m': 526, 'p 3': 903, '3 o': 132, 'b d': 409, 'n f': 843, 'k m': 742, 'a 1': 361, '1 0': 36, '0 1': 1, '1 c': 48, 't v': 1075, 'v o': 1140, 'u u': 1110, 'p n': 923, 'c i': 450, 'i u': 678, 'k p': 745, 'v c': 1128, 'h g': 628, 'b t': 425, 'x o': 1212, 'n q': 854, 'q i': 954, 'z c': 1272, 's u': 1038, 'p y': 934, 'y s': 1252, 'a q': 386, 'q s': 964, 'p w': 932, 'w w': 1184, 'w y': 1186, 's y': 1042, 'y d': 1237, 'd h': 485, 'u e': 1094, 'i j': 667, 'j i': 702, 'x f': 1203, 'z p': 1285, 'd u': 498, 'r y': 1006, 'i y': 682, 'y u': 1254, 'e h': 521, 'v s': 1144, 'c u': 462, 'u w': 1112, 'r l': 993, 'l n': 779, 'h d': 625, 'd f': 483, 'f c': 552, 'l d': 769, 'b b': 407, 'l p': 781, 'r 7': 979, '7 c': 264, 'o e': 878, 'm k': 812, 'k w': 752, 'u l': 1101, '4 d': 157, 'z l': 1281, 'y r': 1251, 'c s': 460, 'l b': 767, 'b h': 413, 'k g': 736, 'r m': 994, 's d': 1021, 'x a': 1198, 't 4': 1048, '4 f': 159, '4 s': 172, 'x d': 1201, 'h 2': 614, '2 t': 101, 'm d': 805, 'k t': 749, 'p x': 933, 'y h': 1241, 't z': 1079, 'z 2': 1262, '2 e': 86, 'k h': 737, 'v b': 1127, 'd g': 484, 'd k': 488, 'a a': 370, 'x s': 1216, 'd m': 490, 't p': 1069, 'e y': 538, 'f m': 562, 'a e': 374, 'l x': 789, 'x m': 1210, 'm w': 824, 'u j': 1099, 'u x': 1113, 'e 3': 507, 'w t': 1181, 'e k': 524, 'p d': 913, '0 4': 4, '4 c': 156, 'o y': 898, 'm 7': 799, 'd b': 479, 'q u': 966, 'g h': 593, 'h t': 641, 'h r': 639, 'j r': 711, 'j c': 696, 'f u': 570, 'm l': 813, 't j': 1063, 't 2': 1046, '2 m': 94, '3 n': 131, 'o 2': 866, '2 c': 84, 'h p': 637, 'k k': 740, 'y i': 1242, 's q': 1034, 'n m': 850, 'x l': 1209, 'e z': 539, 'v m': 1138, 'z t': 1289, 'w u': 1182, 'w g': 1168, 'v u': 1146, 'l v': 787, 'n w': 860, 'l f': 771, 'y b': 1235, 'h s': 640, 't 9': 1053, '9 b': 335, 'y 3': 1227, '3 d': 121, 'n j': 847, 'j e': 698, 'd w': 500, 'c d': 445, 'p m': 922, 'h y': 646, 'r p': 997, 'h f': 627, 'a j': 379, 'j y': 718, 'z k': 1280, 'g m': 598, '3 m': 130, '5 1': 181, '1 s': 64, 'h w': 644, 'e 0': 504, 'j u': 714, 'b 0': 396, 's r': 1035, 'z h': 1277, 'l g': 772, 'y g': 1240, 'c p': 457, 'r h': 989, 'u g': 1096, 'g k': 596, 'i q': 674, 't k': 1064, 'w k': 1172, 'h h': 629, 'y q': 1250, 'q v': 967, 'v x': 1149, 'f q': 566, 'q c': 948, 'q e': 950, 'x r': 1215, 'a x': 393, 'h x': 645, 'p g': 916, 'g d': 589, 'd j': 487, 'j h': 701, 'h q': 638, 'g q': 602, 'q r': 963, 'b m': 418, 'x y': 1222, 'q y': 970, 'h j': 631, 'j x': 717, 't q': 1070, 'f p': 565, 'c f': 447, 'f j': 559, 'j k': 704, 'b w': 428, 'w p': 1177, 'w q': 1178, 'c v': 463, 'l q': 782, 'v k': 1136, 'n x': 861, 'j s': 712, 'g p': 601, 'v t': 1145, 'x j': 1207, 'j f': 699, 'f g': 556, 's v': 1039, 'v p': 1141, 'u q': 1106, 'q j': 955, 'j w': 716, 'g x': 609, 'h l': 633, 'l j': 775, 'c j': 451, 'j n': 707, 'g w': 608, 'q h': 953, 'h b': 623, 'b g': 412, 'x g': 1204, 'j q': 710, 'q f': 951, 'f w': 572, 'w f': 1167, 'v f': 1131, 'f s': 568, 'w l': 1173, 'q k': 956, 'y w': 1256, 'x w': 1220, 'e q': 530, 'q o': 960, 'w v': 1183, 'v g': 1132, 'y j': 1243, 'j l': 705, 'p f': 915, 'y x': 1257, 'f b': 551, 'b j': 415, 'j t': 713, 'c q': 458, 'v y': 1150, 'i i': 666, 'n r': 855, 'p v': 931, 'c g': 448, 'q p': 961, 'y l': 1245, 'b q': 422, 'j b': 695, 't x': 1077, 'f h': 557, 'q b': 947, 'f k': 560, 'g j': 595, 'g y': 610, 'y v': 1255, 'q n': 959, 'w r': 1179, 'j g': 700, 'q l': 957, 'k v': 751, 'v l': 1137, 'q q': 962, 'q x': 969, 'x q': 1214, 'q m': 958, 'k f': 735, 'b k': 416, 'u v': 1111, 'j v': 715, 'r w': 1004, 'w b': 1163, 'o h': 881, 'v v': 1147, 'v h': 1133, 'h v': 643, 's j': 1027, 'p j': 919, 'd q': 494, 'c m': 454, 'o q': 890, 'f d': 553, 'm q': 818, 'x k': 1208, 'k j': 739, 'r q': 998, 'w d': 1165, 'q w': 968, 'j d': 697, 't g': 1060, 'v q': 1142, 'q a': 946, 'v j': 1135, 'f v': 571, 'v w': 1148, 'm j': 811, 'y y': 1258, 'd x': 501, 'r x': 1005, 'm r': 819, 'x b': 1199, 'l w': 788, 'q t': 965, 'q d': 949, 'k x': 753, 'x u': 1218, 'c x': 465, 'x e': 1202, 'w m': 1174, 'c y': 466, 'h m': 634, 'v d': 1129, 'm f': 807, 'b f': 411, 'j j': 703, 'p q': 926, 'c w': 464, 's x': 1041, 'q g': 952, 'u h': 1097, 'b x': 429, 'g b': 587, 'n u': 858, 'w x': 1185, 'l h': 773, 'b v': 427, 'j m': 706, 'f n': 563, 'w j': 1171, 'f x': 573, 'k q': 746, 'g v': 607, '1 v': 67, 'w 7': 1159, '7 3': 255, '3 2': 110, '2 f': 87, 'l 1': 757, '1 x': 69, 'k 0': 720, '0 d': 13, 'd 9': 477, '9 g': 340, 's 1': 1009, '1 h': 53, '2 j': 91, 'y 9': 1233, '9 i': 342, 'b 2': 398, '2 y': 106, '1 n': 59, 'h 1': 613, '1 o': 60, 'f 3': 543, '3 7': 115, '7 h': 269, '1 p': 61, 'p 4': 904, '4 0': 144, '0 f': 15, 'f 8': 548, '8 0': 288, '0 b': 11, 'y 4': 1228, '4 v': 175, 'v 2': 1118, '2 4': 76, '4 q': 170, 'b 5': 401, '5 q': 206, 'q 1': 937, '1 3': 39, '3 q': 134, 'q 9': 945, '9 m': 346, 'm 9': 801, '9 y': 358, 'y 1': 1225, '1 1': 37, '1 5': 41, '5 h': 197, '8 c': 300, '1 7': 43, '7 a': 262, 'g 7': 583, '7 l': 273, 'v 9': 1125, '9 3': 327, '6 x': 249, 'x 4': 1192, '4 k': 164, 'c 2': 434, '2 1': 73, '0 z': 35, 'z b': 1271, '1 d': 49, '8 t': 317, 't 5': 1049, '5 6': 186, '6 d': 229, 'k 1': 721, 'v 1': 1117, 's 8': 1016, '8 r': 315, 'z d': 1273, '1 e': 50, 'l 0': 756, '0 9': 9, '9 x': 357, 'x 1': 1189, '1 b': 47, 'b 6': 402, '6 j': 235, 'i 1': 649, '7 w': 284, 'w 0': 1152, 'z 5': 1265, 'c 1': 433, 'l 7': 763, '7 j': 271, '8 y': 322, '3 z': 143, 'z u': 1290, 'u 1': 1081, 'e 1': 505, 'v 4': 1120, '4 l': 165, 'l z': 791, 'd 4': 472, '4 a': 154, '1 k': 56, 'i 5': 653, '5 p': 205, 'n 4': 832, 'b 1': 397, '1 m': 58, 't 7': 1051, '7 z': 287, 'z w': 1292, '1 i': 54, 'i 2': 650, '2 d': 85, 't 6': 1050, '6 z': 251, 'q 2': 938, '2 0': 72, '0 j': 19, '1 4': 40, '4 8': 152, '8 3': 291, '3 i': 126, 'r 1': 973, '1 u': 66, 'r 4': 976, 'l 5': 761, 'i 4': 652, '4 y': 178, 'q z': 971, 'z q': 1286, 'm 5': 797, '5 f': 195, 'f 6': 546, '6 f': 231, 'g 2': 578, 'a 4': 364, '4 w': 176, 'm 2': 794, 'a 2': 362, '2 x': 105, '3 f': 123, 'f 7': 547, '6 m': 238, '7 1': 253, '1 6': 42, '6 2': 218, '2 7': 79, '7 7': 259, 'd 1': 469, 'd 7': 475, '7 6': 258, '6 p': 241, 'n 9': 837, '9 a': 334, 'z y': 1294, 'y 0': 1224, 'v 7': 1123, '7 p': 277, 'y 6': 1230, '6 3': 219, '3 5': 113, '1 j': 55, 'g z': 611, 'z 3': 1263, '2 b': 83, '5 z': 215, 'z j': 1279, 'e 6': 510, '1 z': 71, 'x 0': 1188, '0 u': 30, '1 a': 46, 'k 9': 729, '9 d': 337, 'm 1': 793, 'h 4': 616, '4 p': 169, 'i 7': 655, '7 5': 257, 'h 8': 620, '8 s': 316, 'd 8': 476, '8 1': 289, 'p 1': 901, 'd 6': 474, 'o 9': 873, '9 w': 356, 'w 8': 1160, '8 2': 290, '2 s': 100, 'r 3': 975, '3 a': 118, '1 8': 44, '8 6': 294, '6 y': 250, 'w 6': 1158, '6 u': 246, 'r 5': 977, '8 w': 320, 'w 1': 1153, '1 y': 70, '7 r': 279, 'g 3': 579, '5 l': 201, 's 5': 1013, '5 r': 207, 'k 8': 728, '1 r': 63, '6 4': 220, 'o 5': 869, '5 7': 187, '7 m': 274, '0 8': 8, '3 y': 142, 'y 2': 1226, '2 9': 81, '4 u': 174, 'j 4': 688, '4 x': 177, '1 f': 51, 'k 5': 725, '1 w': 68, '4 7': 151, 'j 1': 685, '9 5': 329, '5 u': 210, '4 z': 179, 'z n': 1283, '0 a': 10, 'a 3': 363, '3 p': 133, '2 6': 78, '6 b': 227, '0 w': 32, '6 n': 239, 'b z': 431, '3 4': 112, '4 e': 158, 'e 7': 511, 'r 9': 981, 'w 2': 1154, 'z 8': 1268, 'k 4': 724, '5 b': 191, 'l 4': 760, 'v 0': 1116, '1 9': 45, '9 8': 332, '8 m': 310, 'i 6': 654, '6 0': 216, '0 l': 21, 't 1': 1045, 'o 4': 868, '9 1': 325, 'w z': 1187, 'z 9': 1269, '9 6': 330, 'x 5': 1193, '5 9': 189, 'z g': 1276, 'z 1': 1261, 'n 8': 836, '8 n': 311, '4 t': 173, 'z v': 1291, 'v 8': 1124, '7 8': 260, '1 q': 62, 'd 5': 473, '5 s': 208, '5 2': 182, '6 e': 230, '2 5': 77, '2 w': 104, 'a 5': 365, '5 0': 180, 'b 7': 403, '7 i': 270, '8 b': 299, 'q 5': 941, 'u 8': 1088, '8 l': 309, '8 j': 307, 'e 4': 508, 's 4': 1012, '4 n': 167, 'c 8': 440, '8 v': 319, '7 k': 272, '2 o': 96, 'o 8': 872, '8 o': 312, '0 2': 2, '2 l': 93, 'l 3': 759, '3 8': 116, '2 2': 74, 'r 6': 978, '6 7': 223, '4 b': 155, 'h z': 647, '8 d': 301, 'v z': 1151, 'o 0': 864, 'c 9': 441, '9 0': 324, '0 0': 0, '0 g': 16, 'g 8': 584, '8 i': 306, '1 g': 52, 'h 0': 612, '1 t': 65, 't 0': 1044, '0 3': 3, '3 e': 122, 'e 8': 512, '2 n': 95, 'k 6': 726, '6 9': 225, '3 g': 124, 'b 9': 405, 'v 6': 1122, 'x z': 1223, 'y 7': 1231, '7 2': 254, '4 o': 168, 'g 5': 581, '9 l': 345, '9 r': 351, 'n 0': 828, '0 6': 6, 's 3': 1011, '3 v': 139, 'x 3': 1191, '7 0': 252, '0 s': 28, '9 z': 359, '0 t': 29, '5 4': 184, 'i 0': 648, 'g 4': 580, '4 g': 160, 'g 1': 577, 'x 2': 1190, 'p 9': 909, 'm z': 827, '7 v': 283, 'h 6': 618, '6 1': 217, '8 f': 303, '6 q': 242, 'm 8': 800, '8 p': 313, 'q 6': 942, '6 a': 226, 'k z': 755, '8 a': 298, '7 f': 267, 'm 6': 798, '6 t': 245, 'p z': 935, '9 n': 347, 'c 6': 438, '6 8': 224, '8 k': 308, 'x 8': 1196, 'k 3': 723, '3 1': 109, 'l 2': 758, '7 t': 281, '2 k': 92, '4 i': 162, 'w 4': 1156, 'u 4': 1084, '9 2': 326, '2 h': 89, '9 u': 354, 'u 3': 1083, 'w 9': 1161, '7 e': 266, 'h 7': 619, 'f 1': 541, 'j 3': 687, '3 w': 140, '0 n': 23, 'r 0': 972, '0 v': 31, '4 1': 145, 'r 2': 974, 'l 6': 762, 'z 6': 1266, 's 9': 1017, '5 n': 203, '6 i': 234, 'z 7': 1267, '0 7': 7, 'y z': 1259, '5 e': 194, '8 h': 305, '6 h': 233, '6 6': 222, '6 s': 244, 's z': 1043, 's 2': 1010, 'd 0': 468, '5 y': 214, 'l 8': 764, 'f 0': 540, '0 m': 22, 'f 9': 549, '9 q': 350, 'u 0': 1080, 'i 9': 657, 't 8': 1052, '7 b': 263, '8 g': 304, '4 m': 166, 'u 6': 1086, 'o 7': 871, 'j 7': 691, '7 s': 280, 's 6': 1014, '3 l': 129, '5 d': 193, 'e 9': 513, '9 j': 343, 'z x': 1293, 'a 7': 367, '9 f': 339, '5 3': 183, '2 v': 103, 'v 5': 1121, '5 t': 209, '9 k': 344, '3 9': 117, '9 c': 336, '6 v': 247, 'j 9': 693, '0 e': 14, '8 8': 296, 's 7': 1015, '7 n': 275, 'v 3': 1119, 'p 2': 902, '2 u': 102, 'm 3': 795, 'n 2': 830, 'd z': 503, '8 u': 318, 'e 2': 506, '0 o': 24, 'c 5': 437, '4 6': 150, 'n 1': 829, '6 l': 237, '6 g': 232, 'g 0': 576, 'j 2': 686, '2 i': 90, 'c 4': 436, 'a 8': 368, 'g 6': 582, '3 j': 127, 'j 8': 692, 'j z': 719, 'i 8': 656, '8 x': 321, '8 5': 293, 'z 4': 1264, '4 9': 153, '9 s': 352, '7 x': 285, '8 q': 314, 's 0': 1008, '1 l': 57, '8 7': 295, '3 u': 138, 'z r': 1287, 'p 8': 908, 'w 5': 1157, 'e 5': 509, 'm 4': 796, '4 3': 147, 'i 3': 651, '3 x': 141, 'y 8': 1232, '8 4': 292, 'q 8': 944, 'c 0': 432, 'c 3': 435, '5 a': 190, 'a 6': 366, '0 r': 27, 'u 2': 1082, '2 q': 98, '2 8': 80, '3 0': 108, '0 p': 25, '8 e': 302, '6 k': 236, 'u 9': 1089, 'b 3': 399, '3 r': 135, '9 o': 348, '0 y': 34, 'p 5': 905, '5 8': 188, '0 c': 12, 'k 2': 722, 'x 9': 1197, '9 4': 328, 'c 7': 439, 'q 4': 940, '9 h': 341, '5 g': 196, 'p 6': 906, 'p 7': 907, '0 h': 17, 'x 6': 1194, 'h 9': 621, '3 h': 125, '9 9': 333, 'f 2': 542, 'g 9': 585, '6 w': 248, 'd 3': 471, 'h 5': 617, '5 x': 213, '8 9': 297, 'l 9': 765, '5 o': 204, '4 4': 148, 'n 7': 835, '6 o': 240, '7 u': 282, '7 q': 278, 'z s': 1288, 'q 0': 936, '4 r': 171, '0 q': 26, 'q 3': 939, '3 b': 119, '3 k': 128, '0 5': 5, '5 m': 202, '7 y': 286, '0 x': 33, 'b 8': 404, 'x 7': 1195, '5 v': 211, 'u 5': 1085, 'j 5': 689, '4 j': 163, '7 o': 276, 'f 5': 545, '2 a': 82, 'j 0': 684, '2 g': 88, 'p 0': 900, 'b 4': 400, '9 t': 353, 'r 8': 980, 'f z': 575, '4 5': 149, '2 r': 99, '5 i': 198, 'n 3': 831, 'k 7': 727, '0 i': 18, 'a 9': 369, '5 k': 200, '9 v': 355, '4 h': 161, '4 2': 146, '0 k': 20, 'f 4': 544, 'o 6': 870, '5 j': 199, 'j 6': 690, 'c z': 467, '3 3': 111, 'o 3': 867, '7 9': 261, 'y 5': 1229, '7 4': 256, 'q 7': 943, 'm 0': 792, 'u 7': 1087, '7 g': 268, 'd 2': 470, '3 t': 137, '2 p': 97, '8 z': 323, 'z 0': 1260, '9 e': 338, 'a 0': 360, '6 r': 243, '7 d': 265, '2 z': 107, '5 w': 212, '9 p': 349, '9 7': 331}

        5.完整代码

# -*- coding:utf-8 -*-


import re
from hmmlearn import hmm
import numpy as np
import joblib
import csv
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import model_selection
import os
from sklearn.naive_bayes import GaussianNB

#处理域名的最小长度
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_list

def domain2ver(domain):
    ver=[]
    for i in range(0,len(domain)):
        ver.append([ord(domain[i])])
    return ver

def 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 remodel

def 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.txt
    with open(filename) as f:
        for line in f:
            domain=line.split(",")[0]
            if len(domain) >= MIN_LEN:
                domain_list.append(domain)
    return  domain_list

def 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,y

def 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, y

def 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,y

def 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,y

def 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.0
        for b in b_list:
            j+=count2string_jarccard_index(a,b)
        x.append(len(a))
        y.append(j/len(b_list))

    return x,y


def 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()

def nb_dga():
    x1_domain_list = load_alexa("../data/top-1000.csv")
    x2_domain_list = load_dga("../data/dga-cryptolocke-1000.txt")
    x3_domain_list = load_dga("../data/dga-post-tovar-goz-1000.txt")
    x_domain_list=np.concatenate((x1_domain_list, x2_domain_list,x3_domain_list))

    y1=[0]*len(x1_domain_list)
    y2=[1]*len(x2_domain_list)
    y3=[2]*len(x3_domain_list)

    y=np.concatenate((y1, y2,y3))

    print(len(x1_domain_list), len(x2_domain_list), len(x3_domain_list), len(x_domain_list), len(y))
    cv = CountVectorizer(ngram_range=(2, 2), decode_error="ignore",
                                          token_pattern=r"\w", min_df=1)
    x= cv.fit_transform(x_domain_list).toarray()
    #print(cv.get_feature_names())
    #print(cv.vocabulary_)
    clf = GaussianNB()
    score = model_selection.cross_val_score(clf, x, y, n_jobs=-1, cv=3)
    print(score)
    print(score.mean())


if __name__ == '__main__':
    nb_dga()

        6.三折验证运行结果

[0.94636872 0.93161435 0.93834081]
0.9387746240114905

        7.十折验证结果

        将其修改为10折,即cv=10,同时n_jobs=1

score = model_selection.cross_val_score(clf, x, y, n_jobs=1, cv=10)

        结果如下

[0.98134328 0.94029851 0.94402985 0.93656716 0.94402985 0.93283582
 0.94029851 0.93656716 0.94776119 0.96629213]
0.9470023478115044
本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/mooyuan/article/details/122757664
-- 展开阅读全文 --
Web安全—逻辑越权漏洞(BAC)
« 上一篇 03-13
Redis底层数据结构--简单动态字符串
下一篇 » 04-10

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复