持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
前言
在昨天的文章中,配置了Neo4J图数据库的远程访问,简而言之就是在配置文件中,将dbms.connectors.default_listen_address=0.0.0.0的注释去掉。这样就不在使用本地回环地址127.0.0.1进行端口映射了,进而从公网进行访问,另外如果部署数据库的主机在内网,使用跳板机等方式进行访问,则需要建立隧道进行内网穿透,一般使用XShell等远程工具,目标主机配置为远程数据库服务器内网地址,端口为7474,而本地监听端口则设置为127.0.0.1,端口随机,放访问127.0.0.1:{映射端口号}的时候,就可以本地访问Neo4j的图形化界面,而今天的记录中,将使用Neo4J数据库,并使用Python脚本进行数据库连接等操作
Neo4J的使用
前端可视化界面中,首先要连接数据库,如下图所示:
因此需要将端口7687也进行本地端口转发,如下:
确定本地正确监听端口:
neo4j的初始用户名和密码均为 neo4j,因此填入用户名密码进行登录:如下:
登录后修改用户名和密码:
这样数据库就能够正常连接和使用了:
创建节点
创建一个节点,由于本项目是做威胁情报的知识图谱,因此使用IP作为创建节点,使用如下命令:
create (n:IpAddr{IP:'1.1.1.1'}) return n
这样我们就可以看到在前端能够显示一个单节点1.1.1.1,上面命令中,create表示创建操作,IpAddr表示节点类型,其中有一个IP属性,属性值为1.1.1.1,同时改节点可以有其他属性。
单击Table可以看到如下所示:
{
"identity": 0,
"labels": [
"IpAddr"
],
"properties": {
"IP": "1.1.1.1"
}
}
其中"identity"为唯一标识,用于该节点的唯一查询。使用create命令再构建几个节点,如下
create (n:IpAddr{IP:'1.1.1.2'}) return n
create (n:IpAddr{IP:'1.1.1.3'}) return n
create (n:IpAddr{IP:'1.1.1.4'}) return n
create (n:IpAddr{IP:'1.1.1.5'}) return n
create (n:IpAddr{IP:'1.1.1.6'}) return n
这时候需要在一张图上统一展示我们创建的节点,使用如下MATCH命令:
MATCH (n:IpAddr) return n
这样在一个界面中我们所有的IP节点能够显示出来。
创建多个属性
如果我们的节点有多个属性,那么可以创建吗,答案是可以的,创建多个属性的命令如下:
CREATE (n:ThreatActor {Country:'US', IP:'1.1.1.1'})
CREATE (n:ThreatActor {Country:'US', IP:'1.1.1.2'})
CREATE (n:ThreatActor {Country:'US', IP:'1.1.1.3'})
CREATE (n:ThreatActor {Country:'UK', IP:'1.1.1.4'})
CREATE (n:ThreatActor {Country:'UK', IP:'1.1.1.5'})
可以看到节点中已经包含两种属性。使用如下命令在同一张图上看两种节点:
MATCH (n) return n
创建关系
创建两种节点直接的关系,使用如下命令:
match (a:IpAddr {IP:'1.1.1.1'}), (b:ThreatActor {Country:'US', IP:'1.1.1.1'}) merge (a)-[r:belongTo]->(b)
这样就可以看到两个节点直接的关系,如下:
随机多建立多个关系,如下图所示:
查询
match (a:IpAddr)-[:belongTo]->(b:ThreatActor{IP:'1.1.1.1'}) return a,b
删除
MATCH (a:IpAddr {IP:'1.1.1.1'}) DELETE a
节点已经被删除
以上是Neo4J的CUDA操作,之后将导入真实数据进行实际使用,Thanks♪(・ω・)ノ。