遠(yuǎn)程登錄RDP(3389)和Radmin端口(訪問)郵件通知(提醒)小工具

[重要通告]如您遇疑難雜癥,本站支持知識(shí)付費(fèi)業(yè)務(wù),掃右邊二維碼加博主微信,可節(jié)省您寶貴時(shí)間哦!

今天還寫了有網(wǎng)友中了勒索病毒,其實(shí)就是RDP不夠嚴(yán)謹(jǐn)造成的,雖然安全性軟件也很多,但難免依然還會(huì)中;

用frps做內(nèi)網(wǎng)穿透服務(wù)器的多注意-小心中招勒索病毒lockbit2.0

現(xiàn)在有這么一個(gè)軟件,就是登錄遠(yuǎn)程服務(wù)器的時(shí)候就會(huì)自動(dòng)郵件提醒,包括自己登錄;演示效果如下:

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具介紹:

主要實(shí)現(xiàn)的功能是獲取指定端口連接的遠(yuǎn)程 IP 地址,并將其發(fā)送給指定的郵箱,可用于一些遠(yuǎn)程工具的登錄通知,或者其他你需要檢測(cè)的程序。

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具特點(diǎn):

1. 可在配置文件內(nèi)自定義需要檢測(cè)的端口;支持多端口檢測(cè)
2. 白名單功能,可設(shè)置多個(gè)IP排除;
3. 使用zmail模塊發(fā)送郵件更高效方便,不需要手動(dòng)添加服務(wù)器地址、端口以及適合的協(xié)議,zmail會(huì)幫你完成;

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具原理:

1.讀取配置文件 'Mail.ini' 中的配置信息,包括白名單和檢測(cè)端口
2.根據(jù)讀取的端口信息,調(diào)用 get_remote_ips 函數(shù)獲取指定端口的遠(yuǎn)程IP地址列表,并將其存儲(chǔ)在 remote_ips_dict 字典中
3.根據(jù) remote_ips_dict 字典中的數(shù)據(jù)生成郵件正文
4.使用 zmail 庫發(fā)送郵件給指定的收件人地址,郵件包括檢測(cè)時(shí)間、主機(jī)名、用戶名、檢測(cè)到的連接端口以及該端口連接的遠(yuǎn)程IP地址列表,同時(shí)提供查詢IP歸屬地的鏈接。

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具更新:

2023/3/1
添加了兩條錯(cuò)誤日志輸出

2023/2/23
使用python3.10編譯,優(yōu)化了一下代碼,
執(zhí)行過程:
1.使用 ConfigParser() 函數(shù)創(chuàng)建一個(gè) config 實(shí)例,并使用 read() 方法讀取名為 Mail.ini 的配置文件。然后獲取 WL 段中的 add 選項(xiàng)的值并按逗號(hào)分隔成列表,將其保存到 wl_list 變量中。接著遍歷 port 段中的所有選項(xiàng),如果選項(xiàng)的名稱以 net_port 開頭且選項(xiàng)的值是數(shù)字,則將其轉(zhuǎn)換為整數(shù)并調(diào)用 get_remote_ips() 函數(shù)獲取當(dāng)前連接到該端口的所有遠(yuǎn)程IP地址,將其保存到 remote_ips_dict 字典中。

2.定義函數(shù) get_remote_ips(),它接收兩個(gè)參數(shù) port 和 wl_list,并使用 net_connections() 函數(shù)獲取當(dāng)前系統(tǒng)上所有建立連接的信息。然后使用生成器表達(dá)式篩選出所有遠(yuǎn)程IP地址,使得地址不是空值、狀態(tài)為 ESTABLISHED、不是本地回環(huán)地址、不包含冒號(hào),且本地地址的端口號(hào)等于 port 參數(shù)。然后使用列表推導(dǎo)式去重并過濾掉在 wl_list 中出現(xiàn)的地址,最終返回遠(yuǎn)程IP地址列表。

3.定義函數(shù) send_mail(),它接收兩個(gè)參數(shù) remote_ips_dict 和 config。函數(shù)首先獲取當(dāng)前計(jì)算機(jī)的主機(jī)名、用戶名和當(dāng)前時(shí)間,并將其插入到郵件正文中。然后遍歷 remote_ips_dict 字典中的所有端口及其對(duì)應(yīng)的遠(yuǎn)程IP地址,如果有遠(yuǎn)程IP地址則將其插入到郵件正文中,最終將郵件正文和郵件標(biāo)題通過 zmail 模塊發(fā)送到指定的收件人。

4.如果 remote_ips_dict 字典中至少有一個(gè)非空列表,則調(diào)用 send_mail() 函數(shù)將所有遠(yuǎn)程IP地址發(fā)送到指定的收件人。

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具演示:

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具軟件下載地址:

隱藏內(nèi)容,回復(fù)可見“馬上回復(fù)”后“刷新頁面”即可查看隱藏內(nèi)容!
(溫馨提示:發(fā)表評(píng)論請(qǐng)勾選 在此瀏覽器中保存我的顯示名稱、郵箱地址和網(wǎng)站地址,以便下次評(píng)論時(shí)使用。

遠(yuǎn)程登錄服務(wù)器3389郵件通知小工具代碼如下:

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

# 獲取遠(yuǎn)程IP地址
def get_remote_ips(port, wl_list):
# 使用psutil庫中的net_connections函數(shù)獲取所有網(wǎng)絡(luò)連接信息
# 篩選出對(duì)應(yīng)端口、處于已建立狀態(tài)、遠(yuǎn)程地址不是回環(huán)地址和IPv6地址的網(wǎng)絡(luò)連接
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)

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

# 發(fā)送郵件
def send_mail(remote_ips_dict, config):
# 獲取計(jì)算機(jī)名稱、用戶名和當(dāng)前時(shí)間
try:
hostname, username = environ["COMPUTERNAME"], environ["USERNAME"]
time = strftime("%Y-%m-%d %H:%M:%S", localtime())

# 構(gòu)造郵件正文
content = [f'<font size="4">檢測(cè)時(shí)間: {time}<br>主機(jī)名: {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)

# 從配置文件中讀取發(fā)件人地址、密碼和郵件標(biāo)題
from_addr, pwd, title = (
config.get('Mail', key) for key in ('from_addr', 'pwd', 'title')
)
# 從配置文件中讀取收件人地址列表
to_addr = config.get('to_addr', 'add').split(',')
# 使用zmail庫發(fā)送郵件
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] 郵件發(fā)送失?。?{str(e)}\n")

# 從配置文件中讀取白名單和需要檢測(cè)的端口
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")

# 如果有需要發(fā)送的遠(yuǎn)程IP地址,則發(fā)送郵件
if remote_ips_dict.values():
send_mail(remote_ips_dict, config)

666

問題未解決?付費(fèi)解決問題加Q或微信 2589053300 (即Q號(hào)又微信號(hào))右上方掃一掃可加博主微信

所寫所說,是心之所感,思之所悟,行之所得;文當(dāng)無敷衍,落筆求簡(jiǎn)潔。 以所舍,求所獲;有所依,方所成!

支付寶贊助
微信贊助

免責(zé)聲明,若由于商用引起版權(quán)糾紛,一切責(zé)任均由使用者承擔(dān)。

您必須遵守我們的協(xié)議,如您下載該資源,行為將被視為對(duì)《免責(zé)聲明》全部?jī)?nèi)容的認(rèn)可->聯(lián)系老梁投訴資源
LaoLiang.Net部分資源來自互聯(lián)網(wǎng)收集,僅供用于學(xué)習(xí)和交流,請(qǐng)勿用于商業(yè)用途。如有侵權(quán)、不妥之處,請(qǐng)聯(lián)系站長(zhǎng)并出示版權(quán)證明以便刪除。 敬請(qǐng)諒解! 侵權(quán)刪帖/違法舉報(bào)/投稿等事物聯(lián)系郵箱:service@laoliang.net
意在交流學(xué)習(xí),歡迎贊賞評(píng)論,如有謬誤,請(qǐng)聯(lián)系指正;轉(zhuǎn)載請(qǐng)注明出處: » 遠(yuǎn)程登錄RDP(3389)和Radmin端口(訪問)郵件通知(提醒)小工具

1 評(píng)論

發(fā)表回復(fù)

本站承接,網(wǎng)站推廣(SEM,SEO);軟件安裝與調(diào)試;服務(wù)器或網(wǎng)絡(luò)推薦及配置;APP開發(fā)與維護(hù);網(wǎng)站開發(fā)修改及維護(hù); 各財(cái)務(wù)軟件安裝調(diào)試及注冊(cè)服務(wù)(金蝶,用友,管家婆,速達(dá),星宇等);同時(shí)也有客戶管理系統(tǒng),人力資源,超市POS,醫(yī)藥管理等;

立即查看 了解詳情