Public API 1.0 版

1. Public API

1.1 Public 产品介绍

使用 Public API,可以让您通过建立简单的脚本来访问文件检测分析功能。不通过 Web接口,就可以进行上传扫描文件、查看已完成扫描的报告等操作。 

1.2 Public 目标受众

本文档适用于利用 JSON 和 HTTP 编写客户端应用程序的程序员们。虽然代码案例使用的是 python 语言,但是您可以使用任何语言和 API 进行交互。

1.3 Public 补充说明

API 采用 HTTP POST 请求和 JSON 返回,Public API Key 每分钟最多支持 6 次请求。当您需要更多次请求,请联系我们 contactus@threatbook.cn,获取 Private API。

Public API 是一项免费的服务,可供免费的网站和程序使用。请不要将 Public API 用于任何商业产品或服务,不能作为防病毒产品的替代品,也不能用于任何可能直接或间接损害防病毒产业的项目中。更多信息请参考 服务条款

2. Public API 接入指南

2.1 注册登陆

首先,您需要进行 注册登陆,之后就可以在个人资料页面看到您的个人 API Key。该 Key 将用于您的所有 API 操作。

2.2 传送和扫描文件

您可以通过 Public API 上传扫描文件。我们建议您在上传文件之前先检索最新版的文件报告,看它是否满足您的要求, 以便节省时间和带宽。请把上传文件大小控制在 80MB 以内,如果您需要上传更大的文件,请联系我们 contactus@threatbook.cn 。

扫描文件获取

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/scan

2.2.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
field string, optional 要用multipart/form-data方式提交

2.2.2 输入代码示例 下载示例

import postfile
host = "x.threatbook.cn"
selector = "https://x.threatbook.cn/api/v1/file/scan"
fields = [("apikey", "PUT YOUR APIKEY HERE")]
file_content = open("sample.txt", "rb").read()
files = [("file", "sample.txt", file_content)]
json = postfile.post_multipart(host, selector, fields, files)
print json
! 注意:API调用需要文件以 multipart/form-data 方式提交

2.2.3 输出参数说明

输出 参数 类型 说明
response_code int 可为以下值:
  • 1:上传成功,正在排队
  • -1:出错,具体查看verbose_msg的返回
verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
resource array 文件的sha256值
scan_id string 用于后面取扫描报告用
permalink string 查看扫描报告的URL
sha256 string 文件的sha256值
sha1 string 文件的sha1值
md5 string 文件的md5值
is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
white_desc string, optional 如果是白名单文件,这里是一个关于是哪种白名单文件的描述
! 注意:使用 Public API 扫描文件的优先级是最低的, 扫描速度取决于平台的负载率和事件的优先级(私有用户的优先级更高),扫描整个文件可能需要几秒钟或几个小时, 您需要使用 scan_id 定期查询扫描结果,所以为了减小负载、节省时间,请不要重复上传扫描。

2.2.4 输出代码示例

{
  "response_code": 1,
  "verbose_msg": "Your scan request has been submitted and queued, please come back for the report later.",
  "resource": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063",
  "scan_id": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  "permalink": "https://x.threatbook.cn/report/scan/01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  "sha256": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063",
  "sha1": "3ffd17c5eeb611aa6a2bf49ba398c02a4cabf013",
  "md5": "8587bba271ef7e6619212c60e3270ef2",
  [...]
}

2.3 检索文件扫描报告

检索指定文件的扫描报告

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/report

2.3.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
resource string 可为以下值:
  • 文件的md5/sha1/sha256,获取指定文件最近扫描结果
  • 之前提交的文件时返回的scan_id
注意:该参数支持批量操作,CSV格式的多个(最多4个)的哈希值或scan_id

2.3.2 输入代码示例 下载示例

import json as simplejson
import urllib
import urllib2
url = "https://x.threatbook.cn/api/v1/file/report"
parameters = {'apikey': 'PUT YOUR APIKEY HERE', 'resource': '01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063'}
data = urllib.urlencode(parameters)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
json = response.read()
print json

2.3.3 输出参数说明

输出 参数 类型 说明
response_code int 可为以下值:
  • 0: 请求的文件没有结果
  • 1: 扫描已经完成,返回结果
  • 3: 有部分扫描结果
  • -1: 出错,具体查看verbose_msg的返回
verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
resource array 和传入的resource一致
scan_id string 这次扫描的id
permalink string 查看扫描报告的URL
sha256 string 文件的sha256值
sha1 string 文件的sha1值
md5 string 文件的md5值
scan_date string 扫描时间
positives int 共有多少引擎返回有毒
total int 共有多少引擎返回扫描结果
total2 int 当前后台共部署了多少扫描引擎
scan array 所有引擎的扫描结果,每个item是一个引擎的结果,包括:
  • 引擎名
  • detected: boolean, 为true表示有毒,为false表示无毒或未检测到
  • version: 引擎的版本
  • result: 查到恶意软件名或safe表示没毒,或timeout表示超时
  • update: 引擎的病毒库的最后更新时间
is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
file_names array, optional 一个数组,内容是所有提交该文件时使用的文件名
malware_family stirng, optional 根据扫描结果提取出来的病毒家族
malware_type string, optional 根据扫描结果提取出来的病毒类型

2.3.4 输出代码示例

{
  "response_code": 1,
  "verbose_msg": "Scan finished, result can be found in the scans key.",
  "resource": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063",
  "scan_id": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  "md5": "8587bba271ef7e6619212c60e3270ef2",
  "sha1": "3ffd17c5eeb611aa6a2bf49ba398c02a4cabf013",
  "sha256": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063",
  "scan_date": "2010-05-15 03:38:44",
  "positives": 12,
  "total": 15,
  "scans": {
           "Kingsoft": {"detected": true, "version": "2010-05-14.01", "result": "Trojan.Generic.3611249", "update": "20100514"},
           "TrendMicro": {"detected": true, "version": "10.00", "result": "Trojan.VB.acgy", "update": "20100514"},
           "Qihu360": {"detected": true, "version": "5.400.0.1158", "result": "Generic.dx!rkx", "update": "20100515"},
           "Microsoft": {"detected": true, "version": "6.5.2.0.280", "result": "Trojan/VB.gen", "update": "20100514"},
           "Avira": {"detected": true, "version": "5.0.27.0", "result": "Trojan.VB.JFDE", "update": "20100514"},
           "AVG": {"detected": true, "version": "5115", "result": "avariant of Win32/Qhost.NTY", "update": "20100514"},
           [...]
           },
  "permalink": "https://x.threatbook.cn/report/scan/01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  [...]
}

2.4 重新扫描已提交的文件

本调用可以重新扫描文件库中的文件,无需再次提交,节省了带宽。 我们建议您在重新扫描之前先检索下最新版的文件报告,看它是否满足您的需求,以便节省时间和带宽。

重新扫描文件

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/rescan

2.4.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
resource string md5/sha1/sha256这三种HASH值
注意:该参数支持批量操作,CSV格式的多个(最多25个)的哈希值

2.4.2 输入代码示例 下载示例

import json as simplejson
import urllib
import urllib2
url = "https://x.threatbook.cn/api/v1/file/rescan"
parameters = {'apikey': 'PUT YOUR APIKEY HERE', 'resource': '01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063'}
data = urllib.urlencode(parameters)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
json = response.read()
print json

2.4.3 输出参数说明

输入 参数 类型 说明
response_code int 可为以下值:
1:上传成功,正在排队
-1:出错,具体查看verbose_msg的返回
verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
resource array 文件的sha256值
scan_id string 用于后面取扫描报告用
permalink string 查看扫描报告的URL
sha256 string 文件的sha256值
sha1 string 文件的sha1值
md5 string 文件的md5值
is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
white_desc string, optional 如果是白名单文件,这里是一个关于是哪种白名单文件的描述

2.4.4 输出代码示例

{
  "response_code": 1,
  "verbose_msg": "Your scan request has been submitted and queued, please come back for the report later.",
  "resource": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063",
  "scan_id": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  "permalink": "https://x.threatbook.cn/report/scan/01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063-1452202902747",
  "sha256": "01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063"
  "sha1": "3ffd17c5eeb611aa6a2bf49ba398c02a4cabf013",
  "md5": "8587bba271ef7e6619212c60e3270ef2",
  [...]
}
! 注意:根据response_code的返回值您可以知道hash值对应的文件是否排队成功,等待重新扫描,或该文件在文件库中不存在,或出现了其它未知错误。 事后,您还可以使用scan_id字段在报告检索API中查询本文件的报告。请注意,使用Public API扫描文件的优先级是最低的, 扫描速度取决于平台的负载率和事件的优先级(私有用户的优先级更高),扫描整个文件可能需要几个小时, 您需要使用scan_id定期查询扫描结果,所以请不要重复上传扫描。 

3. 示例代码和文档下载

运行示例代码,建议安装Python 2.x版本(https://www.python.org/

扫描文件并获取结果 下载示例

该示例先上传一个文件进行扫描,等数秒后再去取扫描结果。代码唯一的参数是要扫描的文件路径。

请参考以下用法:

python scan.py /virus/test_file.bin

获取文件扫描结果 下载示例

该示例获取一个文件的最近一次的扫描结果。代码唯一的参数是文件HASH值,可以为MD5/SH1/SHA256中的一种。

请参考以下用法:

python report.py 933e1778b2760b3a9194c2799d7b76052895959c3caedefb4e9d764cbb6ad3b5

ThreatBook API说明文档 下载示例

该文档详细说明了每个API的输入值和输出值,以及每个值的含义。

Private API 1.0版

1.Private API

1.1 Private 产品介绍

微步在线威胁分析平台的 Private API 遵循 REST API 的最佳实践和方针,提供一种简便的方式,让您通过任何客户端来调用威胁分析平台数据库中的数据及其检测分析功能。

1.2 Private 目标受众

本文档适用于想使用JSON和HTTP编写客户端应用程序的情况,文档详细介绍了相关API接口参数及输出数据格式。同时提供基于Python的代码示例,当然您可以使用任何语言和API进行交互。

1.3 Private 产品功能

Private API提供的功能包括但不限于:

文件检测:上传文件,以获得多引擎检测结果、文件静态分析报告和动态沙箱分析报告。

Hash查询:提交一种类型的Hash值(MD5、SHA1、SHA256),查询相关样本的检测结果,以及静态、动态分析报告。

域名分析:获取域名对应的IP地址、IP地址相关地理位置信息、当前Whois信息、威胁类型、相关攻击团伙或安全事件信息,同时可以根据客户需求提供其它更详尽的情报数据。

IP分析:获取IP的地理位置信息、相关域名、ASN信息、威胁类型、相关攻击团伙或安全事件信息,同时可以根据客户需求提供其它更详尽的情报数据。

1.4 Private 补充说明

认证

使用Private API,您需要相应的apikey。不同于通过分析平台网站注册得到的Public API apikey。作为我们的商业客户或合作伙伴,我们会通过邮件的方式交付您对应的apikey。

滥用

微步在线针对滥用系统的情况,保留停用账号的权利。滥用有关的活动包括并不限于:约定范围外共享账号、可疑/恶意的查询参数、访问受限制资源等。

2. 文件检测/Hash查询

2.1 扫描文件

提交文件进行扫描

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/scan

2.1.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
file string, optional 要用multipart/form-data方式提交

2.1.2 Python代码示例下载示例

import postfile
host = "x.threatbook.cn"
selector = "https://x.threatbook.cn/api/v1/file/scan"
fields = [("apikey", "PUT YOUR APIKEY HERE")]
file_content = open("sample.txt", "rb").read()
files = [("file", "sample.txt", file_content)]
json = postfile.post_multipart(host, selector, fields, files)
print json
! 注意:API调用需要文件以 multipart/form-data 方式提交

2.1.3 输出参数说明

输入 参数 类型 说明
response_code int 可为以下值:
  • 1:上传成功,正在排队
  • -1:出错,具体查看verbose_msg的返回
verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
resource array 文件的sha256值
scan_id string 用于后面取扫描报告用
permalink string 查看扫描报告的URL
sha256 string 文件的sha256值
sha1 string 文件的sha1值
md5 string 文件的md5值
is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
white_desc string, optional 如果是白名单文件,这里是一个关于是哪种白名单文件的描述

2.1.4 输出代码示例

输入:

python scan.py /data/virus/test_file.bin

输出:

{
    "sha1": "a77548413f6f5b7ce099d22958284090e5d622da",
    "response_code": 1,
    "sha256": "4729c99df1029658bd907d798cb3988fb49154f5f7560c52f9621db03418018c",
    "resource": "4729c99df1029658bd907d798cb3988fb49154f5f7560c52f9621db03418018c",
    "is_white": false,
    "verbose_msg": "Your scan request has been submitted and queued, please come back for the report later.",
    "scan_id": "4729c99df1029658bd907d798cb3988fb49154f5f7560c52f9621db03418018c-1465204082074",
    "permalink": "https://x.threatbook.cn/report/scan/4729c99df1029658bd907d798cb3988fb49154f5f7560c52f9621db03418018c-1465204082074",
    "md5": "f38d03b67fe6e55ce7ca74673ee7e906"
}

2.2 获取文件扫描结果

根据scan_id获取之前提交的文件的扫描结果或根据文件 HASH 得到最近的一次结果

获取文件扫描结果

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/report

2.2.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
resource string 可为以下值:
  • 文件的md5/sha1/sha256,获取指定文件最近扫描结果
  • 之前提交的文件时返回的scan_id
注意:该参数支持批量操作,CSV格式的多个(最多4个)的哈希值或scan_id
field string 指定需要获得的信息名称。现在支持的字段名包括:static, sandbox;要获得多于一个字段的信息,输入参数列出多个字段名称,用英文逗号分割;不指定本参数内容,将不能获得对应的信息。每个字段能获得的具体信息,参见输出参数中对应的名称说明。

2.2.2 Python代码示例下载示例

import json as simplejson
import urllib
import urllib2
url = "https://x.threatbook.cn/api/v1/file/report"
parameters = {'apikey': 'PUT YOUR APIKEY HERE', 'resource': '01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063'}
data = urllib.urlencode(parameters)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
json = response.read()
print json

2.2.3 输出参数说明

输出 参数 类型 说明
response_code int 可为以下值:
  • 0: 请求的文件没有结果
  • 1: 扫描已经完成,返回结果
  • 3: 有部分扫描结果
  • -1: 出错,具体查看verbose_msg的返回
verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
resource array api_params_get_report_resource
scan_id string 这次扫描的id
permalink string 查看扫描报告的URL
sha256 string 文件的sha256值
sha1 string 文件的sha1值
md5 string 文件的md5值
scan_date string 扫描时间
positives int 共有多少引擎返回有毒
total int 共有多少引擎返回扫描结果
total2 int 当前后台共部署了多少扫描引擎
scan array 所有引擎的扫描结果,每个item是一个引擎的结果,包括:
  • 引擎名
  • detected: boolean, 为true表示有毒,为false表示无毒或未检测到
  • version: 引擎的版本
  • result: 查到恶意软件名或safe表示没毒,或timeout表示超时
  • update: 引擎的病毒库的最后更新时间
is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
file_names array, optional 一个数组,内容是所有提交该文件时使用的文件名
malware_family stirng, optional 根据扫描结果提取出来的病毒家族
malware_type string, optional 根据扫描结果提取出来的病毒类型
sandbox string, optional 沙箱运行结果信息,根据文件不同可能包括:
  • 行为分析(ope_list),给出文件在沙箱中的行为分析信息,例如文件、注册表等操作信息;
  • 网络分析(network),给出文件在沙箱中的各种网络行为;
static object, optional 文件的静态信息,根据文件不同可能包括:
  • PE段信息(pe_sections)
  • 导入dll信息(pe_imports)
  • 证书信息(File Sign)
  • 属性信息(ver_info)等信息

2.2.4 输出代码示例

输入:

python report.py 805bbd278711c60d090e49f3214f88dfaa77e2b379658359063d4933486d4eff

输出:

[
  {
    "md5": "431644662bb5ba5348a450d31d5e58ad",
    "total": 23,
    "sha1": "3f4e614f83ccf12929f6e7c2e3b24074bbfb5e45",
    "malware_family": "",
    "sandbox": [],
    "total2": 23,
    "resource": "805bbd278711c60d090e49f3214f88dfaa77e2b379658359063d4933486d4eff",
    "file_names": [
      "805bbd278711c60d090e49f3214f88dfaa+B7777e2b379658359063d4933486d4eff",
      "KeePass.exe",
      "VirusShare_431644662bb5ba5348a450d31d5e58ad"
    ],
    "sha256": "805bbd278711c60d090e49f3214f88dfaa77e2b379658359063d4933486d4eff",
    "response_code": 1,
    "scans": {
      "ESET": {
        "version": "2017-03-01",
        "update": "2017-03-01",
        "detected": false,
        "result": "safe"
      },

      ...

      "AVG": {
        "version": "2017-03-01",
        "update": "2017-03-01",
        "detected": false,
        "result": "safe"
      }
    },
    "is_white": false,
    "verbose_msg": "Scan finished, result can be found in the scans key.",
    "positives": 1,
    "scan_id": "805bbd278711c60d090e49f3214f88dfaa77e2b379658359063d4933486d4eff-1488356967755",
    "permalink": "https://x.threatbook.cn/report/scan/805bbd278711c60d090e49f3214f88dfaa77e2b379658359063d4933486d4eff-1488356967755",
    "scan_date": "2017-03-01 16:29:27",
    "malware_type": ""
  }
]

2.3 重新扫描

重新扫描已经自己或其他用户提交过的文件

重新扫描

HTTP方法:post

URL:https://x.threatbook.cn/api/v1/file/rescan

2.3.1 输入参数说明

输入 参数 类型 说明
apikey string 用户专属apikey
resource string md5/sha1/sha256这三种HASH值
注意:该参数支持批量操作,CSV格式的多个(最多25个)的哈希值

2.3.2 Python代码示例 下载示例

import json as simplejson
import urllib
import urllib2
url = "https://x.threatbook.cn/api/v1/file/rescan"
parameters = {'apikey': 'PUT YOUR APIKEY HERE', 'resource': '01f97755e8cd9f931bad6fe08d03326f29d3b449dbe11bab28b889f558675063'}
data = urllib.urlencode(parameters)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
json = response.read()
print json

2.3.3 输出参数说明

输入 参数 类型 说明
response_code int 可为以下值:
  • 1:上传成功,正在排队
  • -1:出错,具体查看verbose_msg的返回
  • verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
    resource array 文件的sha256值
    scan_id string 用于后面取扫描报告用
    permalink string 查看扫描报告的URL
    sha256 string 文件的sha256值
    sha1 string 文件的sha1值
    md5 string 文件的md5值
    is_white boolean, optional 为true表示是白名单文件,如Windows操作系统文件
    white_desc string, optional 如果是白名单文件,这里是一个关于是哪种白名单文件的描述

    2.3.4 输出代码示例

    输入:

    python rescan.py b76280c2b71b369c8e013651d66d599c615cf83096388c1ad76be6c9725a26db
    

    输出:

    {
        "sha1": "6db5cf358d26f6415ddd5aa24ab884f5aac391bc",
        "response_code": 1,
        "sha256": "b76280c2b71b369c8e013651d66d599c615cf83096388c1ad76be6c9725a26db",
        "resource": "b76280c2b71b369c8e013651d66d599c615cf83096388c1ad76be6c9725a26db",
        "is_white": false,
        "scan_id": "b76280c2b71b369c8e013651d66d599c615cf83096388c1ad76be6c9725a26db-1465210386691",
        "permalink": "https:// x.threatbook.cn/report/scan/b76280c2b71b369c8e013651d66d599c615cf83096388c1ad76be6c9725a26db-1465210386691",
        "md5": "85bb66b320ddcdf4cde53593346522f7"
    }
    

    3. 文件数字签名识别

    获取文件的数字证书信息

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/file/fetch_file_legal_ca

    3.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    resource string 要检测的样本hash,SHA256格式

    3.2 Python代码示例 下载示例

    # encoding: UTF-8
    
    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    import pprint
    import json
    
    # The apikey.
    API_KEY = "YOUR KEY"
    class ThreatBook(object):
    
        def __init__(self, api_key):
    
            super(ThreatBook, self).__init__()
    
            self.api_key = api_key
    
        def __repr__(self):
            return "<ThreatBook proxy>"
    
        def get(self, hash):
            print "Getting the report ...\r\n"
            #time.sleep(10)
    
            url = "https://x.threatbook.cn/api/v1/file/fetch_file_legal_ca"
            parameters = {"resource": hash,
                           "apikey": self.api_key}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            xxx = json.loads(ret_json)
            print "Report(in JSON):\r\n"
            try:
                pprint.pprint(xxx,indent=4)
            except Exception,e:
                print e
            return 1;
    
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <hash>
    Samples:
    %prog 2f835af9497d817bd5a31766c61ab26c7ab86f345676f0d45b60e520d8e24a9c
        """)
    
        (options, arguments) = parser.parse_args()
    
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
    
        hash = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(hash)
    
        except Exception, e:
            print "ThreatBook returned a non correct response. See the parameter -l"
    
    if __name__ == "__main__":
        main()
    

    3.3 输出参数说明

    输入 参数 类型 说明
    response_code int 可为以下值:
    • 1: 上传成功,正在排队
    • -1: 出错,具体查看verbose_msg的返回
    verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
    resource array 样本的sha256
    cas object 该字段是一个json对象,用来记录证书链
    RevokedTime string 吊销时间,如果证书未被吊销,该字段为空
    Subject string 证书使用者
    Verify string 证书验证算法
    Purpose string 证书目的
    Status string 证书状态
    Fingerprint string 证书指纹,可作为唯一标识
    StatusString string 证书状态人类可读字符串
    SerialNumber string 证书序列号,序列号可能重复,所以不能作为唯一性标识
    Issuer string 证书颁发者
    Revoked boolen 是否被吊销
    Begin string 证书开始时间
    End string 证书结束时间
    LegalIssuer string, optional 证书链中,最终给该样本签名的组织名称,该字段存在说明该组织可信度较高

    3.4 输出代码示例

    {
      "resource": "dca9f45efed8eab442b491aebda3e3cce7f5f9fc5de527d2dbdfd85a5be85dfa",
      "cas": [
        {
          "RevokedTime": "",
          "Subject": "Microsoft Root Certificate Authority",
          "Verify": "SHA1",
          "Purpose": "OCSP helper CA|Any Purpose CA|SSL server CA|OCSP helper|Time Stamp signing CA|Netscape SSL server CA|CRL signing CA|SSL client|S/MIME encryption CA|S/MIME signing CA|CRL signing|SSL server|S/MIME signing|SSL client CA|Any Purpose",
          "Status": "0",
          "Fingerprint": "CD:D4:EE:AE:60:00:AC:7F:40:C3:80:2C:17:1E:30:14:80:30:C0:72",
          "StatusString": "有效证书",
          "SerialNumber": "79 AD 16 A1 4A A0 A5 AD 4C 73 58 F4 07 13 2E 65",
          "Issuer": "Microsoft Root Certificate Authority",
          "Revoked": false,
          "Begin": "Wed May 09 23:19:22 CST 2001",
          "End": "Sun May 09 23:28:13 CST 2021"
        },
        {
          "RevokedTime": "",
          "Subject": "Microsoft Code Signing PCA",
          "Verify": "SHA1",
          "Purpose": "OCSP helper CA|Any Purpose CA|OCSP helper|Time Stamp signing CA|CRL signing CA|CRL signing|Any Purpose",
          "Status": "1",
          "Fingerprint": "FD:D1:31:4E:D3:26:8A:95:E1:98:60:3B:A8:31:6F:A6:3C:BC:D8:2D",
          "StatusString": "过期证书",
          "SerialNumber": "61 15 08 27 00 00 00 00 00 0C",
          "Issuer": "Microsoft Root Certificate Authority",
          "Revoked": false,
          "Begin": "Wed Jan 25 23:22:32 CST 2006",
          "End": "Wed Jan 25 23:32:32 CST 2017"
        },
        {
          "RevokedTime": "",
          "Subject": "Microsoft Corporation",
          "Verify": "SHA1",
          "Purpose": "Any Purpose CA|OCSP helper|Any Purpose",
          "Status": "1",
          "Fingerprint": "6E:BD:FB:3C:F5:D0:A9:69:1F:87:00:F9:6B:B1:6D:62:D3:44:F2:29",
          "StatusString": "过期证书",
          "SerialNumber": "61 06 BF FE 00 00 00 00 00 14",
          "Issuer": "Microsoft Code Signing PCA",
          "Revoked": false,
          "Begin": "Fri Jun 22 21:56:18 CST 2007",
          "End": "Mon Sep 22 22:06:18 CST 2008"
        }
      ],
      "LegalIssuer": "Microsoft Corporation",
      "response_code": 1
    }
    

    4. 新注册域名信息查询

    获取某天新增加域名过滤后的列表。但需要注意:

    过滤信息需要提前通知微步在线才能调用本接口;

    该API提供的数据在x.threatbook.cn网页上没有展示;

    查询新注册域名信息

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/domain_moniter/query

    4.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    date string 要查询的日期,例如:20160401代表2016年4月1日

    4.2 输入代码示例 下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    
    # The apikey.
    API_KEY = "PUT YOUR APIKEY HERE"
    
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
    
        def __repr__(self):
            return "<ThreatBook proxy>"
    
        def get(self, queryDate):
            print "Getting the result ...\r\n"
    
            url = "https://x.threatbook.cn/api/v1/domain_moniter/query"
            parameters = {"date": queryDate, "apikey": self.api_key}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <queryDate>
    Samples:
        %prog 20160401
        """)
    
        (options, arguments) = parser.parse_args()
    
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
    
        queryDate = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(queryDate)
    
        except Exception, e:
            print "ThreatBook returned a non correct response. See the parameter -l"
    
    if __name__ == "__main__":
        main()

    4.3 输出参数说明

    输出 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • 1: 输入的date格式不正确
    • 2: 没有查询到数据
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
    domains array 新增的域名名称列表,列表的每一项为string类型的域名名称。
    date string 输入的date值。

    5. Email注册域名查询

    获取某Email注册过的域名列表

    Email注册域名查询

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/domain4email/query

    5.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    email string 要查询的Email地址。

    5.2 输入代码示例 下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    
    # The apikey.
    API_KEY = "PUT YOUR APIKEY HERE"
    
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
    
        def __repr__(self):
            return "<ThreatBook proxy>"
    
        def get(self, email):
            print "Getting the result ...\r\n"
    
            url = "https://x.threatbook.cn/api/v1/domain4email/query"
            parameters = {"email": email, "apikey": self.api_key}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <email>
    Samples:
        %prog test@hotmail.com
        """)
    
        (options, arguments) = parser.parse_args()
    
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
    
        email = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(email)
    
        except Exception, e:
            print "ThreatBook returned a non correct response. See the parameter -l"
    
    if __name__ == "__main__":
        main()

    5.3 输出参数说明

    输入 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • 1: 输入的email格式不正确
    • 2: 没有查询到数据
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
    total string 返回的域名个数,如果超过500,则输出500+字样
    email string 输入的Email地址。
    rel_domains array Email注册过的域名名称列表,列表的每一项为string类型的域名名称。

    5.4 输出代码示例

    {
        "response_code": 0,
        "total": "500+",
        "email": "domainmaster@baidu.com",
        "rel_domains": [
            "baidu.com",
             ...,
            "hao123.com"
        ]
    }
    

    6. 域名分析

    获取域名对应的IP地址、IP地址相关地理位置信息、当前Whois信息、威胁类型、相关攻击团伙或安全事件信息。

    域名分析

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/domain/query

    6.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    domain string 要查询的域名
    field string 要查询的字段,以逗号分隔,字段名与输出参数中的字段名相同。

    6.2 Python代码示例下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    # The apikey.
    API_KEY = "PUT YOUR APIKEY HERE"
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
        def __repr__(self):
            return "<ThreatBook proxy>"
        def get(self, domain):
            print "Getting the result ...\r\n"
            url = "https://x.threatbook.cn/api/v1/domain/query"
            parameters = {"domain": domain, "apikey": self.api_key, "field": "cur_ips,cur_ips.location,his_ips,his_ips.location"}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <domain>
    Samples:
        %prog manage-163-account.com
        """)
        (options, arguments) = parser.parse_args()
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
        domain = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(domain)
        except Exception, e:
            print "ThreatBook returned a non correct response. See the parameter -l"
    if __name__ == "__main__":
        main()
    

    6.3 输出参数说明

    输出 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • 1: 输入的域名格式不正确
    • 2: 没有查询到数据
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的Verbose信息。
    domain string 要查询的域名
    history_whoises array, optional 这个域名的历史whois信息,是一个JSON数组,每个item均是JSON对象,字段说明如下:
    • date: 历史whois的时间
    • whois: 是一个JSON对象,字段说明如下:
      • registrar_name: 域名服务商
      • name_server: 域名服务器(以|分隔)
      • registrant_name: 注册者
      • registrant_email: 注册邮箱
      • registrant_company: 注册机构
      • registrant_address: 地址
      • registrant_phone: 电话
      • cdate: 注册时间
      • udate: 更新时间
      • edate: 过期时间
      • alexa: Alexa排名
    cur_whois object, optional 这个域名的当前whois信息,是一个JSON对象,字段说明请参照上面hostory_whoises中每个item的定义。
    history_ips array, optional 这个域名的历史上解析的ip信息,是一个JSON数组,每个item均是JSON对象,字段说明如下:
    • date: 历史ip的时间
    • ip: 是一个JSON对象,字段说明如下:
      • ip: ip值
      • location: ip对应的位置信息,json对象,字段说明如下:
      • country: 国家
      • province: 省
      • city: 城市
      • lng: 经度
      • lat: 纬度
    cur_ips array, optional 这个域名的解析的ip信息,是一个JSON数组,每个item均是JSON对象,字段说明请参考上面history_ips中每一个item的定义。
    tags array, optional 相关攻击团伙或安全事件信息,json数组,例如:DarkHotel
    judgments array, optional 从威胁情报分析出来的威胁类型,如 远控,恶意软件等,是一个JSON数组,每一个元素的取值列表:
    • C2
    • Botnet
    • Hijacked
    • Phishing
    • Malware
    • Exploit
    • Scanner
    • P2P Node
    • Zombie
    • DNS
    • Spam
    • Suspicious
    • Proxy
    • Compromised
    • Whitelist
    • Info
    • IDC
    • Dynamic IP
    • Bogon
    • FullBogon
    • HTTP Proxy In
    • HTTP Proxy Out
    • Socks Proxy In
    • Socks Proxy Out
    • VPN
    • VPN In
    • VPN Out
    samples array, optional 相关样本,是一个json数组,每个item的字段定义如下:
    • sha256: 文件hash
    • scan_time: 检测时间
    • ratio: 检出率
    • malware_type: 恶意类型(optional)
    • malware_family: 恶意家庭(optional)
    domains_4_name array, optional 域名注册人同时注册的其它域名,是一个数组。
    domains_4_email array, optional 域名注册邮箱同时注册的其它域名,是一个数组。
    sub_domains object, optional 该域名相对应的二级域名下的子域名,是一个JSON对象,字段说明如下:
    • total: 字符串类型,表示有多少子域名,如果数量超过1000,则显示为“1000+”,否则为实际数量。
    • data: 类型为数组,是当前返回的部分或全部子域名列表,每个item是一个子域名。

    6.4 输出代码示例

    {
      "domain": "threatbook.cn",
      "response_code": 0,
      "history_ips": [
        {
          "ips": [
            {
              "asn": {
                "info": "CHINA169-BJ China Unicom Beijing Province Network, CN",
                "rank": 3,
                "number": 4808
              },
              "ip": "123.59.85.88"
            }
          ],
          "ip": {
            "asn": {
              "info": "CHINA169-BJ China Unicom Beijing Province Network, CN",
              "rank": 3,
              "number": 4808
            },
            "ip": "123.59.85.88"
          },
          "date": "2015-09-25"
        },
        {
          "ips": [
            {
              "ip": "123.59.62.231"
            }
          ],
          "ip": {
            "ip": "123.59.62.231"
          },
          "date": "2015-07-29"
        }
      ]
    }
    

    7. IOC检测

    查询域名或IP地址是否有C2等威胁情报。

    IOC检测

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/dns

    7.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    q string 要查询的域名

    7.2 输入代码示例 下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    
    # The apikey
    API_KEY = "PUT YOUR APIKEY HERE"
    
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
    
        def __repr__(self):
            return "<ThreatBook proxy>"
    
        def get(self, q):
            print "Getting the result ...\r\n"
    
            url = "https://x.threatbook.cn/api/v1/dns"
            parameters = {"q": q, "apikey": self.api_key}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <domain or ip>
    Samples:
        %prog netforuser.com
        """)
    
        (options, arguments) = parser.parse_args()
    
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
    
        q = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(q)
    
        except Exception, e:
            print "ThreatBook returned a non correct response. Please check the network connection."
    
    if __name__ == "__main__":
        main()
    
    

    7.3 输出参数说明

    输出 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • 2: 没有查询到数据
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的Verbose信息
    data array 是否有C2等威胁情报,是个JSON数组,其中每一个元素的字段说明:
    • families: 是个数组,是所有的家族
    • Intel_types: 是个数组,是所有的威胁情报,取值列表为:
      • C2
      • Botnet
      • Hijacked
      • Phishing
      • Malware
      • Exploit
      • Scanner
      • P2P Node
      • Zombie
      • DNS
      • Spam
      • Suspicious
      • Proxy
      • Compromised
      • Whitelist
      • Info
      • IDC
      • Dynamic IP
      • Bogon
      • FullBogon
      • HTTP Proxy In
      • HTTP Proxy Out
      • Socks Proxy In
      • Socks Proxy Out
      • VPN
      • VPN In
      • VPN Out

    7.4 输出代码示例

    {
      "data": [
        {
          "intel_types": [
            "Malware",
            "Exploit",
            "C2"
          ],
          "families": []
        }
      ],
      "response_code": 0
    }
    

    8. IP分析

    获取IP地址相关地理位置信息、绑定的域名信息、威胁类型、相关攻击团伙或安全事件信息。

    IP分析

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v1/ip/query

    8.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    ip string 要查询的IP
    field string 要查询的字段,以逗号分隔,字段名与输出参数中的字段名相同。

    8.2 Python代码示例 下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    # The apikey
    API_KEY = "PUT YOUR APIKEY HERE"
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
        def __repr__(self):
            return ""
        def get(self, ip):
            print "Getting the result ...\r\n"
            url = "https://x.threatbook.cn/api/v1/ip/query"
            parameters = {"ip": ip, "apikey": self.api_key, "field": "domains"}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    def main():
        parser = optparse.OptionParser(usage = """
    %prog
    Samples:
    %prog 82.165.37.26
        """)
        (options, arguments) = parser.parse_args()
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
        ip = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(ip)
        except Exception, e:
            print "ThreatBook returned a non correct response."
    if __name__ == "__main__":
        main()
    

    8.3 输出参数

    输出 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • 2: 没有查询到数据
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的Verbose信息
    ip object ip: 是一个JSON对象,字段说明如下:
    • ip: ip值
    • carrier: 运营商
    • location: ip对应的位置信息,json对象,字段说明如下:
      • country: 国家
      • province: 省
      • city: 城市
      • lng: 经度
      • lat: 纬度
    tags array, optional 相关攻击团伙或安全事件信息,json数组,例如:DarkHotel
    judgments array, optional 从威胁情报分析出来的威胁类型,如 远控,恶意软件等,是一个json数组,每一个元素的取值列表:
    • C2
    • Botnet
    • Hijacked
    • Phishing
    • Malware
    • Exploit
    • Scanner
    • P2P Node
    • Zombie
    • DNS
    • Spam
    • Suspicious
    • Proxy
    • Compromised
    • Whitelist
    • Info
    • IDC
    • Dynamic IP
    • Bogon
    • FullBogon
    • HTTP Proxy In
    • HTTP Proxy Out
    • Socks Proxy In
    • Socks Proxy Out
    • VPN
    • VPN In
    • VPN Out
    intelligences array, optional 威胁情报,是一个json数组,每个item的字段定义如下:
    • source: 来源
    • find_time: 发现时间
    • confidence: 信心指数
    • intel_types: 类型,是一个数组,数组的元素取值列表同上面的judgments。
    samples array, optional 相关样本,是一个json数组,每个item的字段定义如下:
    • sha256: 文件hash
    • scan_time: 检测时间
    • ratio: 检出率
    • malware_type: 恶意类型(optional)
    • malware_family: 恶意家庭(optional)
    cur_domains array, optional domains: 数组,指向这个ip的其它域名
    history_domains map, optional IP逆向的历史域名,是一个json map,key是日期,value是一个数组,每一个item是一个域名。
    port array, optional 相关端口信息,是一个json数组,每个item的字段定义如下:
    • port: IP开放的端口号
    • module: 应用协议
    • product: 应用名称(optional)
    • version: 应用版本(optional)
    • detail: 应用详情(optional)

    8.4 输出代码示例

    {
        "response_code": 0,
        "judgments": [
            "僵尸网络"
        ],
        "ip": "82.165.37.26",
        "location": {
            "country": "德国",
            "province": "德国",
            "lng": "10.454150",
            "city": "",
            "lat": "51.164181"
        }
    }
    

    9. IP信誉

    能够提供实时IP情报和画像信息,获得IP的基础属性信息,如是否IDC主机、动态IP、傀儡机、VPN、代理IP等

    IP信誉查询

    HTTP方法:post

    URL:https://x.threatbook.cn/api/v2/ip_reputation

    9.1 输入参数说明

    输入 参数 类型 说明
    apikey string 用户专属apikey
    ip string 要查询的IP,可以为多个,用逗号分隔,最多10个。

    9.2 Python代码示例 下载示例

    import httplib, mimetypes
    import urllib
    import urllib2
    import os
    import sys
    import optparse
    import hashlib
    import time
    
    # The apikey
    API_KEY = "PUT YOUR APIKEY HERE"
    
    class ThreatBook(object):
        def __init__(self, api_key):
            super(ThreatBook, self).__init__()
            self.api_key = api_key
    
        def __repr__(self):
            return "<ThreatBook proxy>"
    
        def get(self, ip):
            print "Getting the result ..."
    
            url = "https://x.threatbook.cn/api/v2/ip_reputation"
            parameters = {"ip": ip, "apikey": self.api_key}
            data = urllib.urlencode(parameters)
            req = urllib2.Request(url, data)
            response = urllib2.urlopen(req)
            ret_json = response.read()
            print "Report(in JSON):\r\n"
            print ret_json
            return 1;
    
    def main():
        parser = optparse.OptionParser(usage = """
    %prog <ip>
    Samples:
        %prog 82.165.37.26
        """)
    
        (options, arguments) = parser.parse_args()
    
        if len(sys.argv) < 2:
            parser.print_usage()
            return -1
    
        ip = arguments.pop(0)
    
        try:
            v = ThreatBook(API_KEY)
            v.get(ip)
    
        except Exception, e:
            print "ThreatBook returned a incorrect response. Please check the network connection."
    
    if __name__ == "__main__":
     main()
    

    9.3 输出参数示例

    输出 参数 类型 说明
    response_code int 可为以下值:
    • 0: 成功
    • -1: 出错,具体查看verbose_msg的返回
    • -2: 无效apikey
    • -3: 超过访问限制
    verbose_msg string response_code相应的详细信息,如没有相应信息,该字段不返回。
    data string 被查询的IP。
    now array 是否是黑产撞库可能使用的互联网资源,now为有效的情报部分。字段说明:
    • Zombie:傀儡机
    • Spam:SPAM
    • Bogon : 保留地址
    • FullBogon : 未启用IP
    • Gateway : 网关
    • IDC : IDC服务器
    • Dynamic IP : 动态IP
    • Edu:教育网IP
    • Proxy:代理
    • HTTP Proxy In : HTTP代理入口
    • HTTP Proxy Out : HTTP代理出口
    • Socks Proxy In : Socks代理入口
    • Socks Proxy Out : Socks代理出口
    • VPN:VPN代理
    • VPN In : VPN代理入口
    • VPN Out : VPN代理出口
    • Tor Proxy In : Tor代理入口
    • Tor Proxy Out : Tor代理出口
    • Search Engine Crawler: 搜索引擎爬虫
    • Whitelist: 白名单
    expired array 是否是黑产撞库可能使用的互联网资源, expired为历史情报部分。字段与now部分相同。
    beyond_start string 如果超过次数限制,该字段返回从哪个IP开始超过限制的,如果未超出,该字段不出现。

    9.4 输出代码示例

    {
      "response_code": 0,
      "data": {
        "82.165.37.26": {
          "now": {
            "data": [
              "IDC"
            ]
          },
          "expired": {
            "data": [
              "Zombie"
            ]
          }
        }
      }
    }