原来一直用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 端口监控相关推荐

  1. python 监控linux硬盘,Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例...

    由于项目的需要,需要做一个简单监控服务器的CPU利用率.CPU负载.硬盘使用率.内存利用率和服务器的各个端口的开启情况的程序,并把结果通知到监控平台,如果出现异常,监控平台打电话或者发短信通知给具体的 ...

  2. python运维监控脚本_Python实现数通设备端口使用情况监控实例

    本文实例讲述了Python实现数通设备端口使用情况监控的方法.分享给大家供大家参考.具体如下: 最近因工作需要,上面要求,每天需上报运维的几百数通设备端口使用情况[],虽然有现成网管监控工具监控设备状 ...

  3. zabbix的日常监控-自动发现端口并监测(服务器开启的所有端口或监控指定端口)(十三)...

    动批量检查agent开放的端口 注:此方法给监控磁盘IO(即十二)篇过程一样: 注释:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控:  如果服务器会随机出现端口且每次启动程 ...

  4. 监控记录交换机端口流量及性能,MSRM3一分钟搞定

    要监控记录交换机端口流量情况,以及记录交换机性能.如设备CPU.内存使用率.设备温度等,我推荐大家试试 MSRM3. MSRM3适用于Windows系统,绿色软件,直接运行.更有网友评价是:方便.卫生 ...

  5. 视频监控录像机默认端口 34567 修改为37420

    视频监控录像机默认端口 34567 修改为37420 http:// cms 转载于:https://www.cnblogs.com/crave/p/11058104.html

  6. blackbox_exporter端口及网络监控

    一.背景概述 Blackbox(黑盒)监控指的是指检测外部暴露出来的,能够被用户所看到.观察到的较表面的数据,比如WEB响应.网络是否通畅.端口连通性等指标,黑盒监控不会深入到程序或系统内部中去,能够 ...

  7. prometheus jmx-exporter 暴漏HTTP服务端口无法获取监控数据

    1. 问题描述   通过 -javaagent 方式挂载的 jmx_prometheus_javaagent-0.15.0.jar 代理包对接prometheus监控,通过暴露的HTTP服务端口无法获 ...

  8. Prometheus配置监控ip、端口连通,get、post接口连通和状态码

    Prometheus配置监控ip.端口连通,get.post接口连通和状态码 ##方法:blackbox_exporter 部署在一台主机上集中配置 第一部分 1.1下载blackbox_export ...

  9. 自定义get方法模板_Zabbix4.0 实现对服务器端口的自定义监控

    介绍 服务器上跑了很多应用,和一些api接口,现在需要把他们全部监控起来,下面介绍通过zabbix对服务器上端口的监控,实现端口挂掉之后,通过zabbix报警通知到运维人员 准备 先准备两台服务器,已 ...

最新文章

  1. ibatis主键自动生成
  2. 企业级java b2bc商城系统开源源码二次开发(二十一)springboot集成JMS
  3. Consul入门03 - 注册服务
  4. P1131 [ZJOI2007]时态同步
  5. 眼见为实:.NET类库中的DateTimeOffset用途何在
  6. JAVA与SAP数据交互的方式总结
  7. [转载]Hamachi 安装过程
  8. JAVA开发必须掌握的21个核心技术
  9. 图像融合(三)-- 拉普拉斯金字塔
  10. C# 插件构架实战(Jack H Hansen )
  11. 新概念系列之《Part 1 Lesson 137 A pleasant dream》
  12. git log根据特定条件查询日志并统计修改的代码行数
  13. 软件工程——需求分析
  14. FreeSWITCH折腾笔记9——使用FS做一个i-SBC
  15. 国际音标 英式音标 美式音标
  16. Scala学习笔记(1)-基本类型归纳
  17. Android Studio代码统计插件Statistic
  18. Photoshop CC 2017安装
  19. uniapp 微信小程序配置全局主题色、实现动态修改主题色
  20. 实现打印日历的一种方式(-,-)

热门文章

  1. Android开发之旅:应用程序基础及组件
  2. C#和Java详细描述
  3. 安装 Go 第三方包 go-sqlite3
  4. CSS的display:table-cell:多行文字的垂直居中水平居中
  5. PHP返回数据json数据样式要求是对象{},而不是[]
  6. Laravel表单提交419页面过期
  7. PHP算法导出Excel实现字段联动
  8. oracle10g自带的公共同义词,10g ALL_SYNONYMS同义词查询性能下降
  9. 数据结构实验之图论九:最小生成树_每天5分钟用C#学习数据结构(25)图 Part 6
  10. 获得邮件列表失败_新手在批发交易中会失败的5个领域