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

一、前言

上一篇文章中,介绍了防火墙配置文件包含的基本元素和格式样式,并模拟了几组有代表性的规则内容,作为基础测试数据。在拿到基础测试数据后,关于我们最终想解析成的数据是什么样式的,其实不难看出,主要还是和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语言,都有文本处理的方式,大家都习惯于用哪一种呢?

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

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

相关文章

gitlab仓库使用流程(开发)

1.1.GitLab代码提交流程: 1.1.1准备阶段: 确保已经安装了Git,并且配置了正确的用户名和邮箱地址。 在本地创建一个新的文件夹,用于存放即将开发的代码。 1.1.2.拉取代码: 使用git clone命令从GitLab上拉取项目代码…

day05vue学习

day05 一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路由入门 单页应用程序路由VueRouter的基本使用 …

学习网络编程No.14【数据链路层ARP理解】

引言: 北京时间:2024/3/14/9:20,简单聊一聊我的日常。昨天晚上十点左右更新完新的一篇文章,回到宿舍简简单单花了个两首歌的时间洗了个澡,然后为了保持形象吹了个头发,哈哈哈!当然对比以前的我…

[Labtools 27-1429] XML parser encountered a problem in file

平台:Vivado2108.3 最近在使用vivado的debug过程中发现,编译好工程后打开open hardware manager出现如下错误。 [Labtools 27-1429] XML parser encountered a problem in file E:/githome/xxxx/hw_1/hw.xml at line 1 : XML character encoding not su…

关系数据库标准语言SQL

1.SQL概述 1.1基本表(Base table) 实际存储在数据库中的表SQL中一个关系就对应一个基本表基本表可以有若干个索引基本表的集合组成关系模式,即全局概念模式(数据的整体逻辑结构) 1.2 存储文件 存储文件和相关索引组…

蓝桥杯刷题总结(Python组)

1、蛇形矩阵 解题思路:每次赋值后都对方向进行改变,一般上下左右就是(-1,0),(0,1),(1,0),(0&…

21.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

【sql】深入理解 mysql的EXISTS 语法

相关文章: 【sql】深入理解 mysql的EXISTS 语法 【sql】初识 where EXISTS 1. 使用格式如下: select * from a where exists ( 任何子查询 ) 代码根据颜色分成两段,前面的是主查询,后面红色的是子查询,先主后子&…

Linux(Ubuntu)下安装paddleocr详细教程

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。 1、 Ubuntu安装教程: 首先安装paddlepaddle:pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 一般此项不会报错…

交叉注意力融合时空特征的TCN-Transformer并行预测模型

独家 | 高创新预测模型 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博…

IDEA上的Scala环境搭建

Scala环境搭建 一、搭建Scala开发环境 安装Scala编译器 安装scala-2.12.10.msi(详见【我的资源】) 检查scala安装情况 在dos窗口输入scala,检查是否能够进入编译器。进行简单的scala命令计算 在IDEA中进行scala编码 File - Settings - …

智能风暴:如何码垛协作机器人正在重塑日用品生产?

在日用品行业中,码垛工作一直是一项劳动强度大、重复性高的工作。如今,随着科技的发展,码垛协作机器人的出现,正在给这一行业带来革命性的改变。 以往,工人们在炎热或寒冷的环境下,搬运、堆叠着各种日用品&…

redis-黑马点评-商户查询缓存

缓存:cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在,直接返回Shop shop JSONUtil.toBean(s, …

零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中,可以通过多种方法来查看版本号。以下是几种常用的方法: 使用cat命令查看/etc/centos-release文件: CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容,从而获得C…

传输大咖15|如何在 PC 客户端中集成镭速高速传输插件?

引言 在当前信息爆炸的时代,快速、安全、稳定地传输数据对于企业的日常运营至关重要。然而,传统的 FTP/HTTP 传输方式存在着传输速度慢、易受网络延时、丢包等问题。而镭速高速传输插件可以帮助企业轻松实现快速、安全的文件传输。本文将详细介绍如何在…

基于Spring Boot的云上水果超市的设计与实现

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行…

王老吉药业开拓数字经济“新蓝海”,成立数字经济研究所,科技赋能新品压片糖

3月12日,广州王老吉药业股份有限公司(以下简称“王老吉药业”)召开第十一届312感恩活动新闻发布会,宣告王老吉数字经济研究所成立,并发布王老吉压片糖新品。一系列重要重要举措,无一不标志着王老吉药业正以…

2.7 ROC曲线相比P-R曲线有什么特点?

2.7 ROC曲线相比P-R曲线有什么特点? 前情提要: P-R曲线详见:2.2 什么是精确率(Precision)与召回率(Recall)?二者如何权衡?) 2.4 ROC曲线是什么? 2…

目标检测——YOLOv5算法解读

作者:UltralyticsLLC公司 代码:https://github.com/ultralytics/yolov5 YOLO系列算法解读: YOLOv1通俗易懂版解读SSD算法解读YOLOv2算法解读YOLOv3算法解读YOLOv4算法解读YOLOv5算法解读 PP-YOLO系列算法解读: PP-YOLO算法解读…