如何将含hitcnt=0的ACL列表整理为指定格式CSV文件?
把ACL整理为指定格式CSV的方法
手动处理步骤
如果ACL条目数量不多,手动整理即可:
- 分组归类:先把每个
object-group对应的条目归为一组。开头不带缩进的行是组名(比如Jerry、Jason),下面缩进的行就是该组对应的源条目。 - 提取源地址/子网:
- 遇到
host x.x.x.x格式,直接提取后面的IP地址,比如host 192.168.1.2提取为192.168.1.2 - 遇到子网+掩码格式(比如
192.168.1.0 255.255.255.0),直接保留这个组合
- 遇到
- 拼接成CSV行:以组名为开头,后面跟每个提取出的源,用逗号分隔,一行对应一个组。
按照你提供的原始ACL,整理后的CSV内容为:
Jerry,192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4 Jason,2.2.2.2,192.168.1.0 255.255.255.0,3.3.3.3
脚本自动处理(适合大量ACL)
如果ACL条目较多,用Python脚本自动解析更高效:
import re # 替换为你的实际ACL内容 acl_content = """access-list outside line 1 extended permit tcp object-group Jerry host 10.10.10.1 eq 7030 0x1a9153aa access-list outside line 1 extended permit tcp host 192.168.1.1 host 10.10.10.1 eq 7030 (hitcnt=6) 0x3b6b876b access-list outside line 1 extended permit tcp host 192.168.1.2 host 10.10.10.1 eq 7030 (hitcnt=0) 0x592c1755 access-list outside line 1 extended permit tcp host 192.168.1.3 host 10.10.10.1 eq 7030 (hitcnt=0) 0x8cd36041 access-list outside line 1 extended permit tcp host 192.168.1.4 host 10.10.10.1 eq 7030 (hitcnt=17) 0x8c336546 access-list outside line 2 extended permit tcp object-group Jason host 10.10.10.5 eq 3051 0x4e3c0d1d access-list outside line 2 extended permit tcp host 2.2.2.2 host 10.10.10.5 eq 3051 (hitcnt=0) 0xfeb14ea6 access-list outside line 2 extended permit tcp 192.168.1.0 255.255.255.0 host 10.10.10.5 eq 3051 (hitcnt=0) 0xfafda7ae access-list outside line 2 extended permit tcp host 3.3.3.3 host 10.10.10.5 eq 3051 (hitcnt=10) 0xaed11ed5""" group_map = {} current_group = None # 逐行解析ACL内容 for line in acl_content.splitlines(): line = line.strip() if not line: continue # 匹配组名行 group_match = re.search(r'object-group (\w+)', line) if group_match: current_group = group_match.group(1) group_map[current_group] = [] continue # 匹配源地址(host IP 或 子网+掩码) src_match = re.search(r'tcp (host \S+|\S+ \S+) host', line) if src_match and current_group: src = src_match.group(1) # 去除host前缀,仅保留IP if src.startswith('host '): src = src.replace('host ', '') group_map[current_group].append(src) # 生成CSV格式内容 csv_lines = [f"{group},{','.join(src_list)}" for group, src_list in group_map.items()] # 打印结果,如需写入文件可取消下方注释 print('\n'.join(csv_lines)) # with open('acl_result.csv', 'w') as f: # f.write('\n'.join(csv_lines))
运行脚本后会直接输出符合要求的CSV内容,也可以将结果写入文件保存。
内容的提问来源于stack exchange,提问作者CrossingTheRoad2020
相关产品推荐
相关产品推荐

