吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4840|回复: 9
收起左侧

[Python 转载] 通过邮箱远程操作电脑 (Based on Python)

[复制链接]
WyattHuang 发表于 2019-1-25 22:48
本帖最后由 WyattHuang 于 2019-1-25 22:51 编辑

其实这个程序是我 1 年前写的,今天,在整理我之前写的代码时,突然找到了,在这篇博客里,我会分析一下这个小程序的实现步骤

章鱼猫地址:https://github.com/WyattHuang1/remote-cmd
程序下载:master.zip

我们的目的

用 python 做一个小程序,使得可以远程操控电脑,实现关机,重启,打开网页.. 一系列的功能

分析

远程:有没有一种方法能够实现信息的交换,且不需要钱呢?当然有,那就是网上到处都可以找到的免费邮箱

操控:为了实现实现关机,重启,打开网页..一系列的功能,我们使用 windows 自带的 cmd 命令行,比如

::1200秒后关机
shutdown -s -t 1200
::打开网页
start http://overfit.ml
::删除文件
del /f /im test.txt
::新建文件夹
md test

使用

python 3.6

程序文件

config.json ---> 配置文件
maillib.py ---> 接收、发送、处理邮件的库
远程cmd.py  ---> 主程序

config.json

{
  "mailAccount" : "你的163邮箱@163.com",
  "mailPassword" : "你的密码",
  "RefreshWait" : 刷新频率(程序检查邮箱的频率,最好写5)
}

maillib.py

里面包含了:发送邮件,删除邮件,获取第一封邮件的功能

# code by Wyatt
# 20190123
# version 1

import smtplib
from poplib import POP3
from email.mime.text import MIMEText
import base64

def sendMail(config,sub,msg):

    mailAccount = config['mailAccount']
    mailPassword = config['mailPassword']

    message = MIMEText(msg, 'plain', 'utf-8')
    message['Subject'] = sub
    message['From'] = "remote control system"

    server = smtplib.SMTP('smtp.163.com')
    server.login(mailAccount, mailPassword)
    server.sendmail(mailAccount, mailAccount, message.as_string())
    server.quit()

def getMail(config,delmail):

    mailAccount = config['mailAccount']
    mailPassword = config['mailPassword']

    p = POP3('pop.163.com')
    p.user(mailAccount)
    p.pass_(mailPassword)
    resp, mails, octets = p.list()
    index = len(mails)
    resp, lines, octets = p.retr(index)
    if delmail == 1:
        p.dele(index)
    return lines

def testMail(config):

    mailAccount = config['mailAccount']
    mailPassword = config['mailPassword']

    try:
        server = smtplib.SMTP('smtp.163.com')
        server.login(mailAccount, mailPassword)
        p = POP3('pop.163.com')
        p.user(mailAccount)
        p.pass_(mailPassword)
        p.list()
    except BaseException:
        return 0
    return 1

def decode64(content):
    return base64.b64decode(content)

def encode64(content):
    return base64.b64encode(content)

# RECIEVE [0] TIME[3] CONTENTP[-1]

主程序 “远程cmd.py”

  1. 导入必要的库

    # encoding:gbk
    import json
    import maillib
    import os
    import time
  2. 定义导入config.json的方程

    # load the config
    def setConfig():
       configTxt = open('config.json',"r")
       return json.load(configTxt)
  3. 定义如果程序出错后执行的代码

    # end program code
    def endProgram():
       input()
       os._exit(0)
  4. 设置 config

    # 设置 config
    try:
       config = setConfig()
    except BaseException:
       print('不能载入配置文件!')
       endProgram()
  5. 测试config里的mail能不能用

    # 测试邮箱主机
    if maillib.testMail(config):
       print("主机与邮箱服务器连接正常!")
    else:
       print("不能与邮箱服务器构建链接!!")
       endProgram()
  6. 询问执行的模式

    # ask for input
    mode = input("控制模式:1 还是被控制模式:2\n> ")
  7. 如果是控制端的话

    if mode == "1":
    while True:
           # 把输入加密且转码
           inp = maillib.encode64(bytes(input("> "),encoding='utf-8'))
    
           try:
               # 发送邮件,并 subject 为"remote control system mail"
               maillib.sendMail(config,"remote control system mail",inp)
               print(": 发送成功!")
           except BaseException:
               print(": 未能成功执行发送!")
               input("回车重试...")
  8. 如果是被控制端的话

    elif mode == "2":
       # 初始化
       testStr = "Subject: remote control system mail"
       refreshFreq = config['RefreshWait']
    
       print("执行进入主机远程控制系统")
       print('已成功进入')
       while True:
           try:
               # 刷新率
               time.sleep(refreshFreq)
               # 获取第一封邮件
               mail = maillib.getMail(config,0)
               # 如果满足指定 subject,即有命令文件
               if mail[6].decode() == testStr:
                   # 输出邮件信息,没什么用,只是看起来很吊
                   print('\n')
                   print(mail[0].decode())
                   print(mail[3].decode())
                   print(mail[6].decode())
                   # 分析邮件,获取命令
                   code = maillib.decode64(maillib.decode64(mail[-1])).decode()
                   # 删除命令邮件
                   maillib.getMail(config,1)
                   # 发送成功日志到邮箱
                   info = '执行任务成功完成,指令:'+ code
                   maillib.sendMail(config,'mission Successful',info)
                   # 执行命令
                   print("正在执行的命令:"+ code)
                   os.system(code)
                   print('\n')
           except BaseException:
               print('与服务器失去连接,正在尝试重新尝试')
               time.sleep(5)

    我的其他文章

    1.    最好用的邮箱客服端 MailBird 破解版
    2.    用 python 做的电影爬虫
    3. ...

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
玩世不攻 + 1 + 1 热心回复!
LEP + 1 + 1 谢谢@Thanks!
哈哈衬 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
编程-修宇 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

三笙三世 发表于 2019-1-25 23:18
能否封装成exe格式,小白我看不懂
 楼主| WyattHuang 发表于 2019-1-25 23:29
三笙三世 发表于 2019-1-25 23:18
能否封装成exe格式,小白我看不懂

吾爱的一个用户做过一个类似的,是exe格式,地址是:https://www.52pojie.cn/thread-853364-1-1.html
星空下的亮 发表于 2019-1-25 23:29
额微粒波地 发表于 2019-1-26 10:52
感谢楼主分享,支持一下!
罗茂松 发表于 2019-1-26 11:06
这个太牛啦,试试看
juedifengshen 发表于 2019-1-26 16:31 来自手机
感谢楼主分享
三笙三世 发表于 2019-1-26 20:38
WyattHuang 发表于 2019-1-25 23:29
吾爱的一个用户做过一个类似的,是exe格式,地址是:https://www.52pojie.cn/thread-853364-1-1.html

谢谢了。,。
hlh2518 发表于 2019-1-26 21:36 来自手机
学习一下思路,谢谢分享
maiawpyg 发表于 2019-1-27 11:47
用不到帮顶
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 17:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表