1 引言
最近在实现恶意样本行为可视化,使用 python模块graphviz使用教程 可以达到既定要求;但是图数据库neo4j理论上也是个不错的选择,所以整理下。
思路:安装Neo4j数据库,python语言使用py2neo库进行使用。
2 安装Neo4j
主要copy于 图数据库neo4j的安装与基本使用(一)
2.1 安装JDK
Neo4j是基于Java的图形数据库,运行Neo4j需要启动JVM进程,因此必须安装JAVA SE的JDK。从Oracle官方网站下载 Java SE JDK,当前的版本是JDK8。java版本的高低决定了Neo4j的版本
2.2 安装Neo4j
官网下载最新版本Neo4j
Neo4j应用程序有如下主要的目录结构:
1 2 3 4
| bin目录:用于存储Neo4j的可执行程序; conf目录:用于控制Neo4j启动的配置文件; data目录:用于存储核心数据库文件; plugins目录:用于存储Neo4j的插件;
|
2.3 配置环境变量
创建主目录环境变量NEO4J_HOME,并把主目录设置为变量值。
2.4 启动neo4j
2.4.1 通过控制台启动Neo4j程序
打开cmd,切换到Neo4j主目录下的bin
目录,运行下面命令即可:
用户名和密码默认为neo4j
,首次登陆需要修改密码(Neo4j)
java与neo4j版本不对应的报错:
1 2 3 4 5 6 7 8 9
| 警告: ERROR! Neo4j cannot be started using java version 1.8.0_301 警告: * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j Server. * Please see https://neo4j.com/docs/ for Neo4j installation instructions. Invoke-Neo4j : This instance of Java is not supported 所在位置 D:\developer\neo4j\neo4j-community-4.4.3\bin\neo4j.ps1:21 字符: 7 + Exit (Invoke-Neo4j -Verbose:$Arguments.Verbose -CommandArgs $Argument ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Invoke-Neo4j
|
当时我测试的版本(JDK8+Neo4j4.4.4)出现上面的报错,该换JDK8+Neo4j3.5.30后成功运行。
2.4.2 把Neo4j安装为服务(Windows Services)
请查阅 图数据库neo4j的安装与基本使用(一)
3 python使用
python通过调用py2neo
库实现对数据库的操作。
3.1 连接数据库
安装py2neo库:pip install py2neo
1 2 3 4 5 6 7
| from py2neo import Graph
test_graph = Graph( "http://localhost:7474", username="neo4j", password="Neo4j" )
|
测试时出现报错:
1
| ValueError: The following settings are not supported: {'username': 'neo4j'}
|
因为py2neo版本问题,需要做出以下修改:
1 2 3
| from py2neo import Graph
test_graph = Graph("http://localhost:7474", auth=("neo4j", "Neo4j"))
|
详见 关于使用Py2neo连接Neo4j图数据库出现“ValueError: The following settings are not supported”报错的解决方案
3.2 基本操作
参考:py2neo在已有节点上批量创建关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| from py2neo import Graph, Node, Relationship, Subgraph
test_graph = Graph("http://localhost:7474", auth=("neo4j", "Neo4j"))
test_graph.delete_all()
node_list = [] node_list.append(Node("Teacher", name="Alice")) node_list.append(Node("Student", name="Bob")) node_list.append(Node("Student", name="Dragon")) node_list.append(Node("Student", name="Pig"))
nodes = Subgraph(node_list) test_graph.create(nodes)
edge_list = []
node1 = test_graph.nodes.match(name="Alice").first() node2 = test_graph.nodes.match(name="Bob").first() edge_list.append(Relationship(node1, "teach", node2)) node1 = test_graph.nodes.match(name="Alice").first() node2 = test_graph.nodes.match(name="Dragon").first() edge_list.append(Relationship(node1, "teach", node2)) edges = Subgraph(relationships=edge_list) test_graph.create(edges)
|
效果图如下:
4 拓展——SPADE
当时参加A-ST竞赛时使用过,本次测试没进行。
Github-Spade
X 参考