远程登录RDP(3389)和Radmin端口(访问)邮件通知(提醒)小工具

[重要通告]如您遇疑难杂症,本站支持知识付费业务,扫右边二维码加博主微信,可节省您宝贵时间哦!

今天还写了有网友中了勒索病毒,其实就是RDP不够严谨造成的,虽然安全性软件也很多,但难免依然还会中;

用frps做内网穿透服务器的多注意-小心中招勒索病毒lockbit2.0

现在有这么一个软件,就是登录远程服务器的时候就会自动邮件提醒,包括自己登录;演示效果如下:

远程登录服务器3389邮件通知小工具介绍:

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

远程登录服务器3389邮件通知小工具特点:

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

远程登录服务器3389邮件通知小工具原理:

1.读取配置文件 'Mail.ini' 中的配置信息,包括白名单和检测端口
2.根据读取的端口信息,调用 get_remote_ips 函数获取指定端口的远程IP地址列表,并将其存储在 remote_ips_dict 字典中
3.根据 remote_ips_dict 字典中的数据生成邮件正文
4.使用 zmail 库发送邮件给指定的收件人地址,邮件包括检测时间、主机名、用户名、检测到的连接端口以及该端口连接的远程IP地址列表,同时提供查询IP归属地的链接。

远程登录服务器3389邮件通知小工具更新:

2023/3/1
添加了两条错误日志输出

2023/2/23
使用python3.10编译,优化了一下代码,
执行过程:
1.使用 ConfigParser() 函数创建一个 config 实例,并使用 read() 方法读取名为 Mail.ini 的配置文件。然后获取 WL 段中的 add 选项的值并按逗号分隔成列表,将其保存到 wl_list 变量中。接着遍历 port 段中的所有选项,如果选项的名称以 net_port 开头且选项的值是数字,则将其转换为整数并调用 get_remote_ips() 函数获取当前连接到该端口的所有远程IP地址,将其保存到 remote_ips_dict 字典中。

2.定义函数 get_remote_ips(),它接收两个参数 port 和 wl_list,并使用 net_connections() 函数获取当前系统上所有建立连接的信息。然后使用生成器表达式筛选出所有远程IP地址,使得地址不是空值、状态为 ESTABLISHED、不是本地回环地址、不包含冒号,且本地地址的端口号等于 port 参数。然后使用列表推导式去重并过滤掉在 wl_list 中出现的地址,最终返回远程IP地址列表。

3.定义函数 send_mail(),它接收两个参数 remote_ips_dict 和 config。函数首先获取当前计算机的主机名、用户名和当前时间,并将其插入到邮件正文中。然后遍历 remote_ips_dict 字典中的所有端口及其对应的远程IP地址,如果有远程IP地址则将其插入到邮件正文中,最终将邮件正文和邮件标题通过 zmail 模块发送到指定的收件人。

4.如果 remote_ips_dict 字典中至少有一个非空列表,则调用 send_mail() 函数将所有远程IP地址发送到指定的收件人。

远程登录服务器3389邮件通知小工具演示:

远程登录服务器3389邮件通知小工具软件下载地址:

隐藏内容,回复可见“马上回复”后“刷新页面”即可查看隐藏内容!
(温馨提示:发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。

远程登录服务器3389邮件通知小工具代码如下:

from configparser import ConfigParser
from time import strftime, localtime
from psutil import net_connections
from os import environ
import zmail

# 获取远程IP地址
def get_remote_ips(port, wl_list):
# 使用psutil库中的net_connections函数获取所有网络连接信息
# 筛选出对应端口、处于已建立状态、远程地址不是回环地址和IPv6地址的网络连接
remote_ips = (conn.raddr[0] for conn in 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)

# 返回远程IP地址列表中不在白名单中的地址
return [ip for ip in set(remote_ips)
if not any(ip.startswith(wl) for wl in wl_list if wl.strip())] or []

# 发送邮件
def send_mail(remote_ips_dict, config):
# 获取计算机名称、用户名和当前时间
try:
hostname, username = environ["COMPUTERNAME"], environ["USERNAME"]
time = strftime("%Y-%m-%d %H:%M:%S", localtime())

# 构造邮件正文
content = [f'<font size="4">检测时间: {time}<br>主机名: {hostname}<br>用户名: {username}<br></font><br>']
for port, remote_ips in remote_ips_dict.items():
if remote_ips:
content.append(
f'连接端口<font color="#0000ff"><b>"{port}"</b></font>的IP地址:<br>'
f'<b><font color="#ff0000" size="5">{"<br>".join(remote_ips)}</font></b><br>'
f'<a <br>".join(remote_ips)}'
f'">查询IP归属地</a><br>====================<br><br>')
content = "".join(content)

# 从配置文件中读取发件人地址、密码和邮件标题
from_addr, pwd, title = (
config.get('Mail', key) for key in ('from_addr', 'pwd', 'title')
)
# 从配置文件中读取收件人地址列表
to_addr = config.get('to_addr', 'add').split(',')
# 使用zmail库发送邮件
zmail.server(from_addr, pwd).send_mail(to_addr, {'subject': title, 'content_html': content})
except Exception as e:
with open("Mail.log", "a", encoding="utf-8") as f:
f.write(f"[{strftime('%Y-%m-%d %H:%M:%S', localtime())}] [ERROR] 邮件发送失败: {str(e)}\n")

# 从配置文件中读取白名单和需要检测的端口
config = ConfigParser()
config.read('Mail.ini', encoding='utf-8')
wl_list = config.get('WL', 'add').split(',')
remote_ips_dict = {}
for port_key, port in config.items('port'):
if port_key.startswith('net_port') and (port := port.strip()).isdigit():
remote_ips = get_remote_ips(int(port), wl_list)
if remote_ips:
remote_ips_dict[int(port)] = remote_ips
else:
with open('Mail.log', 'w', encoding="utf-8") as f:
f.write(f"[{strftime('%Y-%m-%d %H:%M:%S', localtime())}] "
f"[INFO] 端口{port}外部IP不存在或与白名单匹配,程序退出。\n")

# 如果有需要发送的远程IP地址,则发送邮件
if remote_ips_dict.values():
send_mail(remote_ips_dict, config)

666

问题未解决?付费解决问题加Q或微信 2589053300 (即Q号又微信号)右上方扫一扫可加博主微信

所写所说,是心之所感,思之所悟,行之所得;文当无敷衍,落笔求简洁。 以所舍,求所获;有所依,方所成!

支付宝赞助
微信赞助

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如您下载该资源,行为将被视为对《免责声明》全部内容的认可->联系老梁投诉资源
LaoLiang.Net部分资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:service@laoliang.net
意在交流学习,欢迎赞赏评论,如有谬误,请联系指正;转载请注明出处: » 远程登录RDP(3389)和Radmin端口(访问)邮件通知(提醒)小工具

1 评论

发表回复

本站承接,网站推广(SEM,SEO);软件安装与调试;服务器或网络推荐及配置;APP开发与维护;网站开发修改及维护; 各财务软件安装调试及注册服务(金蝶,用友,管家婆,速达,星宇等);同时也有客户管理系统,人力资源,超市POS,医药管理等;

立即查看 了解详情