Kusto查询需求:按源IP分组去重展示多端口网络连接
Kusto查询修正:获取源IP分组下的唯一连接记录(总连接数超2)
原查询的问题在于,make_list会保留所有重复的连接条目,导致结果里出现重复记录。以下是修正后的查询,能实现按源IP分组、展示唯一连接记录,且仅保留总连接数超过2的分组:
datatable(SrcIp:string, DstIP:string, DstPort:string)[ '192.168.1.1', '10.0.0.1','80', '192.168.1.1', '10.0.0.2','8080', '192.168.1.1', '10.0.0.1','443', '192.168.1.1', '10.0.0.1','443', '192.168.1.2', '10.0.0.1','80', '192.168.1.2', '10.0.0.1','80',] // 统计每个源IP的总原始连接数,同时生成去重后的连接记录集合 | summarize total_records = count(), unique_connections = make_set(pack("Source IP", SrcIp, "Destination IP", DstIP, "Destination Port", DstPort)) by SrcIp // 筛选总连接数大于2的源IP分组 | where total_records > 2 // 将集合展开为单独的行 | mv-expand unique_connections // 整理列名,匹配预期输出格式 | project Source_IP = unique_connections["Source IP"], Destination_IP = unique_connections["Destination IP"], Destination_Port = unique_connections["Destination Port"]
修正说明
- 用
make_set替代make_list:make_set会自动对(目的IP+目的端口)的组合去重,确保每条连接记录唯一 - 保留总连接数统计:
count()统计的是该源IP的原始连接记录总数,用于筛选出总连接数超2的分组 - 展开集合为行:通过
mv-expand将去重后的连接集合拆分为单独的行,和预期的输出结构一致
预期输出
| Source_IP | Destination_IP | Destination_Port |
|---|---|---|
| 192.168.1.1 | 10.0.0.1 | 80 |
| 192.168.1.1 | 10.0.0.2 | 8080 |
| 192.168.1.1 | 10.0.0.1 | 443 |
内容的提问来源于stack exchange,提问作者Miguel Cuba
相关产品推荐
相关产品推荐

