python 通过邮件控制实现远程控制电脑操作
0x00思路
之前在博客上看到了使用python通过微信的接口,与微信交互的方式来控制电脑的摄像头、开关机等。但是这种方式需要首先在python上登录自己的微信才可以,同时微信端也会有已经在网页端登录的字样,很显眼。因此想到了另外一种交互方式,通过邮件进行交互。
通过邮件的方式不要求用户实时在线,只需要程序隔一段时间扫描一下邮箱的新邮件即可。这种交互方式更为方便。其次,这种方式也更为隐蔽,不会干扰微信的使用。
0x01需要用到的库
主要是python的一些用于收发邮件的库
importsmtplib fromemail.parserimportParser fromemail.headerimportdecode_header fromemail.utilsimportparseaddr importpoplib importpyautogui fromemail.mime.textimportMIMEText fromemail.mime.multipartimportMIMEMultipart fromemail.headerimportHeader importos
0x02具体实现
首先,实现邮件的读取功能。读取最新的一封邮件内容,这条内容中包含我们要做的事情,比如查询ip地址、获取屏幕截图等。
在获取内容之前,先将邮箱的登录等做好初始化
defemail_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) returnmsg,server
要注意密码不是邮箱的密码,是授权码,具体获取方式可以百度。
随后就可以将进行邮件的读取了。
defprint_info(msg,indent=0): ifindent==0: forheaderin['From','To','Subject']: value=msg.get(header,'') ifvalue: ifheader=='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)) ifmsg.is_multipart(): parts=msg.get_payload() forn,partinenumerate(parts): print('%spart%s'%(''*indent,n)) print('%s--------------------'%(''*indent)) returnprint_info(part,indent+1) else: content_type=msg.get_content_type() ifcontent_type=='text/plain'orcontent_type=='text/html': content=msg.get_payload(decode=True) charset=guess_charset(msg) ifcharset: content=content.decode(charset) print('%sText:%s'%(''*indent,content)) returncontent else: print('%sAttachment:%s'%(''*indent,content_type))
将上一步得到的msg参数传入到读取函数中,通过递归调用查询邮件内容并解码。其中涉及到递归调用中的输出问题,我再上一篇文章中有提到:https://www.nhooo.com/article/182761.htm
另外,涉及的解析函数decode_str()如下
defdecode_str(s): value,charset=decode_header(s)[0] ifcharset: value=value.decode(charset) returnvalue
在邮件中读取相关命令后,就是对命令执行,然后在通过邮件的形式反馈命令结果了。
这里以返回屏幕截图以及执行dos命令为例
defsend_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']#收件地址 ifkind==1:#第一方式反馈屏幕截图 print('Sendingscreenshot.') #创建一个带附件的实例 message=MIMEMultipart() message['From']='' message['To']=' ' subject='HackerCenterreply' message['Subject']=Header(subject,'utf-8') #邮件正文内容 message.attach(MIMEText('HackerServerreplay','plain','utf-8')) ifos.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("mailhasbeensendsuccessfully.") exceptsmtplib.SMTPExceptionase: print(e) ifkind==2:#第二种方式返回dos命令结果 message=MIMEText(result,'plain','utf-8') message['From']=' ' message['To']=' ' subject='HackerCenterreply' 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("mailhasbeensendsuccessfully.")
其中执行dos命令的函数如下:
defmanage_cmd(cmd): print('Thecommandis:%s'%cmd) kind=0 result='Nothinghappen.' if'screenshot'incmd: img=pyautogui.screenshot() img.save('./screenshot.jpg') kind=1 if'doscmd'incmd: dos_result='' index=cmd.find(':') cmd=cmd[index+1:] ifos.system(cmd): result='commanderr.' else: info=os.popen(cmd) forlineininfo: dos_result=dos_result+line kind=3 ifdos_result!='': result=dos_result returnkind,result
传入的cmd参数就是解析出的邮件内容,通过判断邮件内容来进行邮件反馈。
0x03实验结果
发送邮箱查询本机ip地址
收到的反馈如下:
总结
到此这篇关于python通过邮件控制电脑实现远程控制电脑操作的文章就介绍到这了,更多相关python邮件远程控制电脑内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。