由于RDP远程桌面功能非常方便,但又存在较高风险,只能通过提高安全防护,避免造成损失。
本文记录一种邮件提醒远程登陆的方法和过程。
工作原理:
1.利用windows的计划任务功能,当远程登陆的时候,调用指定的程序;
2.此处调用的是python脚本,利用python来完成发送邮件的功能;
3.在python脚本中调用一个EXE小程序来获取登陆信息(用户名,客户端名称等信息),
写一个EXE小工具,获取远程登陆信息
使用C语言编写,通过win32底层API读取客户端信息;
并把信息打印到标准输出以便后面python读取。
这个方法不能获取到准确的客户端IP地址,这里的IP地址其实是内网地址。
暂时还没有找到如何获取客户端公网IP的办法。
完整的C语言源码如下(只支持Windows Vista及以上系统版本):
#include <stdio.h>
#include <Windows.h>
#include <wtsapi32.h>
#pragma comment(lib, "wtsapi32.lib")
static const char *af_str[]=
"AF_UNSPEC",
"AF_UNIX",
"AF_INET",
"AF_IMPLINK",
"AF_PUP",
"AF_CHAOS",
"AF_IPX",
"AF_NS",
"AF_ISO",
"AF_OSI",
"AF_ECMA",
"AF_DATAKIT",
"AF_CCITT",
"AF_SNA",
"AF_DECnet",
"AF_DLI",
"AF_LAT",
"AF_HYLINK",
"AF_APPLETALK",
"AF_NETBIOS",
"AF_VOICEVIEW",
"AF_FIREFOX",
"AF_UNKNOWN1",
"AF_BAN",
void main(void)
DWORD cbReturned;
PWTSCLIENTA pData;
if(WTSQuerySessionInformationA(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, WTSClientInfo, (LPSTR*)&pData, &cbReturned))
printf("UserName:%s\r\n", pData->UserName);
printf("ClientName:%s\r\n", pData->ClientName);
printf("ClientBuildNumber:%d\r\n", pData->ClientBuildNumber);
printf("ClientAddressFamily:%s\r\n", af_str[pData->ClientAddressFamily]);
printf("ClientAddress(raw):%d.%d.%d.%d\r\n", pData->ClientAddress[0],pData->ClientAddress[1],pData->ClientAddress[2],pData->ClientAddress[3]);
printf("ClientAddress(str):%ls\r\n", pData->ClientAddress);
WTSFreeMemory(pData);
return;
printf("WTSQuerySessionInformationA Failed!\r\n");
printf("Error:%08X\r\n", GetLastError());
//system("pause");
写一个python脚本,调用上面的小工具,并读取输出,然后发送邮件。
发送邮件使用了网易的STMP服务,用自己的邮箱账号给自己的另一个邮箱发。
接收邮件最好用QQ邮箱,QQ邮件手机可以及时接收到邮件。
完整python源码如下:
#!python
#获取RDP登陆信息,并发送邮件
#蒋晓岗<kerndev@foxmail.com>
import io
import os
import time
import smtplib
import email.mime.text
import email.mime.multipart
#指定EXE小工具的路径
RDPINFO_EXEPATH="rdp_info.exe"
#获取当前时间
def get_local_time():
str = time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
return str
#获取登陆信息
def get_login_info():
out = subprocess.check_output(RDPINFO_EXEPATH, timeout=3)
return out.decode("utf8")
#网易SMTP服务
def send_mail(title, text):
print("发送邮件...")
mail_host = "smtp.163.com" #设置服务器
mail_port = 25 #服务器SMTP端口号
mail_user = "123456789012@163.com" #用户名
mail_pass = "1234567890123456" #口令(授权码)
mail_recv = ["123456789@qq.com"] #接收者
mail_subject = title #邮件主题
mail_content = text #邮件正文
msg = email.mime.multipart.MIMEMultipart()
msg["From"] = mail_user
msg["To"] = mail_recv[0]
msg["Subject"] = mail_subject
msg.attach(email.mime.text.MIMEText(mail_content))
smtp_obj = smtplib.SMTP()
print ("正在连接...")
smtp_obj.connect(mail_host, mail_port)
print ("正在登陆...")
smtp_obj.login(mail_user, mail_pass)
print ("正在发送...")
smtp_obj.sendmail(mail_user, mail_recv, msg.as_string())
print ("发送成功.")
return True
except BaseException as e:
print ("发送失败!", e)
return False
#程序入口
time_str = get_local_time()
info_str = get_login_info()
head = "远程登陆提醒"
text = "登陆时间:" + time_str + "\r\n" + "登陆信息:\r\n" + info_str
send_mail(head, text)
在windows计划任务里面添加任务,当远程登陆时调用我们的python脚本。
1.打开“计算机管理”,找到"任务计划程序",点击“创建任务”
2.名称随便写,比如“远程登陆提醒”
3.设置“触发器”,如下图所示,选择“当连接到用户会话时”,“远程计算机的连接”

4.设置“操作”,如下图所示,输入python.exe的路径和脚本的完整路径

5.最后点击“确定”,计划任务就添加好了。
最后测试用不同的客户端进行远程登陆,可以正常收到提醒邮件。
不过有时候手机QQ邮箱提醒会有1-10秒不等的延迟。
由于RDP远程桌面功能非常方便,但又存在较高风险,只能通过提高安全防护,避免造成损失。本文记录一种邮件提醒远程登陆的方法和过程。工作原理:1.利用windows的计划任务功能,当远程登陆的时候,调用指定的程序;2.此处调用的是python脚本,利用python来完成发送邮件的功能;3.在python脚本中调用一个EXE小程序来获取登陆信息(用户名,客户端名称等信息),第一步:写一个EXE小工具,获取远程登陆信息使用C语言编写,通过win32底层API读取客户端信息;并把信息打印到标准输出
本软件基本的使用流程是用户在软件中配置好自己的邮箱后即可通过给该邮箱发命令的方式来监视,控制计算机。具体操作如下:
开启POP3 / SMTP服务
用于接收命令的邮箱需要开启POP3 / SMTP服务,下面以QQ邮箱为例来展示一下大致流程:
登陆QQ邮箱网页版,在正上方找到“设置”选项,点击“帐户”选项卡。
然后,在“帐户”设置中,找到设置项,进行设置,如下:
保存设置,即打开了相应的服务。
之后就可以获取授权密码了,点击“生成授权码”
接下来按要求验证密保手机就行了。
选择端口号
大部分邮箱默认的不加密的端口号如下: POP3:110 SMTP:25
QQ邮箱的加密端口号: POP3:995 SMTP:465或587
163邮箱的加密端口号: POP3:995 SMTP:465或994
其他邮箱具体的端口号请自行搜索。
其他基础配置
插入“启动发送邮件通知”选项后,向我的PC发送电子邮件在会后启动为您的邮箱发送包含计算机名,启动时间,IP地址和位置等信息的邮件,方便您实时掌控您计算机的状态,防止电脑被
bug修改 将mstsc-login-msg.bat文件中 mail.txt 全部改成 d:\mail\mail.txt 绝对路径
远程桌面登录自动发邮件通知 SwithMail支持SSL发送邮件 配置方法中默认SSL
通过windows计划任务 在远程桌面会话登录以后立即
调用mstsc-login-msg.bat 读取时间,当前登录用户和端口连接信息保存到mail.txt
mstsc-login-msg.bat再调用SwithMail.exe发送mail.txt到指定邮箱
var popNotice = function() {
if (Notification.permission == "granted") {
var notification = new Notification("Hi,", {
body: '可以加你为好友吗?',
icon: '/sta
在上一篇文章,亿元程序员为我们整理了时下比较流行的远程控制软件。基于免费和方便使用的原则,我们挑选最最容易使用的Windows远程桌面给大家讲解一下,它的使用方法以及技巧。
Windows远程桌面连接
1.右键我的电脑,选择属性。
2.在打开的设置界面中,找到远程桌面选项,将"启动远程桌面"打开。
3.右键右下角Windows图标,在弹出的菜单中选择"设置"按钮。
4.在弹出的Windows设置中选择“账户”按钮。
5.账户信息左侧选择“登录选项”菜单,然后选择”密码“选项,再点击”添加“按钮,弹出界面
sender = 'sender@example.com' # 发件人邮箱地址
password = 'password' # 发件人邮箱密码
receivers = ['receiver1@example.com', 'receiver2@example.com'] # 收件人邮箱地址
3. 创建邮件内容:
```python
message = MIMEText('邮件内容', 'plain', 'utf-8')
message['From'] = Header('发件人姓名', 'utf-8')
message['To'] = Header('收件人姓名', 'utf-8')
message['Subject'] = Header('邮件主题', 'utf-8')
4. 连接SMTP服务器并发送邮件:
```python
smtpObj = smtplib.SMTP('smtp.example.com') # SMTP服务器地址
smtpObj.login(sender, password)
smtpObj.sendmail(sender, receivers, message.as_string())
print('邮件发送成功')
except smtplib.SMTPException:
print('邮件发送失败')
注意事项:
- 发件人邮箱需要开启SMTP服务;
- 如果收件人有多个,需要将邮箱地址放在一个列表中;
- 如果需要发送HTML格式的邮件内容,可以将'MIMEText'改为'MIMEText',并将'plain'改为'html';
- 在创建邮件内容时,需要设置发件人、收件人、主题等信息;
- 在连接SMTP服务器时,需要填写SMTP服务器地址,并使用发件人邮箱地址和密码进行登录。