11.6 示例:使用FP-growth算法挖掘疑似僵尸主机

在互联网环境下存在大量的僵尸主机的扫描行为,僵尸主机频繁更换IP,很难通过IP确定僵尸主机。通过使用FP-growth算法,分析防火墙的拦截日志,挖掘出浏览器的user-agent字段和被攻击的目标URL之间的关联关系,初步确定潜在的僵尸主机。完整演示代码请见本书GitHub上的11-4.py。

使用测试数据,其中ip表示攻击源ip,ua表示浏览器的user-agent字段,target表示被攻击的目标URL:


ip=ip1,ua=ua1,target=url1
ip=ip2,ua=ua1,target=url1
ip=ip3,ua=ua1,target=url1
ip=ip1,ua=ua1,target=url2
ip=ip2,ua=ua1,target=url2
ip=ip3,ua=ua1,target=url2
ip=ip4,ua=ua2,target=url2
ip=ip5,ua=ua3,target=url2
ip=ip5,ua=ua6,target=url6
ip=ip6,ua=ua3,target=url4
ip=ip7,ua=ua4,target=url4
ip=ip8,ua=ua5,target=url5

逐行读取测试数据文件,提取ip、ua和target字段,添加到transactions变量中:


with open("../data/KnowledgeGraph/sample7.txt") as f:
    for line in f:
        line=line.strip('\n')
        ip,ua,target=line.split(',')
        print "Add (%s %s %s)" % (ip,ua,target)
        transactions.append([ip,ua,target])

建设满足的条件为支持度为3,置信度为0.7的即认为是疑似僵尸主机:


patterns = pyfpgrowth.find_frequent_patterns(transactions, 3)
rules = pyfpgrowth.generate_association_rules(patterns, 0.9)

经过FP-growth算法挖掘,满足条件的结果为:


{('target=url1',): (('ua=ua1',), 1.0)}