如何监听3389端口,生成jar包并打包成bat文件去监听系统的远程用户连接信息,实现修改系统的密码

一、创建工程生成bat文件,idea中File->Project Structure

二、监听3389远程端口方法

package com.company;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.Date;
import java.util.concurrent.atomic.AtomicBoolean;

public class MonitorLink {
    public static void monitorLink(AtomicBoolean flag,AtomicBoolean rFlag,RequestData requestData){

        String logFilePath = "log.txt";

        try {
            //查询正在会话的用户信息
            Process processes = Runtime.getRuntime().exec("query session");
            BufferedReader readers = new BufferedReader(new InputStreamReader(processes.getInputStream()));
            String lineOne;
            String lines = null;
            while ((lineOne = readers.readLine()) != null) {
                lines += lineOne;
            }

            //是否存在唯一用户在使用端口3389(是否正在与3389端口开启会话)
            if (lines.contains("#")) {
                ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "netstat -ano | findstr :3389");
                processBuilder.redirectErrorStream(true);
                Process process = processBuilder.start();

                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.trim().startsWith("TCP")) {
                        String[] parts = line.trim().split("\\s+");
                        String localAddress = parts[1];
                        String foreignAddress = parts[2];
                        String state = parts[3];


                        //隔离机IP
                        InetAddress localHost = InetAddress.getLocalHost();
                        requestData.setLocalIP(localHost.getHostAddress());

                        //远程连接IP
                        String foreignIP = foreignAddress.split(":")[0];
                        //String foreignPort = foreignAddress.split(":")[1];

                        //是否建立远程连接
                        if (state.equals("ESTABLISHED")) {
                            // 获取远程主机名
                            InetAddress inetAddress = InetAddress.getByName(foreignIP);
                            requestData.setHostName(inetAddress.getHostName());
                            requestData.setLocalName(InetAddress.getLocalHost().getHostName());

                            //跟上一次比远程连接的IP不同
                            if(!requestData.getForeignIP().equals(foreignIP)){
                                requestData.setToken(TokenRequestSender.getToken());
                                //当前远程用户被管理员挤掉,发送当前远程用户的断开信息
                                RemoveIpState.removeIpState(requestData.getLocalIP(),requestData.getForeignIP(),requestData.getToken(),requestData.getTotal());
                                //requestData.setTotal(0);
                                //被挤掉后设置发送标识(只允许发送一次)
                                flag.set(true);
                                //记录正在使用的远程用户ip
                                requestData.setForeignIP(foreignIP);
                                if(flag.get()==true){
                                    flag.set(false);
                                    rFlag.set(false);
                                    //发送远程连接信息从am.fuyaogroup.com获取密码
                                    HttpRequestSender.sendRequest(requestData);
                                }
                            }else{
                                if(flag.get()==true){
                                    //远程用户ip相同时设置发送标识(只允许发送一次)
                                    requestData.setToken(TokenRequestSender.getToken());
                                    flag.set(false);
                                    rFlag.set(false);
                                    //发送远程连接信息从am.fuyaogroup.com获取密码
                                    HttpRequestSender.sendRequest(requestData);
                                }
                            }
                        }
                    }
                }
                process.waitFor();
            }
            //断开远程连接时
            if (!lines.contains("#")) {
                //设置发送标识(只允许发送一次)
                if(rFlag.get()==false){
                    flag.set(true);
                    rFlag.set(true);
                    //发送断开信息到数据库将隔离机置为空闲
                    RemoveIpState.removeIpState(requestData.getLocalIP(),requestData.getForeignIP(),TokenRequestSender.getToken(),requestData.getTotal());
                    //requestData.setTotal(0);
                }
            }
        }catch (Exception e){
            String txtContent = "MonitorLink.java>>>>>>>>\t"+ "Exception:" + e.toString() + "\t" + "日期:" + new Date() + "\n";
            Log.registerLog(txtContent,logFilePath);
        }
    }
}

修改系统的用户密码
package com.company;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Date;

public class ChangeWindowsPassword {

    public static void changeWindowsPassword(String ip,String token,String newPassword){
        // 创建日志文件(如果文件不存在)
        String logFilePath = "log.txt";
        String content = "";

        try {
            // 构建命令(管理员身份运行)
            String command = "cmd /c net user admin " + newPassword;

            // 执行命令
            Process process = Runtime.getRuntime().exec(command);

            // 等待命令执行完成
            process.waitFor();

            // 输出命令执行结果
            int exitValue = process.exitValue();
            //执行修改密码命令,代码返回为0 ,说明成功
            if (exitValue == 0) {
               
            } else {
              
            }

        } catch (Exception e) {
            e.printStackTrace();
            content = "ChangeWindowsPassword.java>>>>>>>>\t" + "Exception:\t"+e.toString() + "日期:" + new Date() + "\n";
            Log.registerLog(content,logFilePath);

        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值