Automatically flush IP addresses from ControlD Endpoint device logs in Legacy mode.
// ==UserScript==
// @name ControlD IP Flusher
// @description Automatically flush IP addresses from ControlD Endpoint device logs in Legacy mode.
// @author @T3SL4
// @namespace https://github.com/0x11DFE
// @version 05/12/24
// @license MIT
// @icon https://i.imgur.com/I7yP7HH.jpeg
// @icon64 https://i.imgur.com/Ec7CwUP.jpeg
// @match *://controld.com/dashboard/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
/**
* This script automates the removal of IP address entries from
* the Endpoint device logs in ControlD's Legacy DNS resolver mode.
*
* ControlD, a powerful DNS management service, offers a Legacy mode
* for older devices that may not support modern DNS protocols. In this mode,
* ControlD logs the IP addresses of devices making DNS queries. This script
* helps you automatically clear these logs by continuously checking for
* new IP address entries on the ControlD page and deleting them.
*
* Why is this useful?
* - Privacy: Regularly flushing IP logs can help maintain privacy by
* reducing the amount of historical data stored.
* - Troubleshooting: Clearing logs can be helpful when diagnosing network
* issues or testing new configurations.
*
* IMPORTANT: This script is specifically designed for ControlD's Legacy
* DNS resolver mode with the "Auto Authorize IP" feature enabled.
* Ensure you have this configuration before running the script.
*
* In order for this script to function correctly, you must first navigate
* to the "Endpoint Devices" tab within ControlD and click into the specific
* device's "IPs" section. This will allow the script to continuously monitor
* and clear the IP address entries for that device.
*
* Disclaimer: This script is provided as-is and may require adjustments
* based on the specific structure of the ControlD webpage. Use it responsibly
* and at your own risk.
*/
// Function to simulate a click on an element with an optional delay
const clickElement = (selector, delay = 0) => {
setTimeout(() => {
const element = document.querySelector(selector);
if (element) {
element.click();
} else {
console.error(`Element not found: ${selector}`);
}
}, delay);
};
const deleteIPs = () => {
// Select all IP address elements
const ipButtons = document.querySelectorAll("[aria-label='select ip']");
if (ipButtons.length > 0) {
// Select all IP addresses
ipButtons.forEach(btn => btn.click());
// Click the delete button after a short delay
clickElement("[aria-label='delete ips button']", 500); // .5s
// Click the confirmation button after another delay
clickElement("[aria-label='confirm delete ip button']", 500); // .5s
} else {
// No IP addresses found, check again after a delay
setTimeout(deleteIPs, 5000); // Check every 5s
}
};
// Start the process
deleteIPs();
})();