通过Python扫描代码关键字并进行预警的实现方法

近期线上出现一个bug,研发的小伙伴把测试环境的地址写死到代码中,在上线前忘记修改,导致线上发布的代码中使用了测试环境地址。

开发过程中虽然有各种规范制度,但是难免有粗心,与其责备不如通过技术手段将问题进行避免。

为了达到上述需求,初步想通过以下步骤来实现代码关键字自动扫描告警。

  1. Python安装
  2. Git安装
  3. GitPython安装
  4. 定时任务配置(方案一:crontab   方案二:APScheduler)
  5. git代码获取
  6. 关键词扫描
  7. 邮件告警
#安装python的依赖包
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc
#下载Python安装包,版本号:Python-3.7.1.tgz(在/opt下创建目录Python3)
wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz
#解压安装包
tar -zxvf Python-3.8.1.tgz
#指定python3安装目录
./configure --prefix=/usr/local/python3
#编译&安装
make && make install
#创建软连接,将自定目录管理到指定目录
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
#添加环境变量
vi /etc/profile
export PATH=/usr/local/python3/bin:$PATH
 source /etc/profile

#至此Python3安装完毕,通过命令验证

Git安装
#下载git安装包,版本号:2.21.0
wget https://github.com/git/git/archive/v2.21.0.tar.gz
#解压
tar -zxvf v2.21.0.tar.gz
#安装
make prefix=/usr/local/git install
#添加环境变量
vi /etc/profile
export PATH=/usr/local/git/bin:$PATH
source /etc/profile
 #至此Python3安装完毕,通过命令验证

GitPython3安装
#可以采用在线安装
pip3 install GitPython
#但是我这里由于网络限制无法在线安装,只能采用手动安装
#下载依赖包,下载地址https://pypi.org/,可以根据关键字smmap、gitdb进行检索下载
smmap-3.0.4.tar.gz
gitdb-4.0.5.tar.gz
#安装
tar -zxvf smmap-3.0.4.tar.gz
cd smmap-3.0.4
python3 setup.py install

tar -zxvf gitdb-4.0.5.tar.gz
cd gitdb-4.0.5
python3 setup.py install

tar -zxvf GitPython-3.1.2
cd GitPython-3.1.2
python3 setup.py install

#安装完毕后,可以写一个demo.py进行验证
复制代码
from git.repo import Repo
import os

demo_git_path = '/opt/workspace/demo'

#定义本地目录
Repo.clone_from('http://git.***.com/demo/demo_git.git',to_path=demo_git_path, branch='master')
复制代码
 #最终代码库将克隆到本地目录(执行前将demo.py赋权)

 python3 demo.py
linux下配置定时任务
#定时任务采用linux的crontab来实现
#编辑定时任务
crontab -e
* * * * * python3 /opt/python3-workspace/demo.py >> /opt/python3-workspace/logs/demo.log
#前五个是时间指令,分钟(0-59)小时(0-28)日期(1-31)月份(1-12)星期几(0-6,其中0代表星期日)
#python3 是具体执行的指令 后面跟的是执行的脚本 在后面跟的是日志
#编辑保存后会立即执行
#查看当前正在运行的任务,本案例中已临时注释#
crontab -l

原计划使用linux的crontab进行任务调度,但是在执行GitPython命令时遇到两个问题,即

  问题一:在crontab中无法调用GitPython命令,解决方案,在crontab中增加GitPython的路径

  主要内容是在crontab中增加如下代码,至此第问题一可以解决

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/root/bin
MAILTO=root
HOME=/

  问题二:在crontab中执行GitPython命令时,无法读取linux记录的账号密码,导致自动任务始终无法检出代码,由于该问题一直未解决,因此决定采用python的定时任务调度解决该问题,具体见下文

APScheduler安装
#这里由于网络限制无法在线安装,只能采用手动安装
#下载依赖包,下载地址https://pypi.org/,可以根据关键字pytz、six、tzlocal进行检索下载
pytz-2020.1.tar.gz
six-1.14.0.tar.gz
tzlocal-2.1.tar.gz
APScheduler-3.6.3.tar.gz

#安装tzlocal
tar -zxvf tzlocal-2.1.tar.gz
cd tzlocal-2.1
python3 setup.py install

#安装six
tar -zxvf six-1.14.0.tar.gz
cd six-1.14.0
python3 setup.py install

#安装pytz
tar -zxvf pytz-2020.1.tar.gz
cd pytz-2020.1
python3 setup.py install

#安装APScheduler
tar -zxvf APScheduler-3.6.3.tar.gz
cd APScheduler-3.6.3
python3 setup.py install

至次APScheduler安装完毕,写个demo验证下:

git代码获取

通过Repo.clone_from获取远程代码仓库,指定master分支,将远程代码库clone到本地/opt/workspace/demo目录下,
如果当前目录不为空,则通过shutil.rmtree()进行级联删除

关键词扫描
利用os组件,实现对指定目录进行递归扫描,将符合要求的文件扩展名.css .js .ftl .properties等文件进行逐行扫描
关键词扫描其实就是利用正则表达式,对要扫描的关键词进行匹配,如果匹配成功则将目标文件名称放入到异常文件列表
详细代码如下:
import os
import re
project_git_path = '/opt/workspace/demo'
cssnum = 0
jsnum = 0
ftlnum = 0
fileList = []
pattern = re.compile(r'.test.com')
def analysiFile(pathFilename):
 #print('文件名:', filename)
 fo = open(pathFilename, 'r', encoding='UTF-8')
 for line in fo.readlines():
  match = pattern.search(line)
  if match:
   if(fileList.count(filename) == 0):
    fileList.append(filename);
#循环打印目录下的所有文件
for parentdir, dirname, filenames in os.walk(project_git_path):
 for filename in filenames:
  if os.path.splitext(filename)[1] == '.css':
   #分析具体文件
   analysiFile(parentdir + '\\' + filename)
  if os.path.splitext(filename)[1] == '.js':
   #分析具体文件
   analysiFile(parentdir + '\\' + filename)
  if os.path.splitext(filename)[1] == '.ftl':
   #分析具体文件
   analysiFile(parentdir + '\\' + filename)
  if os.path.splitext(filename)[1] == '.properties':
   #分析具体文件
   analysiFile(parentdir + '\\' + filename)
for item in fileList:
 print('命中文件:', item)
print('共计:', len(fileList))
邮件告警
邮件告警即通过smtp服务将上述匹配出来的异常文件列表,发送给对应系统负责人
详细代码如下:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 第三方 SMTP 服务
mail_host = "smtp.****.com" # 设置服务器
mail_user = "*****@****.com" # 用户名
mail_pass = "*****" # 口令
sender = '*****@****.com'
receivers = ['***@***.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("Python自动化检查", 'utf-8')
message['To'] = Header("系统负责人", 'utf-8')
subject = '某系统近2个月版本内网域名检查结果'
message['Subject'] = Header(subject, 'utf-8')
try:
 smtpObj = smtplib.SMTP()
 smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
 smtpObj.login(mail_user, mail_pass)
 smtpObj.sendmail(sender, receivers, message.as_string())
 print
 "邮件发送成功"
except smtplib.SMTPException:
 print
 "Error: 无法发送邮件"

  至此,该项目所需要的所有模块均已开发完毕,最后只需要根据自己的实际需求将上述各个模块组合在一起运行即可

由于本人是python初学者,代码基本是按照顺序执行的方式进行设计的,以能实现最终目的为主,为对代码结构、性能等合理性做出特别考虑

最后利用nohup命令,实现最终脚本的后台运行

总结

到此这篇关于通过Python扫描代码关键字并进行预警的文章就介绍到这了,更多相关Python扫描代码关键字预警内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python编写简单端口扫描器

    本文实例为大家分享了python编写简单端口扫描器的具体代码,供大家参考,具体内容如下 直接放代码 此代码只支持扫描域名,要扫描IP请自己修改 from socket import * from threading import Thread import optparse Port = [80,21,23,22,25,110,443,1080,3306,3389,1521,1433] Server = ['HTTP','FTP','TELNET','SSH','SMTP','POP3','HT

  • python实现扫描局域网指定网段ip的方法

    一.问题由来 工作的局域网中,会接入很多设备,机器人上的网络设备就2个了,一个巨哥红外,一个海康可见光.机器人还有自身的ip. 有时候机器人挂的多了,设备维修更换中,搞来搞去就不记得ip是什么,用自带的软件的确能扫出来,但是这就要开两个windows环境下的软件,耗时耗力,折腾.正好在linux,那简单,敲命令. nmap -P 192.168.1.0/24 可以扫描出 192.168.1.0~192.168.1.255的全部ip 但是前提是要装过nmap apt-get install nma

  • 通过shell+python实现企业微信预警

    一 注册企业微信 本文所有内容是基于2018年12月26日时的企业微信版本所做的教程.后面可能由于企业微信界面规则更改导致部分流程不一致.(大家看文章时请注意这一点) 注册企业微信必备条件 微信号(实名认证了) 手机号 之前我有个误区,就是以为注册企业微信就一定要有营业执照之类的证件才可以注册,实际是不需要也可以的,因为我们直接注册后,即使不绑定企业,我们也是可以正常使用的,未绑定实际企业的,有200人的数的上限(难道你们技术部有200人?不存在的,哈哈!) 注册 注册链接:企业微信 企业名称可

  • python nmap实现端口扫描器教程

    NMap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包. nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端.确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting).它是网络管理员必用的软件之一,以及用以评估网络系统安全. 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 .系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜

  • 通过Python扫描代码关键字并进行预警的实现方法

    近期线上出现一个bug,研发的小伙伴把测试环境的地址写死到代码中,在上线前忘记修改,导致线上发布的代码中使用了测试环境地址. 开发过程中虽然有各种规范制度,但是难免有粗心,与其责备不如通过技术手段将问题进行避免. 为了达到上述需求,初步想通过以下步骤来实现代码关键字自动扫描告警. Python安装 Git安装 GitPython安装 定时任务配置(方案一:crontab   方案二:APScheduler) git代码获取 关键词扫描 邮件告警 #安装python的依赖包 yum -y inst

  • python实现扫描日志关键字的示例

    我们在压力测试过程会收集到很多log,怎样快速从中找到有用信息呢?让python脚本帮我们做这部分工作吧! 废话不说,上代码 环境:win10 + python2.7.14 #-*- encoding: utf-8 -*- #author : beihuijie #version 1.1 import re import sys import os import countTime def getParameters(): ''' get parameters from console comm

  • Python中super关键字用法实例分析

    本文实例讲述了Python中super关键字用法.分享给大家供大家参考.具体分析如下: 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(self): print "enter A" print "leave A" class B(A): def __init__(self): print "enter B" A.__init

  • Python扫描IP段查看指定端口是否开放的方法

    本文实例讲述了Python扫描IP段查看指定端口是否开放的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/local/bin/python #-*- coding: UTF-8 -*- #################################################################### ################################################## #BLOG:http://hi.baidu.com/alal

  • fastcgi文件读取漏洞之python扫描脚本

    PHP FastCGI的远程利用 说到FastCGI,大家都知道这是目前最常见的webserver动态脚本执行模型之一.目前基本所有web脚本都基本支持这种模式,甚至有的类型脚本这是唯一的模式(ROR,Python等). FastCGI的主要目的就是,将webserver和动态语言的执行分开为两个不同的常驻进程,当webserver接收到动态脚本的请求,就通过fcgi协议将请求通过网络转发给fcgi进程,由fcgi进程进行处理之后,再将结果传送给webserver,然后webserver再输出给

  • python扫描proxy并获取可用代理ip的实例

    今天咱写一个挺实用的工具,就是扫描并获取可用的proxy 首先呢,我先百度找了一个网站:http://www.xicidaili.com 作为例子 这个网站里公布了许多的国内外可用的代理的ip和端口 我们还是按照老样子进行分析,就先把所有国内的proxy扫一遍吧 点开国内部分进行审查发现,国内proxy和目录为以下url: http://www.xicidaili.com/nn/x 这个x差不多两千多页,那么看来又要线程处理了... 老样子,我们尝试是否能直接以最简单的requests.get(

  • Python一行代码实现快速排序的方法

    今天将单独为大家介绍一下快速排序! 一.算法介绍 排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法.其中"快速排序"(Quicksort)使用得最广泛,速度也较快.它是图灵奖得主C. A. R. Hoare(托尼·霍尔)于1960时提出来的. 二.算法原理 快排的实现方式多种多样,猪哥给大家写一种容易理解的:分治+迭代,只需要三步: 在数列之中,选择一个元素作为"基准"(pivot

  • python提取包含关键字的整行数据方法

    问题描述: 如下图所示,有一个近2000行的数据表,需要把其中含有关键字'颈廓清术,中央组(VI组)'的数据所在行都都给抽取出来,且提取后的表格不能改变原先的顺序. 问题分析: 一开始想用excel的筛选功能,但是发现只提供单列筛选,由于关键词在P,S,V,Y,AB列都有,故需要筛选5次.但是筛选完后再整合再一起的表格顺序就乱了,而原先的表格排序规律不可知,无法通过简单的排序实现.于是决定用Python写个代码来解决这个问题~ python生成的表格是这个样子滴^_^那些空白的行就是不符合要求的

  • python 监控logcat关键字功能

    本文主要介绍使用Python调用ADB命令实现实时监控logcat关键字的功能 采用多进程,可同时监控多个设备,监控多个关键字. 需要配置ADB环境,具体配置就不多介绍,随便搜一下一大把,直接上代码 通过一个全局变量控制开启和关闭监控功能, INSTRUCTION 用于根据指令获取对应的方法名 import os, threading, datetime # 获取当前文件所在目录,拼接出LOG路径 LOG_PATH = os.path.join(os.path.dirname(os.path.a

  • Python扫描端口的实现

    通过python代码对局域网内某IP开启的端口进行扫描 ** 此时发现线程小于等于800时,代码可以正常运行,大于时会出现报错,发现是线程并发数量太多,系统不支持如此多的线程并发. ** ** 所以这里对线程一次并发的次数进行限制,解决了不能start news thread的问题 ** ** 限制了并发的最大数量之后,使用了不到1分钟的时间成功扫描了1-10000内的所有的端口 ** 到此这篇关于Python扫描端口的实现的文章就介绍到这了,更多相关Python扫描端口内容请搜索我们以前的文章

随机推荐