python实现微信远程控制电脑

首先,我们要先看看微信远程控制电脑的原理是什么呢?

我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我们发送关机指令给这个邮箱的时候,若Python检测到相关的指令,那么Python直接发送本机的相关命令。

下面来分析一下该项目:

1.需求分析

1.范围:用Python开发一个远程操控电脑的项目。

2.总体要求:

2.1 总体功能要求:能够通过该软件远程控制该软件所在的电脑的重启或关机操作。
2.2 系统要求:开发语言使用Python,并且开发出来的程序能在Windows运行。

2.设计

首先,我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我们发送关机指令给这个邮箱的时候,若Python检测到关机的指令,那么Python直接发送本机的关闭。

3.编写

本项目的流程图如下

第一步,需要注册一个新浪邮箱。然后点击新浪邮箱点击右上角设置如图

选择“客户端pop/imap/smtp”

打开新浪邮箱的SMTP与POP3功能

具体实现代码:
配置文件config.ini

[Slave]
pophost = pop.sina.com
smtphost = smtp.sina.com
port = 25
username = XXX@sina.com
password = XXX

[Boss]
mail = XXX@qq.com
timelimit = 2

[Command]
shutdown=shutdown -f -s -t 100 -c closing...
dir=dir

[Open]
music = F:Masetti - Our Own Heaven.mp3
video = F:Jai Waetford - Shy.mp4
notepad = notepad

excutor.py

#coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import os
import win32api
from mccLog import mccLog

class executor(object):
  def __init__(self,commandDict,openDict):
    '''
    创建方法
    :param commandDict:
    :param openDict:
    '''
    self.mccLog = mccLog()
    self.commandDict = commandDict
    self.openDict = openDict
  def execute(self,exe,mailHelper):
    self.mailHelper = mailHelper
    subject = exe['subject']
    # self.mccLog.mccWriteLog(u'开始处理命令')
    print u'start to process'
    if subject !='pass':
      self.mailHelper.sendMail('pass','Slave')
      if subject in self.commandDict:
        # self.mccLog.mccWriteLog(u'执行命令!')
        print u'start command'
        try:
          command = self.commandDict[subject]
          os.system(command)
          self.mailHelper.sendMail('Success','Boss')
          # self.mccLog.mccWriteLog(u'执行命令成功!')
          print u'command success'
        except Exception,e:
          # self.mccLog.mccError(u'执行命令失败'+ str(e))
          print 'command error'
          self.mailHelper.sendMail('error','boss',e)
      elif subject in self.openDict:
        # self.mccLog.mccWriteLog(u'此时打开文件')
        print u'open the file now'
        try:
          openFile = self.openDict[subject]
          win32api.ShellExecute(0,'open',openFile,'','',1)
          self.mailHelper.sendMail('Success','Boss')
          # self.mccLog.mccWriteLog(u'打开文件成功!')
          print u'open file success'
        except Exception,e:
          # self.mccLog.mccError(u'打开文件失败!' + str(e))
          print u'open file error'
          self.mailHelper.sendMail('error','Boss',e)
      elif subject[:7].lower() =='sandbox':
        self.sandBox(subject[8:])
      else:
        self.mailHelper.sendMail('error','Boss','no such command!')

  def sandBox(self,code):
    name = code.split('$n$')[0]
    code = code.split('$n$')[1]
    codestr = '\n'.join(code.split('$c$'))
    codestr = codestr.replace('$',' ')
    with open(name,'a') as f:
      f.write(codestr)
    os.system('python' + name)

configReader.py

#-*-coding:utf-8-*-
import ConfigParser
import os,sys

class configReader(object):
  def __init__(self,configPath):
    configFile = os.path.join(sys.path[0],configPath)
    self.cReader = ConfigParser.ConfigParser()
    self.cReader.read(configFile)

  def readConfig(self,section,item):
    return self.cReader.get(section,item)

  def getDict(self,section):
    commandDict = {}#字典
    items = self.cReader.items(section)
    for key,value in items:
      commandDict[key] = value
    return commandDict

日志文件mccLog.py

#-*-coding:utf-8-*-
import logging
from datetime import datetime

class mccLog(object):
  def __init__(self):
    logging.basicConfig(
      level=logging.DEBUG,
      format='%(asctime)s %(levelname)s %(message)s',
      datefmt='%Y-%m-%d %H:%M:%S',
      filename=datetime. now().strftime('%Y%m%d%H%M%S') + '.log',
      filemode='a'
    )

  def mccWriteLog(self,logContent):
      logging.info(logContent)

  def mccError(self,errorContent):
      logging.error(errorContent)

mailHelper.py

#-*-coding:utf-8-*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
from email.mime.text import MIMEText
from configReader import configReader
from mccLog import mccLog
import poplib
import smtplib
import re

class mailHelper(object):
  CONFIGPATH = 'config.ini'

  def __init__(self):
    '''
    初始化邮件
    '''
    self.mccLog = mccLog()
    cfReader = configReader(self.CONFIGPATH)
    self.pophost = cfReader.readConfig('Slave','pophost')
    self.smtphost = cfReader.readConfig('Slave','smtphost')
    self.port = cfReader.readConfig('Slave','port')
    self.username = cfReader.readConfig('Slave','username')
    self.password = cfReader.readConfig('Slave','password')
    self.bossMail = cfReader.readConfig('Boss','mail')
    self.loginMail()
    self.configSlaveMail()

  def loginMail(self):
    '''
    验证登陆
    :return:
    '''
    self.mccLog.mccWriteLog('start to login the E-mail')
    print 'start to login e-mail'
    try:
      self.pp = poplib.POP3_SSL(self.pophost)
      self.pp.set_debuglevel(0)#可以为0也可以为1,为1时会显示出来
      self.pp.user(self.username)#复制
      self.pp.pass_(self.password)
      self.pp.list()#列出赋值
      print 'login successful!'
      self.mccLog.mccWriteLog('login the email successful!')
      print 'login the email successful!'
    except Exception,e:
      print 'Login failed!'
      self.mccLog.mccWriteLog('Login the email failed!')
      exit()

  def acceptMail(self):
    '''
    接收邮件
    :return:
    '''
    self.mccLog.mccWriteLog('Start crawling mail!')
    print 'Start crawling mail'
    try:
      ret = self.pp.list()
      mailBody = self.pp.retr(len(ret[1]))
      self.mccLog.mccWriteLog('Catch the message successfully')
      print 'Catch the message successfully'
      return mailBody
    except Exception,e:
      self.mccLog.mccError('Catch the message failed' + e)
      print 'Catch the message failed'
      return None

  def analysisMail(self,mailBody):
    '''
    正则分析邮件
    :param mailBody:
    :return:
    '''
    self.mccLog.mccWriteLog('Start crawling subject and sender')
    print 'Start crawling subject and sender'
    try:
      subject = re.search("Subject: (.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
      print subject
      sender = re.search("'X-Sender: (.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
      command = {'subject':subject,'sender':sender}
      self.mccLog.mccWriteLog("crawling subject and sender successful!")
      print 'crawling subject and sender successful'
      return command
    except Exception,e:
      self.mccLog.mccError("crawling subject and sender failed!" + e)
      print 'crawling subject and sender failed!'
      return None

  def sendMail(self,subject,receiver,body='Success'):
    '''
    发送邮件
    :param subject:
    :param receiver:
    :param body:
    :return:
    '''
    msg = MIMEText(body,'plain','utf-8')
    #中文需要参数utf-8,单字节字符不需要
    msg['Subject'] = subject
    msg['from'] = self.username
    self.mccLog.mccWriteLog('Start sending mail' + 'to' +receiver)
    print 'Start sending mail'
    if receiver == 'Slave':
      try:
        self.handle.sendmail(self.username,self.username,msg.as_string())
        self.mccLog.mccWriteLog('Send the message successfully')
        print 'Send the message successfully'
      except Exception,e:
        self.mccLog.mccError('Send the message failed' + e)
        print 'Send the message failed'
        return False
    elif receiver == 'Boss':
      try:
        self.handle.sendmail(self.username,self.bossMail,msg.as_string())
        self.mccLog.mccWriteLog('Send the message successfully')
        print 'Send the message successfully'
      except Exception,e:
        self.mccLog.mccError('Send the message failed!' + e)
        print 'Send the message failed!'
        return False

  def configSlaveMail(self):
    '''
    配置邮件
    :return:
    '''
    self.mccLog.mccWriteLog('Start configuring the mailbox')
    print 'Start configuring the mailbox'
    try:
      self.handle = smtplib.SMTP(self.smtphost, self.port)
      self.handle.login(self.username, self.password)
      self.mccLog.mccWriteLog('The mailbox configuration is successful')
      print 'The mailbox configuration is successful'
    except Exception, e:
      self.mccLog.mccError('The mailbox configuration is failed' + e)
      print 'The mailbox configuration is failed'
      exit()

#
# if __name__=='__main__':
#   mail = mailHelper()
#   body = mail.acceptMail()
#   print body
#   print mail.analysisMail(body)
#   mail.sendMail('OK','Slave')

weiChatControlComputer.py

#-*-coding:utf-8-*-

import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import time
import sys
from mailHelper import mailHelper
from excutor import executor
from configReader import configReader

__Author__ = 'william'
__Verson__ = 0.5

reload(sys)
sys.setdefaultencoding('utf-8')

class MCC(object):
  CONFIGPATH = 'config.ini'
  KEY_COMMAND = 'Command'
  KEY_OPEN = 'Open'
  KEY_BOSS = 'Boss'
  KEY_TIMELIMIT = 'timelimit'#扫描时间的频率

  def __init__(self):
    self.mailHelper = mailHelper()
    self.configReader = configReader(self.CONFIGPATH)
    commandDict = self.configReader.getDict(self.KEY_COMMAND)
    openDict = self.configReader.getDict(self.KEY_OPEN)
    self.timeLimit = int(self.configReader.readConfig(self.KEY_BOSS,self.KEY_TIMELIMIT))
    self.excutor = executor(commandDict,openDict)
    self.toRun()

  def toRun(self):
    '''
    实现轮训操作
    :return:
    '''
    while True:
      self.mailHelper = mailHelper()
      self.run()
      time.sleep(self.timeLimit)

  def run(self):
    mailBody = self.mailHelper.acceptMail()
    if mailBody:
      exe = self.mailHelper.analysisMail(mailBody)
      if exe:
        self.excutor.execute(exe,self.mailHelper)

if __name__ == '__main__':
  mcc = MCC()

运行截图:

4.总结

在这个小项目的编写过程中,知道了项目开发的基本流程并且走了一遍,通过项目管理的方式去开发项目,并且在这个小项目开发的过程中,复习了Python一些初级阶段的基础知识,并且更深刻体会到从项目的设计到项目的实施,以及项目的测试运维等步骤需要程序员深刻的理解,这样才能在项目中逐渐完善自我。

待续。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Python3.4实现远程控制电脑开关机
  • python编写微信远程控制电脑的程序
  • python的paramiko模块实现远程控制和传输示例
  • python如何实现远程控制电脑(结合微信)
  • python实现远程通过网络邮件控制计算机重启或关机
(0)

相关推荐

  • python实现远程通过网络邮件控制计算机重启或关机

    需求分析: python实现一个远程通过网络邮件控制计算机重启或关机的项目. 程序流程: 过程分析: 要实现本功能,首先要直到在本地如何通过Python控制计算机的重启和关机,然后需要知道如何远程发送消息给Python程序.可以在Python中执行CMD命令控制计算机的重启和关机,把发送电子邮件作为远程控制的渠道.Python程序自动登录邮箱检测邮件,当发送关机指令给这个邮箱时,则执行关机命令. 1.通过os.system()函数执行CMD命令 import os os.system('shut

  • python如何实现远程控制电脑(结合微信)

    不知道大家有没有这样一个烦恼,"自己的电脑总是被别人使用,又不好意思设置密码",所以利用python设计了一个程序来实现自由管控. 功能虽然简单,但大家可以通过其思路来实现更多的功能. 大致功能主要是两个部分, 一.电脑开机时,我的手机能收到通知. 二.可以通过手机发个特定的mail,就可以控制电脑关机. 第一个步骤:申请一个邮箱,使这个邮箱与你的手机号码绑定,然后你在这个邮箱中设定如果有新的邮件就发短信通知,这样开机时往这个邮箱发个mail,我手机就会收到短信通知了. 第二个步骤:通

  • python编写微信远程控制电脑的程序

    今天来分享一个"高大上"的技术--使用python编写一个可以用微信远程控制电脑的程序! 先来分析一下控制的具体流程: 我们使用微信给特定的邮箱发送一封邮件,其中包含了我们想要电脑执行的命令,然后电脑上的python程序获取到这封邮件,然后解析其中的命令,再交付给电脑执行.可以看出,这其中主要的技术难点就是获取邮件了!但是!这没有任何问题,大家看到我的上一篇博客<python 收发邮件>就可以了! 下面给出使用python收发邮件并执行邮件命令的代码. # -*- codi

  • python的paramiko模块实现远程控制和传输示例

    本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下: 1 安装 sudo pip install paramiko 2 ssh实现远程控制 #LINUX下执行shell ssh username@ip #输入密码后就可以对远程机器进行操作 ssh username@ip command #输入密码后远程机器就执行command ssh运行后,想退出,可以kill掉ssh进程. 3 paramiko实现ssh import paramiko hostname

  • Python3.4实现远程控制电脑开关机

    本文实例为大家分享了Python实现远程操控电脑的具体代码,供大家参考,具体内容如下 import poplib import sys import smtplib from email.mime.text import MIMEText import os from email.header import decode_header import email import time def check_email(): try: p = poplib.POP3('pop.163.com') p

  • python实现微信远程控制电脑

    首先,我们要先看看微信远程控制电脑的原理是什么呢? 我们可以利用Python的标准库控制本机电脑,然后要实现远程的话,我们可以把电子邮件作为远程控制的渠道,我们用Python自动登录邮箱检测邮件,当我们发送关机指令给这个邮箱的时候,若Python检测到相关的指令,那么Python直接发送本机的相关命令. 下面来分析一下该项目: 1.需求分析 1.范围:用Python开发一个远程操控电脑的项目. 2.总体要求: 2.1 总体功能要求:能够通过该软件远程控制该软件所在的电脑的重启或关机操作. 2.2

  • python实现微信发送邮件关闭电脑功能

    Python 通过微信邮件实现电脑关机,供大家参考,具体内容如下 通过手机微信发送QQ邮件给sina邮箱,然后利用python的pop3定时检查sina邮箱的邮件主题以及邮件来源,并在电脑执行相应的命令行实现关机. Email_test[V1.0] import poplib import os import time from email.parser import Parser from email.header import decode_header from email.utils i

  • Python简单实现控制电脑的方法

    本文实例讲述了Python简单实现控制电脑的方法.分享给大家供大家参考,具体如下: 1.windows 下,CMD的一些命令: dir:列出当前的所有文件 time:打印当前的时间 tree:列出当前目录下的子结构 在cmd中进入了某种模式,退出可以尝试以下命令:q .exit().Ctrl+c.Ctrl+z 运行程序:在cmd里面直接输入程序名称.如:notepad.calc 按tab键可以补全名字 在一个文件夹下,想快速打开cmd: 按住shift键,在鼠标点击右键,可以看见命令. 想在cm

  • 教你使用python实现微信每天给女朋友说晚安

    本文为大家分享了教你用微信每天给女朋友说晚安的python实战,供大家参考,具体内容如下 但凡一件事,稍微有些重复.我就考虑怎么样用程序来实现它. 这里给各位程序员朋友分享如何每天给朋友定时微信发送"晚安",故事,新闻,等等··· ··· 最好运行在服务器上,这样后台挂起来更方便. 准备: 微信号 pip install wxpy pip install wechat_sender pip install requests 代码如下: #不要抄下源码就运行,你需要改动几个地方 from

  • Python实现用手机监控远程控制电脑的方法

    一.前言 很多时候,我们都有远程控制电脑的需求.比如正在下载某样东西,需要让电脑在下载完后关机.或者你需要监控一个程序的运行状况等. 今天我们就来用Python实现一个远程监控并控制电脑的小程序. 二.实现原理 听起来远程控制电脑好像很高级的样子,但是实现起来其实非常简单.实现原理如下: 运行程序,让程序不停地读取邮件 用手机给电脑发送邮件 判断是否读取到指定主题的邮件,如果有,则获取邮件内容 根据邮件内容,执行预设的函数 与其说是学习如何远程控制电脑,还不如说是学习如何读取邮件.当然,上面的的

  • python实现远程控制电脑

    python远程控制电脑的具体代码,供大家参考,具体内容如下 ​ python拥有大量的第三方库,且语法简单.今天老杨就用python实现远程控制电脑 ​ 所谓,谋定而后动,在实现任何一个需求之前,我们需要先分析,捋清楚一个思路,远程控制电脑,无非就是接收远程的命令和根据命令去执行对应的操作.那这里,我们借助微信来接收命令,利用我们的一个itchat库实现远程控制电脑 ​ 按上所说,我们要完成需求,无非是把任务细分,首先,接收到消息指令,再根据对应的指令执行相对应的操作,其中我们需要考虑一个问题

  • python 通过邮件控制实现远程控制电脑操作

    0x00 思路 之前在博客上看到了使用python通过微信的接口,与微信交互的方式来控制电脑的摄像头.开关机等.但是这种方式需要首先在python上登录自己的微信才可以,同时微信端也会有已经在网页端登录的字样,很显眼.因此想到了另外一种交互方式,通过邮件进行交互. 通过邮件的方式不要求用户实时在线,只需要程序隔一段时间扫描一下邮箱的新邮件即可.这种交互方式更为方便.其次,这种方式也更为隐蔽,不会干扰微信的使用. 0x01 需要用到的库 主要是python的一些用于收发邮件的库 import sm

随机推荐