如何利用139端口來遠程重起NT服務(wù)器

字號:

最近很多朋友問我:NT的機器如果遠程管理軟件壞了,怎么重起呢?其實,如果服務(wù)器的139端口開著,重起是很簡單的,步驟如下:
    1、net use \\xxx.xxx.xxx.xxx\ipc$ password /user:username
    建立一個IPC會話
    2、net use H: \\xxx.xxx.xxx.xxx\c$
    將對方的C盤映射為自己的H盤
    3、copy con h:\reboot.bat
    iisreset /reboot
    CTRL+Z
    在對方的C盤上生成了一個能重啟計算機的文件
    4、net time \\xxx.xxx.xxx.xxx
    得到對方的時間
    5、at \\xxx.xxx.xxx.xxx 重起的時間 c:\reboot.bat
    重起的時間等于對方的時間加幾分鐘
    6、at \\xxx.xxx.xxx.xxx
    看看任務(wù)加上沒有
    7、等......
    上面的第三步是only for WIN2K的,如果是NT,你需要用一個特定的重起程序,我們可以自己編寫一個reboot.exe來取代reboot.bat,原理很簡單,代碼如下:
    #include "stdio.h"
    #include "windows.h"
    int main()
    {
    //定義重起的時候發(fā)送給所有用戶的消息
    LPSTR msg="Reboot Tool By Lion Hook\nhttp://www.xici.net";
    //嘗試用最簡單的API函數(shù)重起
    if(ExitWindowsEx(EWX_REBOOT, 0))return TRUE;
    if(ExitWindowsEx(EWX_REBOOT   EWX_FORCE, 0))return TRUE;
    //因為上面的重起不成功,所以需要調(diào)整本進程的特權(quán)
    HANDLE hToken;
    TOKEN_PRIVILEGES tkp;
    if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES   TOKEN_QUERY, &hToken)) return FALSE;
    //獲取重起的特權(quán)SE_SHUTDOWN_NAME
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
    tkp.PrivilegeCount = 1;
    tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
    //判斷是NT內(nèi)核還是9x內(nèi)核,選擇用不同的方式
    if(!(GetVersion() & 0x80000000))
    InitiateSystemShutdown(NULL, msg, 20, TRUE, TRUE);
    else if (!ExitWindowsEx(EWX_REBOOT, 0))
    if(!ExitWindowsEx(EWX_REBOOT   EWX_FORCE, 0))
    return FALSE;
    return TRUE;
    }