RustDesk
C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\db.sqlite3
Kiểm tra số kết nối: netstat -n | find ":21116" /c
Public key:
INvJRTAfmuba7KnDXVbdcmlezAFjprazni76HV0+tEM=
Build phien bản===========
cd /d D:\rustdesk-master
cargo build --release
=================
Dear RustDesk Customer
Thank you for purchasing a rustdesk license!
License: pnmYAev3o3GREkFiKoYQCQ==
Type: Individual
Please keep this email or license information safe, you will run your RustDesk server with this license.
Sincerely,
The RustDesk Team.
======================= Code copy/Paste danh sach vào
javascript:(async () => {
const rawIDs = prompt("Dán danh sách ID học viên (cách nhau bằng dấu phẩy hoặc xuống dòng):");
if (!rawIDs) return;
const activeIDs = rawIDs.split(/[\s,]+/).map(id => id.trim()).filter(id => id);
const rows = document.querySelectorAll('tr');
let count = 0;
for (const row of rows) {
/* Tìm ID trong tất cả các ô của hàng đó */
const rowText = row.innerText;
const matchID = activeIDs.find(id => rowText.includes(id));
const buttons = Array.from(row.querySelectorAll('a, button, span'));
const enableBtn = buttons.find(el => el.textContent.trim().toLowerCase() === 'enable');
const disableBtn = buttons.find(el => el.textContent.trim().toLowerCase() === 'disable');
if (matchID) {
if (enableBtn) {
enableBtn.click();
count++;
await new Promise(r => setTimeout(r, 600));
}
} else {
if (disableBtn) {
disableBtn.click();
await new Promise(r => setTimeout(r, 600));
}
}
}
alert("Hoàn tất! Đã ưu tiên " + count + " học viên.");
})();
================Chon file
javascript:(async () => {
/* 1. Tạo ô chọn file danh-sach.txt */
const input = document.createElement('input');
input.type = 'file';
input.accept = '.txt';
input.onchange = e => {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = async (event) => {
const content = event.target.result;
/* 2. Tách danh sách ID từ file (lấy phần sau dấu :) */
const activeIDs = content.split('\n')
.filter(line => line.includes(':'))
.map(line => line.split(':')[1].trim().replace(/\D/g, ''));
if (activeIDs.length === 0) {
alert("Không tìm thấy ID nào hợp lệ trong file!");
return;
}
console.log("Đang ưu tiên các ID:", activeIDs);
/* 3. Duyệt qua các hàng trên Web Console */
const rows = document.querySelectorAll('tr');
let enabledCount = 0;
let disabledCount = 0;
for (const row of rows) {
const rowText = row.innerText;
/* Tìm xem dòng này có chứa ID nào trong danh sách file không */
const isHocVienHomNay = activeIDs.find(id => rowText.includes(id));
const buttons = Array.from(row.querySelectorAll('a, button, span'));
const enableBtn = buttons.find(el => el.textContent.trim().toLowerCase() === 'enable');
const disableBtn = buttons.find(el => el.textContent.trim().toLowerCase() === 'disable');
if (isHocVienHomNay) {
/* Nếu có trong file -> Bấm Enable */
if (enableBtn) {
enableBtn.click();
enabledCount++;
await new Promise(r => setTimeout(r, 600)); /* Nghỉ 0.6s tránh nghẽn server */
}
} else {
/* Nếu không có trong file -> Bấm Disable để nhường chỗ */
if (disableBtn) {
disableBtn.click();
disabledCount++;
await new Promise(r => setTimeout(r, 600));
}
}
}
alert("HOÀN TẤT!\n- Đã Enable: " + enabledCount + " máy học viên.\n- Đã Disable: " + disabledCount + " máy khác để trống slot.");
};
reader.readAsText(file);
};
input.click();
})();