【Flask开发实战】防火墙配置文件解析(二)之shell读取内容

news/2024/4/27 14:56:31

一、前言

上一篇文章中,介绍了防火墙配置文件包含的基本元素和格式样式,并模拟了几组有代表性的规则内容,作为基础测试数据。在拿到基础测试数据后,关于我们最终想解析成的数据是什么样式的,其实不难看出,主要还是和IP地址组、服务端口组、规则清单这三个模块类别有关。配置文件里的数据内容是逐行从上到下,依次展示的IP地址组信息、服务端口组信息、规则清单信息;故我们可采用shell逐行读取文本内容,加上相应的过滤处理机制,分别获取到我们想要的三个模块完整信息。

二、shell处理说明

1、定义好工作处理目录,及相应参数文件,方便脚本处理时文件的统一输出和获取,例如:

#定义工作目录

dir="/mnt/hgfs/python/rule/test"

#定义工作临时目录

dirtmp="/mnt/hgfs/python/rule/test/dirtmp"

#定义防火墙配置文件目录
dirtcfg="/mnt/hgfs/python/rule/test/cfg"

#定义防火墙处理结果输出目录
dirresult="/mnt/hgfs/python/rule/test/result"

#定义防火墙名称
fwname="policy"

2、处理逻辑

通过整体配置文件的读循环,将每行内容输出到临时文件中,再对临时文件进行文本过滤,依次获取到 所有IP地址组信息、服务端口组信息、规则清单信息,在文本过滤过程中,需要考虑到不同文本的过滤条件,以及数量的控制(例如一个端口组下面对应多条端口信息等),示例如下:

1)定义好需要截取的数据内容和准备工作

###创建三类表的基础信息内容

echo 'fwname ipgroupname securityzone ipaddress' > $dirresult/$fwname-ipgroup
echo 'fwname servicegroupname serviceport' > $dirresult/$fwname-servicegroup
echo 'fwname rulename ruleid description action source-zone destination-zone source-ip-host destination-ip service' > $dirresult/$fwname-rule

####创建三类表临时处理目录及初始文件

mkdir -p $dirtmp/$fwname/ipgrouplinshitmp
mkdir -p $dirtmp/$fwname/servicegrouplinshitmp
mkdir -p $dirtmp/$fwname/rulelinshitmp

echo  "#" >  $dirtmp/$fwname/ipgrouplinshitmp/name
echo  "#" >  $dirtmp/$fwname/ipgrouplinshitmp/zone
echo  "#" >  $dirtmp/$fwname/ipgrouplinshitmp/ip
echo  "#" >  $dirtmp/$fwname/servicegrouplinshitmp/servicename
echo  "#" >  $dirtmp/$fwname/servicegrouplinshitmp/serviceport
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/rule
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/ruleid
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/description
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/action
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/sourcezone
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/destinationzone
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/sourceip
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/destinationiphost
echo  "#" >  $dirtmp/$fwname/rulelinshitmp/service

2)循环读取文本内容

####开始读取

cat $dirtcfg/$fwname > $dirtmp/datatmp
echo finalctrl >> $dirtmp/datatmp
cat $dirtmp/datatmp |while read i;
do
echo $i > $dirtmp/$fwname/linshi
 

####截取关键内容####

ipgroupname=`cat $dirtmp/$fwname/linshi|awk '{ $1="";$2=""; print $0}'`
ipaddress=`cat $dirtmp/$fwname/linshi|awk '{$1="";$2=""; print $0}'`
servicename=`cat $dirtmp/$fwname/linshi|awk '{print $3}'`
serviceport=`cat $dirtmp/$fwname/linshi|awk '{$1="";$2="";$3=""; print $0}'`
rulename=`cat $dirtmp/$fwname/linshi|awk '{ $1="";$2=""; print $0}'`
description=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0}'`
action=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0}'`
sourcezone=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0}'`
destinationzone=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0'}`
sourceip=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0}'`
destinationiphost=`cat $dirtmp/$fwname/linshi|awk '{ $1=""; print $0}'`
service=`cat $dirtmp/$fwname/linshi|grep service|awk '{ $1=""; print $0}'`

3)读取数量的控制,文本内容中,可能存在部分字段为空,同一字段多数值的情况出现,所以增加个数量统计,用以判断取值,例如(截取部分)

###记录各字段计数

ipgroupnum=`cat $dirtmp/$fwname/linshi|grep "ip address-set"|wc -l`
servicenamenum=`cat $dirtmp/$fwname/linshi|grep "ip service-set"|wc -l`
servicenum=`cat $dirtmp/$fwname/linshi|grep service|wc -l`
finalctl=`cat $dirtmp/$fwname/linshi|grep finalctrl|wc -l`

###if语句用来控制记录

if [ $ipgroupnum -eq 1 ];then
  name=`cat $dirtmp/$fwname/ipgrouplinshitmp/name`
  zone=`cat $dirtmp/$fwname/ipgrouplinshitmp/zone`
  ip=`cat $dirtmp/$fwname/ipgrouplinshitmp/ip`
  echo "$fwname $name $zone $ip"  >>$dirresult/$fwname-ipgroup
  rm -rf $dirtmp/$fwname/ipgrouplinshitmp
  mkdir $dirtmp/$fwname/ipgrouplinshitmp
  echo $ipgroupname> $dirtmp/$fwname/ipgrouplinshitmp/name
  echo  "#" >$dirtmp/$fwname/ipgrouplinshitmp/zone
  echo  -n "#" >  $dirtmp/$fwname/ipgrouplinshitmp/ip
  touch  $dirtmp/$fwname/ipgrouplinshitmp/ip
   
elif [ $securityzonenum -eq 1 ];then
  rm -rf $dirtmp/$fwname/ipgrouplinshitmp/zone
  echo   "$securityzone">> $dirtmp/$fwname/ipgrouplinshitmp/zone

三、结果展示

完整脚本执行完之后,可以获取到3个目标数据内容,处理后的格式以csv表格文件形式记录,如

地址组基础数据

端口组基础数据

规则基础数据

完成这一步,算是对原始数据的读取识别,输出成我们想要的基础数据格式(也就是3类数据基础表),下一步则是需要对这3类表进一步展开处理,例如三者之间的关联补充,丰富更多的字段信息等操作内容,处理完,再把最终的数据入库,用于后期的页面查询展示。 

关于这一块的数据处理,也有其他程序处理的手段,例如python、java、go语言,都有文本处理的方式,大家都习惯于用哪一种呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.cpky.cn/p/10900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【算法杂货铺】分治

目录 🌈前言🌈 📁 快速排序 📂75. 颜色分类 - 力扣(LeetCode) 📂 912. 排序数组 - 力扣(LeetCode) 📂 215. 数组中的第K个最大元素 - 力扣(Lee…

WebGIS航线编辑器(无人机航线规划)

无人机航点、航线规划,实现全自动航点飞行作业及飞行航拍。禁飞区、作业区功能保障飞行安全。 GIS引擎加载 const viewer new Cesium.Viewer("cesiumContainer", { imageryProvider: new Cesium.IonImageryProvider({ assetId: 3872 }), }); const im…

POJO简介

文章目录 简介POJO与ELB的区别POJO真正的意思 常见的POJO类DTODAOPOVOEntity 简介 什么是POJO?POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB(EJB是Enterprise Java Beans技…

【SpringSecurity】十五、完成系统支持Github三方登录

文章目录 1、需求2、在对接系统中完成客户端注册3、创建客户端应用4、CommonOAuth2Provider SpringSecurity OAuth2.0文档: https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html 1、需求 对接Github,在自己系统实现支持Githu…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而,如何快速、高效地制作出高质量的视频内容,成为摆在众多企业面前的一大难题。针对这一挑战,美摄科技凭借深厚的技术积累和创新能力,推出了全新的剪同款SDK解决方案&am…

python宿舍管理系统flask-django-php-nodejs

随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建宿舍管理系统。系统分为多个功能模块:学生、宿舍管理、楼宇信息、宿舍信息、宿舍安排、缺勤信息等。通过系统测试&…