简介
总所周知,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