连接到act rest api的python库

act-api的Python项目详细描述


Python操作

python act是一个库,用于连接到act平台。

这个api的源代码可以在github上找到 pypi

设置

从pypi安装:

$ pip3 install act-api

平台有一个rest api,这个库的目标是公开api中的所有功能。

对象和事实

ACT平台基于两种基本类型:对象和事实。

对象是可由其值唯一引用的通用元素。对象的示例可以是IP地址。

事实是将对象联系在一起的断言或观察。事实可能有也可能没有进一步描述事实的值。

事实可以链接到多个对象上。下面,seenin事实链接到ipv4对象和report对象,但hastintle事实只链接到report。

<表><广告>对象类型 对象值事实类型 事实值对象类型 对象值< /广告><正文>IPv4127.0.0.1参见报告报告CBC80BB5C0F8944BF73(…)报告CBC80BB5C0F8944BF73(…)黑斯特尔威胁情报摘要不适用不适用

python api的设计原则。

  • 大多数函数返回可链接的对象
  • 可以使用点符号(例如fact.name和fact.type.name)访问属性

示例用法

连接到API

使用api公开的url和用户id连接到api:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")

返回的对象公开了act平台中的大部分api:

  • 事实-管理事实
  • 事实搜索-搜索事实
  • 事实类型-实例化事实类型
  • 获取事实类型-获取事实类型
  • 对象-管理对象
  • 对象搜索-搜索对象
  • 获取对象类型-获取对象类型

act.act的附加参数可以使用requests\u common戋rgs传递给请求,例如,如果实例位于具有http身份验证的反向代理后面,则可以添加该请求:

>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning", requests_common_kwargs = {"auth": ("act", "<PASSWORD>")})

创建事实

通过调用fact()创建事实。可以使用一个或多个source()destination()bidirectional()添加链接对象来链接结果。

>>> f = c.fact("seenIn", "report").source("ipv4", "127.0.0.1").destination("report", "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7")
>>> f
Fact(type='seenIn', value='report', source_object=Object(type='ipv4', value='127.0.0.1'), destination_object=Object(type='report', value='87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7'))

这个事实还没有添加到平台中。用户serialize()json()查看添加事实时将发送到平台的参数。

>>> f.serialize()
{'type': 'seenIn', 'destinationObject': {'type': 'report', 'value': '87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7'}, 'accessMode': 'Public', 'value': 'report', 'sourceObject': {'type': 'ipv4', 'value': '127.0.0.1'}, 'bidirectionalBinding': False}
>>> f.json()
'{"type": "seenIn", "destinationObject": {"type": "report", "value": "87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7"}, "accessMode": "Public", "value": "report", "sourceObject": {"type": "ipv4", "value": "127.0.0.1"}, "bidirectionalBinding": false}'<Paste>

由于尚未添加事实,因此它没有ID。

>>> print(f.id)
None

使用add()将事实添加到平台。

>>> f.add()
Fact(type='seenIn', value='report', source_object=Object(type='ipv4', value='127.0.0.1', id='85803795-2026-4526-97bb-6221563bf05e'), destination_object=Object(type='report', value='87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7', id='9a94c8ad-7b85-41e4-bed5-13362c6a41ac'))

事实将被添加到平台的事实所取代,现在它将具有一个ID。

>>> print(f.id)
'5e533787-e71d-4ba4-9208-531f9baf8437'

事实的字符串表示将显示事实的可读版本。

>>> str(f)
'(ipv4/127.0.0.1) -[seenIn/report]-> (report/87428fc522803d31065e7bce3cf03fe475096631e5e07bbd7a0fde60c4cf25c7)'

获取事实

使用get()根据其ID获取事实。

$ pip3 install act-api
0

对象的属性可以通过点符号检索。

$ pip3 install act-api
1

添加元事实

使用meta()创建元事实(关于事实的事实)。

$ pip3 install act-api
2

与事实一样,元事实不会发送到后端,必须使用add()将其提交到平台。

$ pip3 install act-api
3

获取元事实

使用get_meta()获取元事实(关于事实的事实)。

$ pip3 install act-api
4

收回事实

使用retract()收回事实。事实必须有一个id,可以直接指定它,也可以从搜索中检索事实。

$ pip3 install act-api

搜索对象

$ pip3 install act-api
6

创建对象类型

$ pip3 install act-api
7

搜索事实

使用参数搜索事实并限制搜索。

$ pip3 install act-api
8

默认情况下,搜索将返回并执行ResultSet,每次25次。

$ pip3 install act-api
9

complete属性可用于检查结果是否返回了所有可用项。

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
0

使用limit参数获取更多项目。

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
1

获取对象类型

获取所有对象类型。

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
2

图形查询

act平台支持使用gremlin查询语言进行图形查询。

使用对象中的traverse()函数执行图形查询。

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
3

您通常希望在gremlin查询中使用unfold(),以确保接收到对象和事实。

以下是查询威胁参与者别名的示例。

这张图看起来像下面的屏幕截图。

威胁参与者别名

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
4

键入系统

大多数实例都是由一个类型系统引导的,该系统将覆盖大多数用例。但是,也可以使用其他对象类型/事实类型扩展系统。

添加对象类型

可以通过创建objecttype对象并执行add()来添加对象。客户机上还有一个快捷方式(object_type),可以像这样使用:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
5

validator_参数指定此对象上允许的值。在本例中,允许任何非空值。

添加事实类型

facts指定与一个或两个对象的关系,若要添加facts,必须有facttype指定这些绑定。有一个helper函数,它将创建一个事实类型,其中包含系统中所有现有对象类型之间的绑定:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
6

但是,在生产系统上,建议只在对象之间创建对给定事实类型有意义的绑定,例如:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
7

将使用每个条目的所有源/目标对象的组合创建绑定。

也可以这样指定双向绑定:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
8

更新事实类型

事实是不可变的,因此无法更新objecttype和facttype验证器,因为这可能会导致incositence状态。但是,可以向现有事实添加对象绑定。此功能要求首先检索objets:

>>> import act
>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning")
9

事实链

事实链目前是一个实验性的概念,它支持事实链,其中链中的某些对象可能未知/占位符。

未知数用值"*"标记。在创建链之后,它们将获得一个特殊值"[Placeholder[<;Hash>;]],其中根据占位符的传入/传出路径计算哈希值。

>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning", requests_common_kwargs = {"auth": ("act", "<PASSWORD>")})
0

此功能应视为实验性的,并随时可能更改。它是在客户端实现的,后端目前还不知道事实链是什么,但frontned当前将以更方便用户的方式显示价值。

还要注意,如上面所示,在链中添加事实不是原子的,如果某些事实在后端未通过验证,则可能导致不一致。

测试

测试(用pytest编写)包含在test/文件夹中。模拟对象可用于测试/数据/文件夹中的大多数API请求。

此命令将使用python2和python3执行测试(需要pytest、python2和python3)。

>>> c = act.Act("https://act-eu1.mnemonic.no", user_id = 1, log_level = "warning", requests_common_kwargs = {"auth": ("act", "<PASSWORD>")})
1

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java从SVG中提取层   java通过蓝牙将文件从手机传输到其他手机   java如何使网络化JavaFX应用程序正确退出?   java Android Open GL不绘制正方形   java为什么使用泛型得到编译器警告?   多集群的Java Hazelcast问题   java OpenCV库配置正确,安卓应用程序可以正常运行一段时间,直到出现错误,表明不再加载该库   java字节好友通知中断Eclipse调试器   java JavaMail不会从发件人(Google除外)检索邮件   java使用MOXy将JsonObject属性映射到XML   java在FilteredTree中搜索“隐藏数据”   Javafx:用鼠标在ImageView上绘图   垃圾收集如何确定Java应用程序年轻gc的原因   java如何维护每个请求打开的Hibernate会话?   java gzip输入文件中的hadoop mapreduce   Java新手:Swing和显示ASCII文件   java RxJava异步订阅   java向editText添加搜索功能   java JavaFX TableViewTextField绑定