手机控制电脑的方法及其脚本

sh/bash/dash/ksh/zsh等Shell脚本
dynamic0603
帖子: 259
注册时间: 2008-11-14 20:35

手机控制电脑的方法及其脚本

#1

帖子 dynamic0603 » 2010-03-14 22:41

真是太兴奋了!这个想法是晚上吃饭的时候突然想到的,然后就直奔实验室,开始实践
我那想法。
其实想法很简单,就是利用139邮箱,我在手机上发一封包含命令的邮件到我的电脑上,
我的电脑就自动读取邮件里的命令然后执行之,现在可以实现让电脑关机,自动放音乐
等等命令行下的内容,甚至还可以查单词,然后把查到的结果发到我的手机上来。
下面就说一下具体怎么做吧:

0、开通139邮箱

发送KTYX到10086开通139免费邮箱(189和联通也可以开通,具体方法不知)。

发送TL到10658139开通长短信提醒,也就是有邮件就把邮件以短信的形式发到你的手机上。

哎呀!在为139邮箱打广告呀!

其实大家还可以把你其他邮箱的邮件都自动转发到139邮箱,这样你就可以知道你有没有收到邮件啦。省得去打开邮箱查看是否有新邮件。



1、首先配置mutt,按照下面的方法配置
http://mail2.ustc.edu.cn/~lixuebai/GNU/MuttConfig.html
然后再在~/.procmailrc中加入
:0
* ^From.*[email protected]
hchl139

把从我的139邮箱发过来的邮件都放到~/.Mail/hchl139这个收件箱里

2、脚本
cat /usr/local/bin/mblctrlcmpt

代码: 全选

#!/bin/bash
#获取邮件
getmail -n > /dev/null 2>&1
#如果收件箱不为空的话,就说明收到了邮件
#我把从我的139邮箱收到的邮件都放入/home/hchl/.Mail/hchl139中
#这在.procmail中设置
if [ -s /home/hchl/.Mail/hchl139 ]
then
    #读取邮件的最后两行内容,邮件里面有很多乱七八糟的东西,但是倒数第二行是
    #邮件内容,最后一行是空行。当然这是指只发一条命令的情况,目前我也只能做
    #到这一点。
    mailcmd=`tail -n 2 /home/hchl/.Mail/hchl139`
    #如果那条命令最后含有":y"两个字符,说明要把执行结果返回到我的手机上。
    #本来是想要发送两行的,第一行是命令,第二行是:y或者为空,但是发现我的收
    #件箱里得到的只是一行并且换行变成了一些乱七八糟的字符,这个我不知道怎么
    #处理。好像用不同的方法发送收到的邮件格式也不一样,所以这要视具体情况。
    yesno=`echo $mailcmd | sed 's/^.*:\(y\)/\1/'`
    if [ $yesno = 'y' ]
    then
        `echo $mailcmd | sed 's/\(^.*\):y/\1/'`
        #把执行结果发到我的手机
        `echo $mailcmd | sed 's/\(^.*\):y/\1/'` | mutt -s "Result" 
[email protected]
    #如果那条命令最后没有以":y"两个字符结尾,则直接执行命令
    else
        `echo $mailcmd`
    fi
#收件箱为空的话就直接退出了
else
    exit 0
fi
#执行完命令后把收件箱清空
cat /dev/null > /home/hchl/.Mail/hchl139
#######################THE END##################################
3、定时任务:
在crontab中加入
* * * * * root mblctrlcmpt
表示每一分钟都执行

4、手机自带邮件客户端设置139邮箱
邮箱名称:139邮箱
发送设置信息:
服务器:smtp.139.com
端口:25
电子邮件:你的139邮箱帐号
接收设置:
选择POP3协议
服务器: pop.139.com
端口:110
用户名:你的139邮箱帐号
密码:你的邮箱密码
连接设置:
连接互联网
不要设置成移动梦网

5、存在的问题
能不能把定时执行的时间间隔改小一点?一分钟执行一次太慢了!
我为了实现关机和待机两个功能,把执行权限给了root,这样很危险。那么如何实现
需要root权限的命令普通用户可以执行呢?我的想法是这样的,在命令中发送root
密码过去,但是怎样把那个密码给要执行的命令呢?
望各位高手不吝赐教!
上次由 dynamic0603 在 2010-03-15 10:07,总共编辑 1 次。
头像
wangdu2002
帖子: 13284
注册时间: 2008-12-13 19:39
来自: 物华天宝人杰地灵

Re: 手机控制电脑的方法及其脚本

#2

帖子 wangdu2002 » 2010-03-14 23:00

这么好的贴竟然没人顶。路过支持楼主的钻研精神。 :em11
行到水穷处,坐看云起时。
海内生明月,天涯共此夕。
--------------------吾本独!
头像
onshoestring
论坛版主
帖子: 4666
注册时间: 2009-09-06 5:53

Re: 手机控制电脑的方法及其脚本

#4

帖子 onshoestring » 2010-03-14 23:15

找找开源手机ssh客户端能解决问题。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 手机控制电脑的方法及其脚本

#5

帖子 xiooli » 2010-03-14 23:23

额,我用这个方法让服务器定时通知运行状态已经很久了,现在贡献出脚本。
ps:手机控制电脑部分没写,只有电脑发信部分:

代码: 全选

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Name:     mailnotify.py
# Author:   xiooli <xioooli[at]yahoo.com.cn>
# Site:     http://joolix.com
# Licence:  GPLv3
# Version:  100113

'''发送信息到某邮箱,可以用着定时获取服务器的状态(139 邮箱支持邮件短信提醒)'''

import smtplib, os, time, sys

def send():
    smtp = 'smtp.139.com'
    from_ = 'bulabula' #这样写收到的短信第一行才不会只是个[]
    to = '[email protected]'
    user = 'xxx'
    password = sys.argv[1]
    try:
        subject = sys.argv[3]
    except:
        subject = 'any thing'

    text = sys.argv[2].replace("|", "\r\n")

    msg='To: ' + to + '\r\nFrom: ' + from_ + '\r\nSubject: ' + subject + '\r\n\r\n' + text

    s = smtplib.SMTP(smtp)
    login_stat = s.login(user, password)
    if login_stat[0] == 235:
        send_stat = s.sendmail(to, to, msg)
        if not send_stat:
            print "send OK!"
            return 0
    else:
        print "send failed!"
        return 1

send()
头像
xyf
帖子: 2032
注册时间: 2007-05-05 23:59
来自: 嘉兴

Re: 手机控制电脑的方法及其脚本

#6

帖子 xyf » 2010-03-15 0:00

:em11
ufraw中文(raw图像处理)  http://sites.google.com/site/ufrawzh/
Gimp影像处理 http://sites.google.com/site/gimpcn/
头像
sonofthewind
帖子: 557
注册时间: 2008-10-12 12:58
来自: 天津

Re: 手机控制电脑的方法及其脚本

#7

帖子 sonofthewind » 2010-03-15 0:30

高手众多啊
头像
momova
帖子: 3381
注册时间: 2007-07-11 21:43
系统: archlinux
来自: 东江边

Re: 手机控制电脑的方法及其脚本

#8

帖子 momova » 2010-03-15 8:10

纯顶一个。
我来了,我看见了,我征服了!
求勾搭,不管饭。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

Re: 手机控制电脑的方法及其脚本

#9

帖子 poet » 2010-03-15 9:54

dynamic0603 写了: 5、存在的问题
能不能把定时执行的时间间隔改小一点?一分钟执行一次太慢了!
我为了实现关机和待机两个功能,把执行权限给了root,这样很危险。那么如何实现
需要root权限的命令普通用户可以执行呢?我的想法是这样的,在命令中发送root
密码过去,但是怎样把那个密码给要执行的命令呢?
望各位高手不吝赐教!
这个好解决。第一个就是直接执行一个循环式的程序而不是利用 crontab,这样就可以自己控制延时。

当然,我觉得轮询的方法终归是不可靠的,使用等待式更好,可以直接在你的机器上架一个 web 服务器,然后手机可以直接用 http 访问你的网页,并执行相关功能,使用起来要比邮箱容易得多。

第二个就是使用 suid ,如果 suid 是 root 的话,就可以以普通用户执行相关命令。无须 root 密码。——但是好像一般没有必要使用这样的功能,毕竟如果你关机了,怎么开机呢?关机状态不可能去轮询邮件,那么也就无法远程开机了。
dynamic0603
帖子: 259
注册时间: 2008-11-14 20:35

Re: 手机控制电脑的方法及其脚本

#10

帖子 dynamic0603 » 2010-03-15 13:01

后来自己有修改了一下,下面是修改后的脚本:

$cat /usr/local/bin/mblctrlcmpt

代码: 全选

#!/bin/bash
#===============================================================================
#
#          FILE:  mblctrlcmpt.sh
# 
#         USAGE:  ./mblctrlcmpt.sh 
# 
#   DESCRIPTION:  
#
#       VERSION:  1.0
#       CREATED:  2010年03月14日 19时04分45秒 CST
#      REVISION:  
# 
#        AUTHOR:  Hu Chunlong (hchl), [email protected]
#       COMPANY:  University of Science and Technology of China
#     Copyright:  Copyright (c) 2009, Hu Chunlong
#
#===============================================================================

#每十秒检查一下收件箱,看看是否有新邮件
while true
do
#获取邮件
getmail -n > /dev/null 2>&1
mailbox=/home/hchl/.Mail/hchl139
#如果收件箱不为空的话,就说明收到了邮件
#我把从我的139邮箱收到的邮件都放入/home/hchl/.Mail/hchl139中
#这在.procmail中设置
if [ -s $mailbox ]
then
    #邮件里面的命令格式是@&command&@或者@&command&@y@&,前者是只执行命令,后者是执行了还要返回
    #结果到手机。主要是收件箱里有时会变得乱七八糟,所以用某些特殊字符界定命令
    mailcmd=`grep '@&.*&@' $mailbox | sed 's/@&\(.*\)&@.*/\1/'`
    #如果命令包含了&@y@&,说明要把结果返回到手机。
    grep '&@y@&' $mailbox
    if [ $? -eq 0 ]
    then
        #如果命令中包含sudo -S,说明要把用户密码传给sudo
        echo $mailcmd | grep 'sudo -S'
        if [ $? -eq 0 ]
        then
            password=your_password #具有sudo权限用户的密码,当然是运行本程序的那个用户
            echo $password | `echo $mailcmd` | mutt -s "Result" [email protected]
        else
            `echo $mailcmd` | mutt -s "Result" [email protected]
        fi
    #如果那条命令最后没有以"&@y@&"结尾,则直接执行命令
    else
        echo $mailcmd | grep 'sudo -S'
        if [ $? -eq 0 ]
        then
            password=4757297
            echo $password | `echo $mailcmd`
        else
            `echo $mailcmd`
        fi
    fi
fi
#执行完命令后把收件箱清空
cat /dev/null > $mailbox
sleep 10
done
dynamic0603
帖子: 259
注册时间: 2008-11-14 20:35

Re: 手机控制电脑的方法及其脚本

#11

帖子 dynamic0603 » 2010-03-15 13:07

poet 写了:
这个好解决。第一个就是直接执行一个循环式的程序而不是利用 crontab,这样就可以自己控制延时。

当然,我觉得轮询的方法终归是不可靠的,使用等待式更好,可以直接在你的机器上架一个 web 服务器,然后手机可以直接用 http 访问你的网页,并执行相关功能,使用起来要比邮箱容易得多。

第二个就是使用 suid ,如果 suid 是 root 的话,就可以以普通用户执行相关命令。无须 root 密码。——但是好像一般没有必要使用这样的功能,毕竟如果你关机了,怎么开机呢?关机状态不可能去轮询邮件,那么也就无法远程开机了。
架设web服务器这个想法不错,不过我不知道怎么操作,能告诉我吗?不过呢由于我用的是学校校园网内的ip,是不能出校的,架设了web服务器手机也访问不了。
还是请你告诉我具体该怎么做,谢谢!
头像
hawksparrow
帖子: 58
注册时间: 2009-08-01 13:01

Re: 手机控制电脑的方法及其脚本

#12

帖子 hawksparrow » 2010-03-15 13:51

mark
头像
ioiomi
帖子: 380
注册时间: 2007-06-01 10:49

Re: 手机控制电脑的方法及其脚本

#13

帖子 ioiomi » 2010-03-23 21:18

标记下
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 手机控制电脑的方法及其脚本

#14

帖子 eexpress » 2010-03-24 8:57

嘛哦。 手机都支持ssh的了啊。
附件
ssh.png
ssh.png (23.13 KiB) 查看 2020 次
● 鸣学
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

Re: 手机控制电脑的方法及其脚本

#15

帖子 xiooli » 2010-03-24 11:18

ls 惊现大财主 :em11
回复