连接到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。
<表><广告>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