Python 端口访问邮件提醒工具
Python 端口访问邮件提醒工具
1.简介:
该脚本主要实现的功能是获取指定端口连接的远程 IP 地址,并将其发送给指定的邮箱,可用于一些远程工具的登录通知,或者其他你需要检测的程序。
特点:
- 可在配置文件内自定义需要检测的端口,支持多个端口;
- 白名单功能,可设置多个IP排除;
- 使用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)