如何编写Cypher查询查找Memgraph中受感染主机的关联交互
查询与受感染计算机有交互的节点的Cypher语句
假设你的Memgraph数据库中:
- 计算机节点使用标签
Computer标识,包含is_infected(布尔值,标记是否感染)、ip/hostname/machine_id(唯一标识字段)等属性 - 计算机间的交互使用关系类型(如
INTERACTED_WITH、CONNECTED_TO、FILE_TRANSFER等)连接
以下是几种常用的查询场景:
1. 已知受感染计算机的唯一标识(如IP)
如果已经知道受感染机器的IP(比如192.168.1.100),可以精准定位并查询其交互节点:
MATCH (infected:Computer {ip: '192.168.1.100', is_infected: true})-[r]-(other:Computer) WHERE other <> infected RETURN other.machine_id, other.ip, other.hostname, type(r) AS interaction_type
MATCH子句匹配目标受感染节点及其关联的所有计算机节点WHERE子句排除受感染节点自身,避免返回自环结果RETURN返回交互节点的核心信息及交互类型
2. 查询所有受感染计算机的交互节点
如果有多个受感染节点,可批量查询所有感染节点的交互对象:
MATCH (infected:Computer {is_infected: true})-[r]-(other:Computer) WHERE other <> infected RETURN infected.ip AS infected_machine_ip, other.ip AS interacting_machine_ip, type(r) AS interaction_type
3. 按交互方向过滤查询
如果日志记录了交互的发起方向,可通过关系箭头精准筛选:
- 查询受感染计算机主动发起的交互:
MATCH (infected:Computer {is_infected: true})-[r]->(other:Computer) RETURN infected.ip, other.ip, type(r) AS initiated_interaction_type
- 查询主动连接到受感染计算机的节点:
MATCH (other:Computer)-[r]->(infected:Computer {is_infected: true}) RETURN other.ip, infected.ip, type(r) AS incoming_interaction_type
注意事项
- 请根据你的实际数据模型调整节点标签(比如
Computer可能是Endpoint)、属性名(比如用hostname代替ip)和关系类型(比如SSH_CONNECTION、RDP_SESSION等) - 如果需要统计交互次数,可添加
COUNT(r)到RETURN子句并配合GROUP BY使用
内容的提问来源于stack exchange,提问作者KWriter
相关产品推荐
相关产品推荐

