本帖最后由 1073 于 2023-2-20 17:30 编辑
工具介绍:
主要实现的功能是获取指定端口连接的远程 IP 地址,并将其发送给指定的邮箱,可用于一些远程工具的登录通知,或者其他你需要检测的程序。
特点:
1. 可在配置文件内自定义需要检测的端口;支持多端口检测
2. 白名单功能,可设置多个IP排除;
3. 使用zmail模块发送邮件更高效方便,不需要手动添加服务器地址、端口以及适合的协议,zmail会帮你完成;
2023/2/20日更新:
有朋友希望能检测多个端口,便做了一下修改支持多端口。
下载地址在楼下
>>>传送门<<<
--------------------------------------------------------------------------------
多端口提示效果:
配置文件:
-------------------------------以下为原帖---------------------------------
邮件提示效果:
RDP登录设置演示:
Radmin登录设置演示:
设置配置:
单个端口版本下载地址:https://1073.lanzouo.com/iyFe40nvuhah 提取码2023
文件信息:
python源码:
[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)
|