当前位置: 首页 > article >正文

Python 端口访问邮件提醒工具

Python 端口访问邮件提醒工具

1.简介:

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

特点:

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

2.运行效果:

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

3.相关源码:


```python
import psutil
import getpass
import time
import zmail
import configparser
import socket
 
 
def 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_ips
 
 
def 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.kler.cn/a/453607.html

相关文章:

  • 详细对比JS中XMLHttpRequest和fetch的使用
  • 菜鸟带新鸟——基于EPlan2022的部件库制作(3D)
  • ElementPlus 自定义封装 el-date-picker 的快捷功能
  • 使用Grafana中按钮插件实现收发HTTP请求
  • 基于STM32单片机矿井矿工作业安全监测设计
  • 条款14 如果函数不抛出异常请使用noexcept
  • AndroidKMP跨平台开发基础1-编译发布
  • AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode和 桔子数据 的 价格对比
  • 解决 Node.js 单线程限制的有效方法
  • ssh免密登录服务器
  • C# Winfrom chart图 实例练习
  • 「Mysql优化大师一」mysql服务性能剖析工具
  • 大模型推理性能优化之KV Cache解读
  • Qt使用QZipWriter和QZipReader来解压、压缩文件
  • MySql B树 B+树
  • 8.zynq编译应用程序
  • 【windows】组合的 Windows 系统调用表
  • 视频会议是如何实现屏幕标注功能的?
  • 美畅物联丨如何在视频汇聚平台上添加RTMP主动推流设备?
  • 三维场景重建与3D高斯点渲染技术探讨
  • Spring Boot项目开发常见问题及解决方案(上)
  • 阿里推出QVQ 视觉推理模型,解锁视觉智能新维度
  • day17-18-进程管理和系统资源管理
  • GPT-O3:简单介绍
  • 【Ubuntu学习】另一个程序已锁定文件的一部分,进程无法访问
  • 从零开始C++棋牌游戏开发之第三篇:游戏的界面布局设计