Tor 网络图
本交互式 Neo4j 教程涵盖了 Tor 网络中的一个场景,该场景具有庞大的基础设施,包括许多主机和服务器、隐藏的 Web 服务器以及用于监控 Tor 网络状态的 ARM 应用程序。
数据库设置
您将在下面找到在 Neo4j 中创建 Tor 网络图的完整 Cypher 脚本。此简单脚本是我们将稍后进行分析的数据集的完整设置。
// Create Alice
CREATE (alice:TorHost {
name:'alice-pc.onion',
isTorNode: true
})
// Create Dave
CREATE (dave:Server {
name:'dave-server.onion',
type: 'Directory',
isTorNode: true
})
// Create Node1
CREATE (node1:Host {
name:'node1-router.onion',
isTorNode: false
})
// Create Node2
CREATE (node2:TorHost {
name:'node2-pc.onion',
isTorNode: true
})
// Create Node3
CREATE (node3:Host {
name:'node3-pc.onion',
isTorNode: false
})
// Create Node4
CREATE (node4:Host {
name:'node4-pc.onion',
isTorNode: true
})
// Create Node5
CREATE (node5:Host {
name:'node5-pc.onion',
isTorNode: false
})
// Create Bob
CREATE (bob:TorHost {
name:'bob-mac.onion',
isTorNode: true
})
// Create Bob
CREATE (chuck:TorHost {
name:'chuck-ubuntu.onion',
isTorNode: true
})
// Create Hidden service
CREATE (webServer:HiddenService {
name:'Web Server',
publicKey:'3048 0241 ...',
port: '9999'
})
// Create Hidden service
CREATE (arm:Application {
name:'Anonymizing Relay Monitor'
})
// Connect Alice to Directory Server Dave
CREATE (alice)-[:DEPENDS_ON]->(dave)
// Connect Alice to Node-1
CREATE (alice)-[:CONNECTS]->(node1)
// Connect Node-1 to Node-2
CREATE (node1)-[:CONNECTS]->(node2)
// Connect Node-2 to Node-3
CREATE (node2)-[:CONNECTS]->(node3)
// Connect Node-3 to Bob
CREATE (node3)-[:CONNECTS]->(bob)
// Connect Chuck to Node-3
CREATE (chuck)-[:CONNECTS]->(node3)
// Connect Node-5 to Node-2
CREATE (node5)-[:CONNECTS]->(node2)
// Connect Node-4 to Node-5
CREATE (node4)-[:CONNECTS]->(node5)
// Connect Node-1 to Node-4
CREATE (node1)-[:CONNECTS]->(node4)
// Connect Node-3 to Node-4
CREATE (node3)-[:CONNECTS]->(node4)
// Connect Chuck to Node-3
CREATE (chuck)-[:CONNECTS]->(node3)
// Connect Chuck to ARM
CREATE (chuck)-[:RUNS]->(arm)
// Connect Bob to WebServer
CREATE (bob)-[:RUNS]->(webServer)
RETURN *
Tor 的网络库存
以下查询生成一个数据表,该表快速概述了 Tor 的网络基础设施。
MATCH (n)
RETURN labels(n)[0] as type,
count(*) as count,
collect(n.name) as names
查找连接最密集的组件
以下查询查找 Tor 网络基础设施中最密集连接的组件。正如预期的那样,依赖最重的组件是节点 5。
MATCH (n)<-[:CONNECTS*]-(connect)
RETURN n.name as Host,
count(DISTINCT connect) AS Connects
ORDER BY Connects DESC
LIMIT 1
查找组件的依赖链:ARM
以下查询查找 Tor 的 ARM 应用程序从左到右的依赖组件路径。如果 ARM 应用程序右侧的任何一个组件出现故障,ARM 应用程序将会出现故障。
MATCH (dependency)<-[:CONNECTS*]-(dependent)
WITH dependency, count(DISTINCT dependent) AS Dependents
ORDER BY Dependents DESC
LIMIT 1
WITH dependency
MATCH p=(resource)-[:CONNECTS*]->(dependency)
WHERE resource.system = "arm"
RETURN "[" + head(nodes(p)).name + "]" +
reduce(s = "", n in tail(nodes(p)) | s + " -> " + "[" + n.name + "]") as Chain
此页面是否有帮助?