使用PHP开关RDP服务(远程桌面)和网络适配器

简介

总所周知,windows的3389端口是个危险端口,开启后容易被爆破密码,但有时候为了运维方便,又不得不开启。本文给出一段使用PHP开启和关闭RDP服务的代码供参考。使用以下代码,可以在不需要RDP服务时关闭RDP,需要时再打开。

开关RDP服务

原理

开启和关闭远程桌面,是通过修改注册表来实现的。当HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server中的fDenyTSConnections的值为1时,表示关闭了远程桌面,为0时表示开启。
只需要通过PHP来修改注册表即可。

PHP代码

<?php
function openRdp()
{

    $cmd = "REG query \"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\" /v fDenyTSConnections";
    exec($cmd,$output, $return_val);
    if(strstr($output['2'],'0x0')!==false){
        //已开启状态
    }else{
        //已关闭状态
        $cmd = "REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal\" \"Server /v fDenyTSConnections /t REG_DWORD /d 0 /f  2>&1";
        exec($cmd,$output, $return_val);
        if($return_val!=0){
            $data['code'] = 1;
            $data['error'] = $output[0];
            echo json_encode($data);exit();
        }
    }
    $data['code'] = 0;
    echo json_encode($data);exit();
}

function stopRdp()
{
    $cmd = "REG query \"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\" /v fDenyTSConnections";
    exec($cmd,$output, $return_val);
    if(strstr($output['2'],'0x0')!==false){
        //已开启状态
        for($i=0;$i<=10;$i++){
            $cmd = "ECHO Y|logoff {$i}";
            exec($cmd);
        }
        $cmd = "REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal\" \"Server /v fDenyTSConnections /t REG_DWORD /d 1 /f  2>&1";
        exec($cmd,$output, $return_val);
        if($return_val!=0){
            $data['code'] = 1;
            $data['error'] = $output[0];
            echo json_encode($data);exit();
        }
    }else{
        //已关闭状态
    }
    $data['code'] = 0;
    echo json_encode($data);exit();
}

$action = $_GET['action'];
if($action == 'open'){
    openRdp();
    exit();
}
if($action == 'stop'){
    stopRdp();
    exit();
}
echo 'wait';

开关网络适配器

在突发情况,需要立即停掉网络(拔掉网线)时,可以使用以下代码来达到断网的目的:

查询网络适配器名称

netsh interface show interface

禁用网络适配器

netsh interface set interface "以太网" disable

启用网络适配器

netsh interface set interface "以太网" enable

PHP代码

function openNetWork()
{
    $cmd = "netsh interface set interface \"以太网\" enable";
    exec($cmd,$output, $return_val);
    if($return_val!=0){
        $data['code'] = 1;
        $data['error'] = $output[0];
        echo json_encode($data);exit();
    }

    $cmd = "schtasks  /Delete  /tn  opennetWork /f";
    exec($cmd);
    $data['code'] = 0;
    echo json_encode($data);exit();
}
function stopNetWork()
{
    //添加定时任务(1分钟后开启网络)
    if(!file_exists('C:\Windows\System32\openNetwork.bat')){
        $content = <<<CODE
@echo off
echo ****************************************
echo 开启网络
echo ****************************************
:: 开启网络
netsh interface set interface "以太网" enable
:: 删除计划任务
schtasks  /Delete  /tn  opennetWork /f

echo 已开启!       
CODE;
        $content = iconv("UTF-8","gbk//TRANSLIT",$content);
        file_put_contents('C:\Windows\System32\openNetwork.bat',$content);
    }

    $time = date('H:i:s',strtotime('+1 minute'));
    $cmd = "schtasks  /create  /tn  opennetWork /tr  C:/Windows/System32/openNetwork.bat  /f /RU System /sc  ONCE /st  ".$time;
    exec($cmd);

    //关闭网络
    $cmd = "netsh interface set interface \"以太网\" disable";
    exec($cmd,$output, $return_val);
    if($return_val!=0){
        $data['code'] = 1;
        $data['error'] = $output[0];
        echo json_encode($data);exit();
    }


    $data['code'] = 0;
    echo json_encode($data);exit();
}
$action = $_GET['action']?:$_SERVER['argv'][1];
if($action == 'open'){
    openNetWork();
    exit();
}
if($action == 'stop'){
    stopNetWork();
    exit();
}
echo 'wait';

关闭ssh服务

Linux服务器,可以通过关闭ssh服务来提高安全性。如果你安装了宝塔面板,可以直接在宝塔面板中的“安全”菜单关闭,也可以通过命令来关闭。需要注意的是关闭后,你将不能通过ssh的方式登录服务器。

查看你的linux服务器版本:

cat /etc/redhat-release

如果是centos7、centos8 或 Fedora,通过如下命令关闭:

systemctl stop sshd.service

其他版本使用如下命令关闭:

/etc/init.d/sshd stop

发表评论

邮箱地址不会被公开。 必填项已用*标注