Python 端口访问邮件提醒工具

news/2024/12/28 22:54:38/

Python 端口访问邮件提醒工具

1.简介:

该脚本主要实现的功能是获取指定端口连接的远程 IP 地址,并将其发送给指定的邮箱,可用于一些远程工具的登录通知,或者其他你需要检测的程序。

特点:

  1. 可在配置文件内自定义需要检测的端口,支持多个端口;
  2. 白名单功能,可设置多个IP排除;
  3. 使用zmail模块发送邮件更高效方便,不需要手动添加服务器地址、端口以及适合的协议,zmail会帮你完成;

2.运行效果:

在这里插入图片描述
请添加图片描述

3.相关源码:

python">
```python
import psutil
import getpass
import time
import zmail
import configparser
import socketdef get_remote_ips(port, wl_list):remote_ips = [conn.raddr[0] for conn in psutil.net_connections()if conn.raddr and conn.status == 'ESTABLISHED'and not conn.raddr[0].startswith('127.')and ':' not in conn.raddr[0]and conn.laddr[1] == port]remote_ips = list(set(remote_ips))if not remote_ips or any(ip.startswith(wl) for ip in remote_ips for wl in wl_list if wl):return []return remote_ipsdef send_mail(remote_ips, config):aa1, aa2 = socket.gethostname(), getpass.getuser()aa3 = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())ip_list = [ip + '\n' for ip in remote_ips]content = ('<font size="4">检测时间: {}<br>'.format(aa3)+ '主机名: {}<br>'.format(aa1)+ '用户名: {}<br>'.format(aa2)+ '连接端口 "{}" 的IP地址:<br></font>'.format(port)+ '<b><font color="#ff0000" size="5">{}</font></b><br>'.format('<br>'.join(ip_list))+ '<a >查询IP归属地</a>'.format('<br>'.join(ip_list)))from_addr, pwd = config.get('Mail', 'from_addr'), config.get('Mail', 'pwd')title = config.get('Mail', 'title')to_addr = config.get('to_addr', 'add').split(',')server = zmail.server(from_addr, pwd)server.send_mail(to_addr, {'subject': title, 'content_html': content})config = configparser.ConfigParser()
config.read('Mail.ini', encoding="utf-8-sig")
wl_list = config.get('WL', 'add').split(',')
port = int(config.get("port", "net_port"))remote_ips = get_remote_ips(port, wl_list)
if remote_ips:send_mail(remote_ips, config)


http://www.ppmy.cn/news/1558910.html

相关文章

基于Sentinel的服务保护方案的三种方式(请求限流、线程隔离、服务熔断)超详细讲解

目录 1、三种方式介绍 1.1请求限流 1.2 线程隔离方案 1.3 服务熔断 2、基于sentinel实现 2.1 启动sentinel 2.2 基于springboot整合sentinel 2.2.1请求限流 2.2.2请求隔离 2.2.2.1 OpenFeign整合Sentinel 2.2.3 服务熔断 2.2.3.1 编写降级代码 2.2.3.2 服务熔断 1、…

嵌入式学习-QT-Day06

嵌入式学习-QT-Day06 六、多窗口编程 1、QMessageBox 消息对话框 2、QWidget类 3、parent参数 4、堆栈窗口&#xff08;QStackedWidget&#xff09; 5、新建自定义窗口类 6、对象传值 6.1 父对象 → 子对象 6.2 子对象 → 父对象 7、事件机制 8、QMainWindow主窗口类 8.1 QMenu…

机器学习之scikit-learn(简称 sklearn)

scikit-learn&#xff08;简称 sklearn&#xff09;是 Python 生态中一个非常流行且强大的机器学习库&#xff0c;支持各种机器学习算法和工具。 核心模块和功能 监督学习 (Supervised Learning)&#xff1a; 分类 (Classification): 支持的算法&#xff1a;KNN、SVM、决策树、…

Scala_【2】变量和数据类型

第二章 注释标识符的命名规范命名规则关键字 变量字符串输出数据类型关系变量和数据类型整数类型&#xff08;Byte、Short、Int、Long&#xff09;浮点类型&#xff08;Float、Double&#xff09;字符类型&#xff08;Char&#xff09;布尔类型&#xff08;Boolean&#xff09;…

leetcode hot 100 二叉搜索

35. 搜索插入位置 已解答 简单 相关标签 相关企业 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solut…

Hadoop中MapReduce过程中Shuffle过程实现自定义排序

文章目录 Hadoop中MapReduce过程中Shuffle过程实现自定义排序一、引言二、实现WritableComparable接口1、自定义Key类 三、使用Job.setSortComparatorClass方法2、设置自定义排序器3、自定义排序器类 四、使用示例五、总结 Hadoop中MapReduce过程中Shuffle过程实现自定义排序 一…

CASA模型相关遥感数据及MODIS NDVI、FPAR遥感产品数据时序重建

植被作为陆地生态系统的重要组成部分对于生态环境功能的维持具有关键作用。植被净初级生产力&#xff08;Net Primary Productivity, NPP&#xff09;是指单位面积上绿色植被在单位时间内由光合作用生产的有机质总量扣除自养呼吸的剩余部分。植被NPP是表征陆地生态系统功能及可…

uniapp实现APP、小程序与webview页面间通讯

需求&#xff1a; 1、需要在Uniapp开发的APP或小程序页面嵌入一个H5网页&#xff0c;需要拿到H5给APP传递的数据。 2、并且这个H5是使用vuevant开发的。&#xff08;其实跟使用uniapp开发H5一样&#xff09; 实现步骤&#xff1a; 1、首先需要兼容多端和App端&#xff0c;因…