基于字典过滤条件筛选嵌套NetFlow数据字典
NetFlow嵌套字典过滤实现方案
核心思路
- 遍历NetFlow数据中的每条流记录
- 对每条记录验证是否满足所有过滤条件(多条件需全部匹配)
- 保留符合条件的记录,维持原嵌套结构输出
代码实现(Python)
def filter_netflow(netflow_data, filter_conditions): filtered_result = {} # 遍历所有流条目,假设顶层键为流ID for flow_id, flow_info in netflow_data.items(): is_match = True # 逐一校验过滤条件 for cond_key, cond_val in filter_conditions.items(): if flow_info.get(cond_key) != cond_val: is_match = False break if is_match: filtered_result[flow_id] = flow_info return filtered_result
示例用法
原NetFlow数据
netflow_data = { "flow_001": {"srcaddr": "192.168.10.10", "dstaddr": "8.8.8.8", "dstport": "443", "protocol": "TCP"}, "flow_002": {"srcaddr": "192.168.10.11", "dstaddr": "1.1.1.1", "dstport": "80", "protocol": "TCP"}, "flow_003": {"srcaddr": "192.168.10.10", "dstaddr": "203.0.113.5", "dstport": "443", "protocol": "TLS"} }
单条件过滤(筛选目标端口443的流)
single_condition = {"dstport": "443"} filtered_single = filter_netflow(netflow_data, single_condition) # 输出结果包含flow_001和flow_003
多条件组合过滤(筛选源IP为192.168.10.10且目标端口443的流)
multi_conditions = {"srcaddr": "192.168.10.10", "dstport": "443"} filtered_multi = filter_netflow(netflow_data, multi_conditions) # 输出结果仅包含flow_001
扩展说明
- 如果NetFlow数据嵌套层级更深(比如流内包含多个数据包条目),可在遍历流后,嵌套遍历数据包做相同逻辑的条件校验
- 过滤条件的键名必须与NetFlow数据中的字段名完全一致,注意大小写匹配
- 若需模糊匹配(如IP段、端口范围),可修改条件判断逻辑,例如用字符串前缀匹配、数值区间比较等
内容的提问来源于stack exchange,提问作者Abdul Kareem
相关产品推荐
相关产品推荐

