GraphGists

本交互式 Neo4j 教程涵盖了 Tor 网络中的一个场景,该场景具有庞大的基础设施,包括许多主机和服务器、隐藏的 Web 服务器以及用于监控 Tor 网络状态的 ARM 应用程序。


Tor 网络元模型

bb5cc290

数据库设置

您将在下面找到在 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