关于个人pc开放公网端口的安全问题

作者:director

前段时间了解到了开放rpc服务端口会被恶意扫描,如果是弱口令安全性令人担忧,如果使用强密码又不太方便想了如下的解决方案来解决此问题:

第一:

非远程的平时使用pin进行登陆,设置弱口令, 因为pin不可用于远程。

第二:

编写脚本来不断修改windows的密码:

脚本如下:

  1. 使用Python脚本: Python脚本可以用来生成新密码,运行Windows命令行工具修改密码,并将新密码写入文本文件。
  2. 使用Windows命令行工具: 可以使用net user命令来修改Windows账户的密码。
  3. 定时任务: 使用Python的定时功能,例如time.sleep,来使脚本每20分钟运行一次。
  4. 安全性考虑: 自动更改密码并将其存储在文本文件中可能会带来安全风险,因此请确保这个脚本在一个安全的环境中运行,并且文本文件得到适当的保护。
import os
import time
import random
import string

def generate_password(length=10):
    characters = string.ascii_letters + string.digits
    return ''.join(random.choice(characters) for i in range(length))

def change_password(username, password):
    os.system(f'net user {username} {password}')

def write_password_to_file(password, file_path):
    with open(file_path, 'a') as file:
        file.write(f'{time.strftime("%Y-%m-%d %H:%M:%S")} - {password}\n')

def main():
    username = '你的用户名'
    file_path = 'D:\\passwords.txt'

    while True:
        new_password = generate_password()
        change_password(username, new_password)
        write_password_to_file(new_password, file_path)
        time.sleep(1200)  # 等待20分钟

if __name__ == '__main__':
    main()

 

  • 这个脚本需要以管理员权限运行。
  • 请确保脚本的安全性,避免密码泄露。
  • 你需要替换username变量的值为你的Windows用户名。
  • 修改密码可能会导致系统安全问题或访问问题,确保你了解这一行为的后果。

使用管理员权限运行后即可以,然后使用p2p协议的工具对于密码进行传输,也就是同步到你个人的手机上,这样就可以完美解决密码不安全的问题了,

使用resilio sync即可以实现,注意间断时间设置大一点,最好1h以上,否则p2p可能会传输延迟。

也可以使用弱口令来当作生成的密码 。因为暴力撞出密码(哪怕是弱口令)也需要不短的时间,密码是动态就可以避免这个问题了。

以上是个人的想法不知是否还有漏洞,请各位指教。

此脚本也可以使用bat或者java等其他语言进行编写,我使用的是java版本的:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class PasswordChanger {

    private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    private static final int PASSWORD_LENGTH = 10;
    private static final long INTERVAL = 20 * 60 * 1000; // 20分钟
    private static final String USERNAME = "你的用户名";
    private static final String FILE_PATH = "D:\\passwords.txt";

    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                String newPassword = generatePassword();
                changePassword(USERNAME, newPassword);
                writePasswordToFile(newPassword, FILE_PATH);
            }
        }, 0, INTERVAL);
    }

    private static String generatePassword() {
        Random random = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < PASSWORD_LENGTH; i++) {
            sb.append(CHARACTERS.charAt(random.nextInt(CHARACTERS.length())));
        }
        return sb.toString();
    }

    private static void changePassword(String username, String password) {
        try {
            Runtime.getRuntime().exec("net user " + username + " " + password);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void writePasswordToFile(String password, String filePath) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(filePath, true))) {
            writer.write(password + "\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}