python监控端口_python3 端口监控
原来一直用shell结合nmap做端口监控,最近刚好有时间改用python重写。
监控效果:
mysql数据库用于读取IP地址,输出IP详细信息,记录故障时间,send记录是否发生变量。
# -*- coding: utf-8 -*-
# @Time : 2020-4-10 22:13
# @Author : yejunhai
# @Site :
# @File : port_monitor.py
# @Software: PyCharm
import pymysql
import socket
import sys
import time
import requests
import json
def msg(text) :
#发送到企业微信机器人
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "" # 这个是企业微信机器人生成的webhook地址,修改为你的即可。
json_text = {
"msgtype" : "text",
"text" : {
"content" : text
},
}
requests.post(api_url, json.dumps(json_text), headers=headers).content
def port_check(ip,port):
#检查socket返回值
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.settimeout(2)
result=s.connect_ex((ip,int(port)))
return result
def out_log(text):
#运行写日志。。。。。。。
with open(f'{sys.argv[0].split(".")[0]}.log','a') as f:
print(text,file=f)
def down_time(ip):
#计算故障时间,mysql自带也可以计算,不会- -!
cursor.execute(f"SELECT mzt.start_time,mzt.end_time FROM mzt WHERE mzt.ip = '{ip}'")
total_time = cursor.fetchone()
try:
start_time = total_time[0]
end_time =total_time[1]
duration = end_time-start_time
return f"\n本次故障开始时间 {start_time}\n本次故障结束时间 {end_time}\n本次故障持续时间 {duration}"
except:
return "\n故障开始时间未记录"
#时间格式
cur_time=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
# 打开数据库连接
db = pymysql.connect("127.0.0.1",user = "root",passwd = "root",db = "zwy")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT mzt.ip,mzt.port1,mzt.port2,mzt.send,mzt.`部署业务` FROM mzt "
# try:
cursor.execute(sql)
results = cursor.fetchall()
#获取到IP和端口开始搞事
for row in results:
ip=row[0]
port1=row[1]
port2=row[2]
send=row[3]
description=row[4]
#检查多个端口
for port in port1,port2:
if port != '' and port != None:
port_status=port_check(ip,port)
if port_status != 0 and send == 0:
cursor.execute(f"UPDATE mzt SET send = '1' WHERE mzt.ip = '{ip}'") #发生告警后更新防止一直告警
cursor.execute(f"UPDATE mzt SET start_time = '{cur_time}' WHERE mzt.ip = '{ip}'") #记录故障时间
db.commit()
msg(f"{cur_time} {description} {ip}:{port} 端口关闭,请检查!") #发送告警
out_log(f"{cur_time} {ip}:{port} check {port_status} send: {send}") #写入日志
elif port_status == 0 and send == 1:
cursor.execute(f"UPDATE mzt SET send = '0' WHERE mzt.ip = '{ip}'")
cursor.execute(f"UPDATE mzt SET end_time = '{cur_time}' WHERE mzt.ip = '{ip}'")
db.commit()
msg(f"{cur_time} {description} {ip}:{port} 端口恢复.{down_time(ip)}")
out_log(f"{cur_time} {ip}:{port} check {port_status} send: {send}")
else:
out_log(f"{cur_time} {ip}:{port} check {port_status} send: {send}")
# except:
# print("Error: unable to fetch data")
#关闭数据库
db.close()
#老传统crontab定时的跑就完事了
*/1 * * * * /usr/bin/python3 /root/port_monitor.py
python监控端口_python3 端口监控相关推荐
- python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...
由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...
- python运维监控脚本_Python实现数通设备端口使用情况监控实例
本文实例讲述了Python实现数通设备端口使用情况监控的方法.分享给大家供大家参考.具体如下: 最近因工作需要,上面要求,每天需上报运维的几百数通设备端口使用情况[],虽然有现成网管监控工具监控设备状 ...
- zabbix的日常监控-自动发现端口并监测(服务器开启的所有端口或监控指定端口)(十三)...
动批量检查agent开放的端口 注:此方法给监控磁盘IO(即十二)篇过程一样: 注释:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控: 如果服务器会随机出现端口且每次启动程 ...
- 监控记录交换机端口流量及性能,MSRM3一分钟搞定
要监控记录交换机端口流量情况,以及记录交换机性能.如设备CPU.内存使用率.设备温度等,我推荐大家试试 MSRM3. MSRM3适用于Windows系统,绿色软件,直接运行.更有网友评价是:方便.卫生 ...
- 视频监控录像机默认端口 34567 修改为37420
视频监控录像机默认端口 34567 修改为37420 http:// cms 转载于:https://www.cnblogs.com/crave/p/11058104.html
- blackbox_exporter端口及网络监控
一.背景概述 Blackbox(黑盒)监控指的是指检测外部暴露出来的,能够被用户所看到.观察到的较表面的数据,比如WEB响应.网络是否通畅.端口连通性等指标,黑盒监控不会深入到程序或系统内部中去,能够 ...
- prometheus jmx-exporter 暴漏HTTP服务端口无法获取监控数据
1. 问题描述 通过 -javaagent 方式挂载的 jmx_prometheus_javaagent-0.15.0.jar 代理包对接prometheus监控,通过暴露的HTTP服务端口无法获 ...
- Prometheus配置监控ip、端口连通,get、post接口连通和状态码
Prometheus配置监控ip.端口连通,get.post接口连通和状态码 ##方法:blackbox_exporter 部署在一台主机上集中配置 第一部分 1.1下载blackbox_export ...
- 自定义get方法模板_Zabbix4.0 实现对服务器端口的自定义监控
介绍 服务器上跑了很多应用,和一些api接口,现在需要把他们全部监控起来,下面介绍通过zabbix对服务器上端口的监控,实现端口挂掉之后,通过zabbix报警通知到运维人员 准备 先准备两台服务器,已 ...
最新文章
- ibatis主键自动生成
- 企业级java b2bc商城系统开源源码二次开发(二十一)springboot集成JMS
- Consul入门03 - 注册服务
- P1131 [ZJOI2007]时态同步
- 眼见为实:.NET类库中的DateTimeOffset用途何在
- JAVA与SAP数据交互的方式总结
- [转载]Hamachi 安装过程
- JAVA开发必须掌握的21个核心技术
- 图像融合(三)-- 拉普拉斯金字塔
- C# 插件构架实战(Jack H Hansen )
- 新概念系列之《Part 1 Lesson 137 A pleasant dream》
- git log根据特定条件查询日志并统计修改的代码行数
- 软件工程——需求分析
- FreeSWITCH折腾笔记9——使用FS做一个i-SBC
- 国际音标 英式音标 美式音标
- Scala学习笔记(1)-基本类型归纳
- Android Studio代码统计插件Statistic
- Photoshop CC 2017安装
- uniapp 微信小程序配置全局主题色、实现动态修改主题色
- 实现打印日历的一种方式(-,-)
热门文章
- Android开发之旅:应用程序基础及组件
- C#和Java详细描述
- 安装 Go 第三方包 go-sqlite3
- CSS的display:table-cell:多行文字的垂直居中水平居中
- PHP返回数据json数据样式要求是对象{},而不是[]
- Laravel表单提交419页面过期
- PHP算法导出Excel实现字段联动
- oracle10g自带的公共同义词,10g ALL_SYNONYMS同义词查询性能下降
- 数据结构实验之图论九:最小生成树_每天5分钟用C#学习数据结构(25)图 Part 6
- 获得邮件列表失败_新手在批发交易中会失败的5个领域