欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Windows批處理實(shí)現(xiàn)郵件遠(yuǎn)程控制電腦的操作方法(第三方批處理)

 更新時間:2023年01月04日 11:32:22   作者:dimo  
這篇文章主要介紹了Windows批處理實(shí)現(xiàn)郵件遠(yuǎn)程控制電腦(第三方批處理),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近網(wǎng)上看到了電子郵箱的新利用方法如題,下載了幾個此類軟件,發(fā)現(xiàn)好幾個不是不好用,就是功能不全。上博客園搜了一下,那么可以看到有使用java和python實(shí)現(xiàn)的,這里我們用Windows的批處理實(shí)現(xiàn)。
我們要實(shí)現(xiàn)的最基礎(chǔ)的功能,自然是執(zhí)行cmd命令,有了這個其他都好說。

Windows批處理的優(yōu)點(diǎn):
1.一個批處理文件,配合第三方批處理等,在幾乎所有Windows電腦上,可以直接運(yùn)行。
2.代碼編寫容易,邏輯比較簡單,基本上都是cmd命令。
批處理的缺點(diǎn):
1.我們遠(yuǎn)程控制,郵件發(fā)送過來的也是命令,由于Windows命令解釋的預(yù)處理機(jī)制,會把原批處理命令和發(fā)送的命令(變量)混在一起。此處會涉及到不是非常復(fù)雜、但總是令人暈頭轉(zhuǎn)向的空格問題、引號問題、轉(zhuǎn)義問題等。
2.上面這步若沒有處理好,很容易發(fā)生語法錯誤。如果是較輕的錯誤,命令完成還能給你返回一個errorlevel,若是比較嚴(yán)重的語法錯誤,可能直接導(dǎo)致命令行閃退。(就什么都沒有了。)for和if命令最易出現(xiàn)此問題。

1.收發(fā)郵件

Windows不自帶能夠通過命令行收發(fā)郵件的程序,因此我們的程序需要自帶第三方命令行。這里我們使用工具getmail來接收郵件。getmail使用pop3協(xié)議,可以將郵件下載為txt,并下載其附件。
發(fā)送郵件則使用blat進(jìn)行。blat使用SMTP發(fā)送郵件,同樣支持上傳附件。
可以通過輸入--help/?來獲取它們的詳細(xì)用法,可以參考這篇或者參考這篇。雖然翻譯不是非常專業(yè)。下面僅簡單說明一下。

getmail收郵件的用法

幫助文件中的參數(shù)我們不是每一個都用到。下面介紹的是本例中用到的幾個。

-u <userid>指定登錄的郵箱賬號
-pw <password>登錄密碼。在國內(nèi)常見的幾個郵箱都不是使用郵箱賬號密碼來直接作為pop3/imap的密碼,通常需要你自己到設(shè)置頁面獲取。
-s <server>pop3服務(wù)器??梢栽诟鬣]箱有關(guān)設(shè)置頁面找到。
-delete下載后刪除下載的郵件。不加此參數(shù)則不刪除。
-xtract下載郵件帶有的附件,并且解碼郵件內(nèi)容的明文。不加此參數(shù)則不會下載附件,也不會解碼明文,只會下載一個MSG文件,含有附件的有關(guān)信息,并且保存郵件內(nèi)容經(jīng)過base64編碼后得到的字符串。
-headersonly只下載郵件頭部信息,即發(fā)送者、接收者、郵件subject等。理論上這會加快獲取的速度。
-n <n>總共獲取n封郵件。貌似是從最早收到的一封郵件開始數(shù)。

getmail還可以將配置寫入注冊表,以后每次都使用注冊表中的配置,可以簡化參數(shù),不過我這次沒有使用。
因此我們配置好上述參數(shù)后,獲得的回顯如下(此次服務(wù)器上沒有任何郵件):

Failed to open registry key for GetMail profile , using default.
Failed to open registry key for GetMail
Getting *********@sina.cn's mailbox contents from server pop.sina.cn:110
There are 0 messages on the server.

blat發(fā)郵件的使用

參數(shù)非常多。想看詳細(xì)的同樣可以去訪問上面說過的頁面,這里只介紹會用到的。

<filename>直接寫在命令后面的第一個參數(shù),指定一個文本文件,其中的內(nèi)容會作為郵件的內(nèi)容
若不想從文件指定發(fā)送內(nèi)容,在上面這個參數(shù)只輸入-,之后可以在后面加一個參數(shù)-body "<郵件的內(nèi)容>"。
-to <address>收件人的電郵地址。
-charset <cs>文本編碼。為了正確發(fā)送中文,我們固定要加的一個參數(shù)-charset gbk指定使用GBK編碼。
-subject郵件的主題。
-server輸入smtp服務(wù)器地址,可以在郵箱設(shè)置界面找到。
-ffrom的縮寫,指定登錄用來發(fā)件的郵箱。
-u登陸郵箱用的用戶名。大部分是你郵件地址@前的部分,若登錄不成功請翻找郵箱的幫助界面。
-pw登錄密碼。與上文getmail的密碼相同。
-attach附加附件到郵件。

2.電腦使用的郵箱

我們的策略是電腦獨(dú)立使用一個郵箱地址,你可以使用其他的郵箱向這個地址發(fā)件來實(shí)現(xiàn)控制。
我推薦電腦使用的是新浪郵箱,一個手機(jī)號可以注冊多個獨(dú)立郵箱。并且連接比較穩(wěn)定,很少出現(xiàn)獲取/發(fā)送不成功的情況,5s的獲取郵件間隔毫無壓力,不會遭到阻止。
發(fā)件的郵箱幾乎沒有什么限制了,但是釘釘自帶的釘郵在這里無法使用,因?yàn)闀⑧]件的subject也一起加密(或者是使用了utf8編碼什么的,記不清了),批處理直接讀取比較麻煩。目前試過好用的是阿里郵箱和qq郵箱。163應(yīng)該是好用,但是沒試過。

3.原理概述

3.1執(zhí)行命令

由于在getmail接收到的文本文件里,subject沒有加密,而content經(jīng)過base64編碼了。所以一開始的計劃是只讀取subject,命令全部放到subject里。
程序首先要實(shí)現(xiàn)的功能是執(zhí)行cmd命令,后面我們還會加幾個自定義功能,需要通過命令來指定我們這里選擇的功能。這里我的實(shí)現(xiàn)方法是使用#號分隔,功能選擇用第一個#包裹,加的參數(shù)放在第二個#后面。批處理中可以使用for命令分別取得這兩個字符串。
例如,我們將執(zhí)行cmd命令的功能命名為cmd,需要執(zhí)行命令start a.exe
那么我們發(fā)郵件的主題會輸入成:#cmd#start a.exe
這個郵件經(jīng)過getmail下載后,出現(xiàn)在MSG1.TXT文件里的一行是:Subject: #cmd#start a.exe
我們通過for來解讀輸入:

echo off
for /f "tokens=2,* delims=#" %%i in ('type MSG1.TXT ^| findstr /b Subject:') do (
	set mode=%%i
	set para="%%j"
	)
echo mode:%mode%
echo command:%para%
pause

得到結(jié)果:

mode:cmd
command:"start a.exe"

之后我們調(diào)用cmd執(zhí)行這個命令即可。這里最好是新開一個cmd。加min最小化運(yùn)行。

start /MIN cmd.exe /c %para%

我們也可以調(diào)用另一個bat文件,這樣也會新開一個cmd窗口。同時可以寫入一些命令一并執(zhí)行,還可以將回顯輸入到文件中,再利用blat發(fā)送出去,這樣郵件端也可以看到回顯。

同時,執(zhí)行其他功能時也最好都新開一個批處理運(yùn)行。這樣若執(zhí)行命令耗時較長,或者執(zhí)行的命令一直在后臺運(yùn)行時,不會阻斷檢查郵件的進(jìn)程,仍然可以郵件執(zhí)行其他命令。

3.2文件傳輸

這就比較簡單了。getmail只要加上-xtract參數(shù),就會直接下載附件。要使用blat上傳附件,我們可以將其命名為upfile功能,使用if判斷%mode%,若為upfile就調(diào)用另一個批處理執(zhí)行blat,將發(fā)送的文件名附加到-attach即可。
利用這個功能,我們也可以發(fā)送批處理文件,將多個命令寫入文件實(shí)現(xiàn)命令批量執(zhí)行。通過start命令調(diào)用這個批處理即可。需要注意的是,一些郵箱(比如新浪郵箱就是)會自動攔截bat擴(kuò)展名等一些可執(zhí)行程序作為附件的郵件。解決方法也很簡單,可以更改文件擴(kuò)展名再發(fā)送,例如改為.txt。附件接收之后,再通過郵件執(zhí)行重命名命令,改回擴(kuò)展名,即可運(yùn)行。

3.3含有中文的命令

帶有中文subject無法在msg文件中直接顯示。例如會顯示為:

Subject: =?UTF-8?B?4oCq4oCqZGltb0BhbGl5dW4uY29t4oCs4oCs?=

這樣解碼就比較麻煩。而下面的content使用base64解碼之后就能直接看到中文,getmail的-xtract參數(shù)添加后也會自動將內(nèi)容給解碼出來,比較方便。因此我們可以在郵件正文中輸入命令,程序讀取后執(zhí)行。
然而getmail解碼出來的內(nèi)容是html(點(diǎn)擊查看詳細(xì)),這個批處理想要直接讀取文本比較麻煩。前面這個頁面也有解決方法。

3.4隱藏運(yùn)行

也比較簡單。使用vbs命令即可實(shí)現(xiàn)完全隱藏cmd的黑框,同時還能順便獲取UAC管理員權(quán)限。
此處假設(shè)我們要運(yùn)行的是run.bat:

REM 僅隱藏運(yùn)行
echo set ws=WScript.CreateObject("WScript.Shell") > start.vbs
echo ws.Run "%~dp0run.bat /start",0 >> start.vbs
start.vbs
del /f /q start.vbs
REM 隱藏運(yùn)行并獲取管理員權(quán)限
ECHO SET UAC = CreateObject^("Shell.Application"^) > Getadmin.vbs
ECHO UAC.ShellExecute "run.bat", "此處可以加一個參數(shù)", "", "runas", 0 >> Getadmin.vbs
Getadmin.vbs
del /f /q Getadmin.vbs

3.5開機(jī)運(yùn)行&防止關(guān)閉

開機(jī)運(yùn)行可以通過設(shè)置任務(wù)計劃實(shí)現(xiàn)??梢允褂萌蝿?wù)計劃程序來窗口化配置任務(wù),也可以使用schtasks命令,編寫一個批處理實(shí)現(xiàn)一鍵添加任務(wù)。同時我們還可以在程序啟動時發(fā)送提醒郵件,實(shí)現(xiàn)對開機(jī)時間的監(jiān)控。

rem 此處需要開機(jī)啟動的批處理文件為startgo.bat
set file='%~dp0startgo.bat'
schtasks /Create /SC ONLOGON /TN \Windows\MailService /TR "%file%" /F /RL HIGHEST /DELAY 0001:00
rem 延時啟動用于防止電腦還未聯(lián)網(wǎng)導(dǎo)致開機(jī)郵件發(fā)送失敗
pause

有關(guān)防止進(jìn)程被殺死,問題,歡迎點(diǎn)擊此處,或者參考

3.6配置文件

由于許多不同的批處理文件都要實(shí)現(xiàn)接受/發(fā)送郵件,我們需要將郵箱地址、登錄用戶名、密碼都寫入一個配置文件中,便于郵件收發(fā)。當(dāng)然也可以使用程序?qū)⑴渲脙Υ嬖谧员淼墓δ堋?br />在配置文件中,我們只需要將不同的配置寫入單獨(dú)一行即可用批處理分別讀取,這樣也便于文件的編輯。
利用for命令可以讀取文件的每一行并對每行執(zhí)行相同的操作。想要使用for讀取單獨(dú)一行的內(nèi)容,需要在執(zhí)行的末尾添加goto跳出for命令。多次使用這樣的for即可讀取到配置文件各個行的內(nèi)容。有關(guān)內(nèi)容可見網(wǎng)頁鏈接。

3.7更多功能

我們還可以添加更多實(shí)用的功能,通過if判斷和goto跳轉(zhuǎn)到功能。
例如,我們想要通過命令彈出一個提示框,代碼比較長,輸入不方便。

mshta vbscript:msgbox("content",64,"title")(window.close)

此時就可以將命令保存到bat中。把功能命名為popup,使用if判斷%mode%即可。跳轉(zhuǎn)后執(zhí)行對應(yīng)的bat文件,并將顯示的內(nèi)容作為參數(shù)輸送給bat。例如我們規(guī)定用$作分隔字符,則發(fā)送郵件時輸入:#popup#title$64$content
主程序按照#分隔輸入,判斷出需要跳轉(zhuǎn)到popup;之后popup.bat會接收到輸入:"title$64$content"
此時再按$分割輸入,即可得到每部分內(nèi)容,并用于彈窗:

echo off
for /f "tokens=1,2,3 delims=$" %%i in ('echo %~1') do (
	set tit=%%i
	set num=%%j
	set text=%%k
	)
mshta vbscript:msgbox("%text%",%num%,"%tit%")(window.close)
exit

4.最終代碼

由于使用了不少功能,放在一個程序文件夾里的第三方和bat文件也有不少。

點(diǎn)擊查看代碼

下面的代碼都可以這樣點(diǎn)擊展開。

start.bat

echo off
cd /d "%~dp0"
echo set ws=WScript.CreateObject("WScript.Shell") > start.vbs
echo ws.Run "%~dp0run.bat /start",0 >> start.vbs
start.vbs
rem 發(fā)送開機(jī)提醒郵件;讀取配置文件
:euser
for /f "eol=# tokens=* delims=" %%i in (mail.cfg) do (
    set euser=%%i
	goto ename
	)
:ename
for /f "eol=# skip=4 tokens=* delims=" %%i in (mail.cfg) do (
    set ename=%%i
	goto epw
	)
:epw
for /f "eol=# skip=6 tokens=* delims=" %%i in (mail.cfg) do (
    set epw=%%i
	goto smtp
	)
:smtp
for /f "eol=# skip=10 tokens=* delims=" %%i in (mail.cfg) do (
    set smtp=%%i
	goto eto
	)
:eto
for /f "eol=# skip=12 tokens=* delims=" %%i in (mail.cfg) do (
    set eto=%%i
	goto getcfgend
	)
:getcfgend
set subj="[MailCTRL]%DATE% %TIME% %COMPUTERNAME%"
echo host has started.>hello.txt
echo for more info:>> hello.txt
echo date and time:%DATE% %TIME%>> hello.txt
echo computer:%COMPUTERNAME%>> hello.txt
echo userdomain:%USERDOMAIN%>> hello.txt
echo username:%USERNAME%>> hello.txt
echo -------------------->>hello.txt
systeminfo >> hello.txt
ipconfig >> hello.txt
set content=hello.txt
::------------------
blat %content% -to %eto% -charset gbk -subject %subj% -server %smtp% -f %euser% -u %ename% -pw %epw% 
del /f /q %content%
del /f /q start.vbs
exit

run.bat

cd /d "%~dp0"
del /F /Q z*.todo
del /F /Q Extract*.out
del /F /Q html*.out
@echo off
timeout /t 3
cls
echo "mail.cfg"> usedcfg.cfg
::echo %~dp0> dir.cfg
echo ##########################
echo setting email service......
:euser
for /f "tokens=* delims=" %%i in (usedcfg.cfg) do set cfgfile=%%~i
echo setted cfgfile:%cfgfile%
for /f "eol=# tokens=* delims=" %%i in (%cfgfile%) do (
    set euser=%%i
	goto epw
	)
:epw
for /f "eol=# skip=6 tokens=* delims=" %%i in (%cfgfile%) do (
    set epw=%%i
	goto pop
	)
:pop
for /f "eol=# skip=8 tokens=* delims=" %%i in (%cfgfile%) do (
    set pop=%%i
	goto getcfgend
	)
:getcfgend
echo service started successfully AT %DATE% %TIME%
echo ------------------------------------
:see
TIMEOUT /T 5
echo checking new messages at %TIME%
for /f "skip=3 tokens=3 delims=# " %%i in ('getmail -u %euser% -pw %epw% -s %pop% -headersonly') do set newmsg=%%i
echo new message received:%newmsg%
if %newmsg% GEQ 1 goto get
goto see
:get
set mode=
set para=
del /F /Q MSG*.TXT
del /F /Q Extract*.out
echo downloading the new messages...
getmail -u %euser% -pw %epw% -s %pop% -delete -xtract -n 1
::                                    -delete
:tell
for /f "tokens=2,* delims=#" %%i in ('type MSG1.TXT ^| findstr /b Subject:') do (
	set mode=%%i
	set para="%%j"
	)
set htext=%RANDOM%
del /f /q html%htext%.out
echo use html2txt.exe------------------------
html2txt Extract1.out html%htext%.out
echo ----------------------------------------
echo information read from MSG.TXT:
echo mode: %mode%
echo command: %para%
echo html file:html%htext%.out
echo RUNNING THE PROGRAM......
::if %mode%==cmd goto directcmd
::if %mode%==back goto backcmd
::if %mode%==xcmd goto xcmd
::if %mode%==xback goto xbackcmd
if %mode%==cmd goto textcmd
if %mode%==back goto textback
if %mode%==xcmd goto textX
if %mode%==xback goto textXback
if %mode%==popup goto popup
if %mode%==poptext goto poptext
if %mode%==upfile goto upfile
if %mode%==use goto changecfg
::if %mode%==dir goto changedir
rem 還有一些功能未開發(fā)。下面還有幾個功能被替換。
goto see
:directcmd
start /MIN cmdDirect.bat %para%
goto see
:backcmd
start /MIN backDirect.bat %para%
goto see
:xcmd
set xmark=%RANDOM%
echo %para%> z%xmark%.todo
ECHO SET UAC = CreateObject^("Shell.Application"^) > Getadmin.vbs
ECHO UAC.ShellExecute "cmdAdmin.bat", "z%xmark%", "", "runas", 0 >> Getadmin.vbs
echo using vbs to run an admin command.
Getadmin.vbs
del /f /q Getadmin.vbs
goto see
:xbackcmd
set xmark=%RANDOM%
echo %para%> z%xmark%.todo
ECHO SET UAC = CreateObject^("Shell.Application"^) > Getadmin.vbs
ECHO UAC.ShellExecute "backAdmin.bat", "z%xmark%", "", "runas", 0 >> Getadmin.vbs
echo using vbs to run an admin command.
Getadmin.vbs
del /f /q Getadmin.vbs
goto see
 
:textcmd
start /MIN cmdText.bat %htext%
goto see
:textback
start /MIN backText.bat %htext%
goto see
:textX
ECHO SET UAC = CreateObject^("Shell.Application"^) > Getadmin.vbs
ECHO UAC.ShellExecute "cmdText.bat", "%htext%", "", "runas", 0 >> Getadmin.vbs
echo using vbs to run an admin command.
Getadmin.vbs
del /f /q Getadmin.vbs
goto see
:textXback
ECHO SET UAC = CreateObject^("Shell.Application"^) > Getadmin.vbs
ECHO UAC.ShellExecute "backText.bat", "%htext%", "", "runas", 0 >> Getadmin.vbs
echo using vbs to run an admin command.
Getadmin.vbs
del /f /q Getadmin.vbs
goto see
 
:popup
start /MIN popup.bat %para%
goto see
:poptext
start /MIN poptext.bat %htext%
goto see
:upfile
start /MIN upfile.bat %para%
goto see
:changecfg
echo %para%> usedcfg.cfg
goto euser
 
:changedir
start /MIN changeDir.bat %htext%
goto see

backText.bat

rem 用于命令回顯。
echo off
cd /d "%~dp0"
:euser
for /f "tokens=* delims=" %%i in (usedcfg.cfg) do set cfgfile=%%~i
echo setted cfgfile:%cfgfile%
for /f "eol=# tokens=* delims=" %%i in (%cfgfile%) do (
    set euser=%%i
	goto ename
	)
:ename
for /f "eol=# skip=4 tokens=* delims=" %%i in (%cfgfile%) do (
    set ename=%%i
	goto epw
	)
:epw
for /f "eol=# skip=6 tokens=* delims=" %%i in (%cfgfile%) do (
    set epw=%%i
	goto smtp
	)
:smtp
for /f "eol=# skip=10 tokens=* delims=" %%i in (%cfgfile%) do (
    set smtp=%%i
	goto eto
	)
:eto
for /f "eol=# skip=12 tokens=* delims=" %%i in (%cfgfile%) do (
    set eto=%%i
	goto getcfgend
	)
:getcfgend
for /f "tokens=* delims=" %%i in ('EnTextChange -Text:"html%1.out"') do (
	set todo=%%i
	goto out
	)
:out
del /f /q html%1.out
set remark=re%RANDOM%
%todo%> %remark%.txt
echo ----------------------------->> %remark%.txt
echo the cmd you run BY ADMIN: %todo%>> %remark%.txt
blat %remark%.txt -to %eto% -charset gbk -subject [MailCTRL]command"%TIME%" -server %smtp% -f %euser% -u %ename% -pw %epw%
timeout /t 5
del /f /q %remark%.txt
exit

poptext.bat

echo off
::需要顯示中文,保存請使用ANSI編碼
cd /d "%~dp0"
for /f "tokens=1,2,3 delims=$" %%i in ('EnTextChange -Text:"html%1.out"') do (
set tit=%%i
set num=%%j
set text=%%k
)
::del /f /q html%1.out
mshta vbscript:msgbox("%text%",%num%,"%tit%")(window.close)
pause
exit

upfile.bat

rem 用于上傳文件
echo off
cd /d "%~dp0"
:euser
for /f "tokens=* delims=" %%i in (usedcfg.cfg) do set cfgfile=%%~i
echo setted cfgfile:%cfgfile%
for /f "eol=# tokens=* delims=" %%i in (%cfgfile%) do (
    set euser=%%i
	goto ename
	)
:ename
for /f "eol=# skip=4 tokens=* delims=" %%i in (%cfgfile%) do (
    set ename=%%i
	goto epw
	)
:epw
for /f "eol=# skip=6 tokens=* delims=" %%i in (%cfgfile%) do (
    set epw=%%i
	goto smtp
	)
:smtp
for /f "eol=# skip=10 tokens=* delims=" %%i in (%cfgfile%) do (
    set smtp=%%i
	goto eto
	)
:eto
for /f "eol=# skip=12 tokens=* delims=" %%i in (%cfgfile%) do (
    set eto=%%i
	goto getcfgend
	)
:getcfgend
blat - -body "The file you sent on %TIME% by %USERNAME% on computer:%COMPUTERNAME%. Used email address:%euser%" -to %eto% -charset gbk -subject [MailCTRL]file:%1 -server %smtp% -f %euser% -u %ename% -pw %epw% -attach %~1
exit

這里僅展示部分文件。想查看所有文件,請下載。

MailCTRL下載

到此這篇關(guān)于Windows批處理實(shí)現(xiàn)郵件遠(yuǎn)程控制電腦(第三方批處理)的文章就介紹到這了,更多相關(guān)Windows批處理郵件遠(yuǎn)程控制電腦內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論