Ai.KG项目相关内容 郝伟 2021/02/01 [TOC]
1. 主要研究内容
- 概述:通过各类爬虫技术,可以从网络上获得各类漏洞信息,这类漏洞信息都是纯文的形式,那么就会出现这样的问题:如何将没有编号的漏洞与其官方(如CNNVD)的漏洞编号关联起来?
- 课题目标:实现漏洞知识图谱的网站,参考:思知网站 https://www.ownthink.com/ 在国外的网站上,抓取一些漏洞信息无法格式化,那么如何判断漏洞影响的内容?这个问题可以描述为:
- 输入:未格式化的漏洞描述信息(英文)
- 输出:漏洞影响的实体,包括系统、模块、软件等
- 问题模型 首先,需要建立实体类,实体可以通过CPE描述,参见《CPE 漏洞比对机制.pptx》。
- 参考数据源:公司漏洞信息网站 https://vti.huaun.com:8443/index/
2. 进度计划
| 任务名称 | 说明 | 输出 | 工期(天) | 开始时间 | 完成时间 |
|---|---|---|---|---|---|
| 原始需求列表 | 对整理的需求进行细化分析,拆分成多条,以方便设计和验证。 | 《需求列表》 | 1 | 2021/01/27 | 2021/01/27 |
| 业务流程图 | 根据需求绘制相关的业务流程图 | 2 | 2021/01/28 | 2021/01/29 | |
| 概要设计 | 系统概要设计,包括系统构架和主要功能模块。 | 《概要设计文档》 | 1 | 2021/02/01 | 2021/02/01 |
| 详细设计 | 对各功能模块进行细分,明确接口的定义 | 《系统框架及接口设计文档》 | 7 | 2021/02/02 | 2021/02/10 |
| 测试方案 | 根据详细设计定义测试方案。 | 《测试设计文档》 | 1 | 2021/02/18 | 2021/02/18 |
| 系统原型 | 基于python的包括主要功能的原型系统一套。所有接口均为空函数或简单实现,用于验证架构和接口的正确性。 | Python版源代码一套及相关测试数据 | 5 | 2021/02/22 | 2021/03/01 |
3. 主要功能模块
| 功能模块 | 子功能 | 详细介绍 |
|---|---|---|
| 1 数据库管理 | 数据库操作 | 新建、删除、数据库属性编辑、导入和导出等操作 |
| 2 数据管理 | 本体操作 | 本体增删改操作 |
| - | 关系操作 | 关系增删改操作 |
| - | 属性操作 | 对本体或关系进行属性的增删改操作 |
| 3 数据查询 | 节点查询 | 根据条件,返回满足条件的节点及其1至n层的关系+本体的查询结果 |
| - | 关系查询 | 返回满足关系的包括多对满足此关系的节点列表 |
| - | 路径查询 | 根据给定的路径,返回满足条件的节点。 |
| 4 数据导出 | 数据导出 | 能够将数据以自定义的Json或CSV导出。 |
| 5 数据导入 | 自定义数据导入 | 能够将自定义的Json或CSV数据导入。 |
| - | 格式化数据导入 | 能够导入CNNVD的数据(csv或json)。 |
| 6 扩展功能 | HTTP REST接口 | 提供主要功能的相关接口。 |
| 7 系统配置 | - | - |
| URI | Funs | |
|---|---|---|
| 以下省略“ https://www.example.com/” | dict = {k1:v1, k2:v2} | |
| /api/node/create/{label_name}?k1=v1&k2=v2 | create_node(label_name, dict}创建一个节点 | |
| /api/relation/create_relation/{label_name}/?k1=v1&k2=v2 | create_relation(label_name, | dict)创建两个节点之间的关系 |
| /api/node/delete/{label_name}?k1=v1&k2=v2&k3=v3 | delete_node(label_name,[(k1,v1),(k2, | v2)]) |
| /api/node/update/{label_name}?k1=v1&k2=v2&k1=v1 | update_node(label_name,dict,k1,v1)修改 | 某一个节点的属性 |
| /api/node/query/{label_name}?k1=v1&k2=v2 | query_node(label_name,dict) 查询某一个节点 | |
| /api/node/query_relation1/?relaton_name | query_relation(relation_name) 查询有这个关系的所 | 有节点 |
| /api/node/query_relation1/{label_name} | query_relation1(label_name)查询这个标签下所有有关系 | 的节点 |
| /api/node/query_relation2/{label_name}?k1=v1&k2=v2&k3=v3&n | query_relation2(label_name, | dict,n)查询以这个节点为中心的n层的关系 |
| /api/node/query_relation3/{label_name}?k1=v1&k2=v2&k11=v11&k22=v22 | query_relation3 | (label_name,dict1,dict2) 查询节点到节点的最短路径 |
| /api/node/query_relation3/{label_name}?k1=v1&k2=v2&k11=v11&k22=v22&relation_name | delete_relation(label_name,dict1,dict2,relation_name) |
4. 函数定义
接口格式:/api/node/create/{label_name}?k1=v1&k2=v2 实现函数:create_node(label_name, args),其中label_name对应标签名,args是一个key-value的字典
5. neo4j 桌面版下载与激活
- Experience Neo4j 4.2 on Your Desktop 下载地址:https://neo4j.com/download/
- 激活信息:
First Name: Wei Last Name: HAO Organization: AUST Email: hwaust@126.com Activiation Code: eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6Imh3YXVzdEAxMjYuY29tIiwiZ29vZ2xlQW5hbHl0aWNzSWQiOiIzMDc3Mjc1MTQuMTYxMjU1ODY1OSIsIm9yZyI6IkFVU1QiLCJwdWIiOiJuZW80ai5jb20iLCJyZWciOiJXZWkgSEFPIiwic3ViIjoibmVvNGotZGVza3RvcCIsImV4cCI6MTY0NDA5NTc0MiwidmVyIjoiKiIsImlzcyI6Im5lbzRqLmNvbSIsIm5iZiI6MTYxMjU1OTc0MiwiaWF0IjoxNjEyNTU5NzQyLCJqdGkiOiJzMVB1V2E2RFAifQ.IWHl7w_A155gqNlY_7eYiGXUa6zch2AL1p7SYyZDrlF2d7Br-QBYw7-KlOpEN9NC6pt3G92jEgrHb5SJnyasN6R-OnfXgKUpLwraAPToNoDbIxdv-s7V913zqmzGr-kkju66cQLik64LVOvSa2E7fhSBcjrTwfwni-Bm3Qvbj1hRZ6uIor6A19Trd-6KCMYTIW_ey7PEYdhxP94WLPcNhTophdJkYZW8T_-ILBnUNeEaFxpWHNv-VCa0RCb3M0DupBtSBdeA6Q0ssvRf5t2KRxKOClWFD9ZKlNbSvPywk23DXsXuFYQrKB2mrP-oPAa4JMJaeY8oHLnsNi45sEeA1w
6. 测试服务器
VPS公网服务器 网 址:http://121.196.157.14:7474/browser/ 接 口:bolt://121.196.157.14:7687 用户名:neo4j 密 码:hd7iu2_X@v4u 登 陆:0p9o*I&U
合肥公司内网neo4j测试服务器(限公司内网) 网 址:http://192.168.3.232:7474/browser/ 接 口:bolt://192.168.3.232:7687 用户名:neo4j 密 码:123456
7. 一些测试内容
7.1. 使用经验
- neo4j不允许属性存储空值null。如果属性的值不存在,那么节点或者关系中的属性将被删除。这也可以通过remove来删除。
8. 基于Django的示例网站
最后更新:2021/02/04 http://121.199.10.158:8200/webapi/question/
8.1. 接口设计
8.2. 语法
-- 同时创建2个节点,每个节点有2个标签
CREATE (n1:TestNode:Greeting{name: "T&G1"}), (n2:TestNode:Greeting{name: "T&G2"})
-- 返回:Added 4 labels, created 2 nodes, set 2 properties, completed after 1 ms.
8.2.1. 可选参数
- limit=10,表示最多显示10条
- skip=5,跳过前5条记录
主要参考资料
- Web API 设计,微软AZURE全球版技术文档网站,https://docs.microsoft.com/zh-cn/azure/architecture/best-practices/api-design
- The OpenAPI Specification,https://github.com/OAI/OpenAPI-Specification
- HTTP API Design Guide,https://github.com/interagent/http-api-design
DJango Demo页:http://121.199.10.158:8200/
9. 一些开发中的问题
9.1. 2021/07/01 优化底层代码和接口
发现大量的实体与关系存在问题
- 优化关系和实体 -> 实体与关系图
- 建立新的框架 -> 代码
- 在新框架上定义接口 -> 接口文档
- 逐步将现有的接口用现有的接口实现
9.2. 2021/07/13 现有VIT平台迁移方案
关于VTi管理平台迁移至Ai.KG,提出三种方案: 1、将原平台迁移至Ai.KG内,通过研发一套同步机制将原平台数据同步至Ai.KG平台内,但是具有一定不可靠性; 2、重新在Ai.KG数据平台基础上再开发一套相同功能的平台,可靠性好; 3、使用现有原平台的界面,仅底层开发一套接口,即将原平台UI架在Ai.KG上,可靠性好,但有一定的兼容性问题需要不断改进。 三种方案都有一定的工作量和风险,鉴于1最容易实现且风险小,所以推荐先使用方案1,后期根据使用情况可以考虑向更可靠的方案2或方案3过度。
10. 参考资料
- (推荐)neo4j 教程,W3CSchool,https://www.w3cschool.cn/neo4j/
- Neo4j - CQL简介,W3CSchool,https://www.w3cschool.cn/neo4j/neo4j_cql_introduction.html
- 关于get一些页面内的嵌入操作,查看 test.jsp
- Maven安装配置过程,https://www.jianshu.com/p/ee54d9b342f4
- Maven官方下载页面,http://maven.apache.org/download.cgi
- Eclipse配置Maven,https://blog.csdn.net/wcc27857285/article/details/81812304
- Django网站,https://docs.djangoproject.com/en/3.1/
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用,https://www.cnblogs.com/wangjiming/p/8359181.html