本篇文章为大家展示了使用python怎么通过邮件控制远程电脑,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
python的数据类型:1. 数字类型,包括int(整型)、long(长整型)和float(浮点型)。2.字符串,分别是str类型和unicode类型。3.布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和False(假)。4.列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5. 元组,元组用”()”标识,内部元素用逗号隔开。6. 字典,字典是一种键值对的集合。7. 集合,集合是一个无序的、不重复的数据组合。
主要是python的一些用于收发邮件的库
import smtplib
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
import poplib
import pyautogui
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
import os
0x02 具体实现
首先,实现邮件的读取功能。读取最新的一封邮件内容,这条内容中包含我们要做的事情,比如查询ip地址、获取屏幕截图等。
在获取内容之前,先将邮箱的登录等做好初始化
def email_init():
email = 'xxxxx@qq.com' #登录的邮箱账号
password = 'xxxxx' # 注意这里不是邮箱密码 是要登录的邮箱的授权码
pop3_server = 'pop.qq.com'
# 连接到POP3服务器:
server = poplib.POP3_SSL(pop3_server, 995)
server.set_debuglevel(0)
server.user(email)
server.pass_(password)
resp, mails, octets = server.list()
index = len(mails)
resp, lines, octets = server.retr(index) # 这里index代表读取最后一封邮件 也就是第一封
msg_content = b'\r\n'.join(lines).decode('utf-8')
msg = Parser().parsestr(msg_content)
return msg, server
要注意密码不是邮箱的密码,是授权码,具体获取方式可以百度。
随后就可以将进行邮件的读取了。
def print_info(msg, indent=0):
if indent == 0:
for header in ['From', 'To', 'Subject']:
value = msg.get(header, '')
if value:
if header == 'Subject':
value = decode_str(value)
else:
hdr, addr = parseaddr(value)
name = decode_str(hdr)
value = u'%s <%s>' % (name, addr)
print('%s%s: %s' % (' ' * indent, header, value))
if msg.is_multipart():
parts = msg.get_payload()
for n, part in enumerate(parts):
print('%spart %s' % (' ' * indent, n))
print('%s--------------------' % (' ' * indent))
return print_info(part, indent + 1)
else:
content_type = msg.get_content_type()
if content_type=='text/plain' or content_type=='text/html':
content = msg.get_payload(decode=True)
charset = guess_charset(msg)
if charset:
content = content.decode(charset)
print('%sText: %s' % (' ' * indent, content))
return content
else:
print('%sAttachment: %s' % (' ' * indent, content_type))
将上一步得到的msg参数传入到读取函数中,通过递归调用查询邮件内容并解码。其中涉及到递归调用中的输出问题,我再上一篇文章中有提到:https://www.jb51.net/article/182761.htm
另外,涉及的解析函数decode_str()如下
def decode_str(s):
value, charset = decode_header(s)[0]
if charset:
value = value.decode(charset)
return value
在邮件中读取相关命令后,就是对命令执行,然后在通过邮件的形式反馈命令结果了。
这里以返回屏幕截图以及执行dos命令为例
def send_result(kind, result):
# 第三方 SMTP 服务
mail_host = "smtp.163.com"
mail_user = "@163.com" #发送信息的邮箱 这里我是用的163邮箱
mail_pass = "xxxxxxx" # 邮箱的授权码
sender = 'xxxxxx@163.com' #发送方地址
receivers = ['xxxxx@qq.com'] #收件地址
if kind == 1: # 第一方式 反馈屏幕截图
print('Sending screenshot.')
# 创建一个带附件的实例
message = MIMEMultipart()
message['From'] = '<hacker_center@163.com>'
message['To'] = '<niu5512@qq.com>'
subject = 'Hacker Center reply'
message['Subject'] = Header(subject, 'utf-8')
# 邮件正文内容
message.attach(MIMEText('Hacker Server replay', 'plain', 'utf-8'))
if os.path.exists("./screenshot.jpg"):
# 构造附件1,传送当前目录下的 test.txt 文件
att1 = MIMEText(open('./screenshot.jpg', 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
# 这里的filename可以任意写,写什么名字,邮件中显示什么名字
att1["Content-Disposition"] = 'attachment; filename="screenshot.jpg"'
message.attach(att1)
try:
smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
smtpObj.login(mail_user, mail_pass) # 登录验证
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print("mail has been send successfully.")
except smtplib.SMTPException as e:
print(e)
if kind == 2: #第二种方式 返回dos命令结果
message = MIMEText(result, 'plain', 'utf-8')
message['From'] = '<hacker_center@163.com>'
message['To'] = '<niu5512@qq.com>'
subject = 'Hacker Center reply'
message['Subject'] = Header(subject, 'utf-8')
smtpObj = smtplib.SMTP_SSL(mail_host, 465)
smtpObj.login(mail_user, mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print("mail has been send successfully.")
其中执行dos命令的函数如下:
def manage_cmd(cmd):
print('The command is:%s' % cmd)
kind = 0
result = 'Nothing happen.'
if 'screenshot' in cmd:
img = pyautogui.screenshot()
img.save('./screenshot.jpg')
kind = 1
if 'dos cmd' in cmd:
dos_result = ''
index = cmd.find(':')
cmd = cmd[index+1:]
if os.system(cmd):
result = 'command err.'
else:
info = os.popen(cmd)
for line in info:
dos_result = dos_result + line
kind = 3
if dos_result != '':
result = dos_result
return kind, result
上述内容就是使用python怎么通过邮件控制远程电脑,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。