批量检测恶意网址,利用微步api

最近emotet银行木马肆虐,我在分析网站上爬取了emotet木马相关的恶意网址,

批量检测恶意网址,利用微步api_第1张图片大约3万条,由于原网站上夹杂了一些正常网站也被爬取了下,而且有些恶意网址也不确定是否准确,所以准备将结果再次发送到微步在线进行检测,过滤一遍,把正常网站去除,只留下,被微步判定位“恶意”和“可疑”的网址。

微步的api文档https://s.threatbook.cn/api

下面是本人的代码,写的比较简陋,毕竟不是搞开发,能完成任务就好。

python2.7版本

# -- coding: utf-8 --
import requests
import time
from requests.adapters import HTTPAdapter
import random


#设置超时重连
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))


USER_AGENTS = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
    "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]


url = "https://s.threatbook.cn/api/v2/url/report"
count = 0
with open("emotet_url_05_11.txt", 'r') as f:
    lines = f.readlines()
    for line in lines:
        params = {
            "apikey": "替换成你的key,可在个人中心查看",
            "url": line.strip()
        }
        #随机UA
        headers = {"User-Agent": random.choice(USER_AGENTS)}

        response = s.get(url, params=params,headers=headers,timeout=5)
        print(response.json())
        res = response.json()
        if res["response_code"] == -1:
            print "提交失败"
            continue
        else:
            result = res["data"]["threat_level"]
            maleware_url = res["data"]["details"]["url"]
            if result != "clean":
                with open("maleware_url.txt", "a") as f:
                    f.write(maleware_url + "\n")
                    count += 1
                print "恶意url写入{}个".format(count)
                time.sleep(0.7)

这里讲下本人遇到的问题,

1、由于检测的网址数量多,需要长时间,发送请求,在等待响应的时候,经常间隙性短线,

后来加入了断线重连功能,和随机UserAgent

批量检测恶意网址,利用微步api_第2张图片

才正常可以不间断的发送请求。微步普通用户每分钟不能超过100次请求,不然就断开连接,所以加了0.7的延迟,1分钟大约85次请求。

对返回的状态码做了判断

批量检测恶意网址,利用微步api_第3张图片

对返回的thread_level做了判断,只要不等于clean即使恶意的url,就保存到本地文件。

clean是正常

suspicious是可疑

malicious是恶意

批量检测恶意网址,利用微步api_第4张图片

题外话

2、做爬虫一定要先观察目标网站的详细信息,先分析爬取中可能遇到的问题,然后再写爬虫,就不会在后面写好了又改功能。

我一开始写的时候只有三步:

1、获取目标html。

2、解析html,定位自己需要数据

3、保存数据到本地文件

理论是这么搞,可是还有很多细节没考虑到,不管大小爬虫,都应该加上随机UA,断线重连,这是最基本的。如果长时间爬取数据,还要考虑反反爬技巧,加入代理池。爬大型数据的还要考虑多线程分布式爬取。

好了,今天总结就到这!

你可能感兴趣的:(python,python,微步,爬虫,url检测,恶意网址检测)