<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roman Madaev</title>
    <description>The latest articles on DEV Community by Roman Madaev (@m-o-z-z-i-x).</description>
    <link>https://dev.to/m-o-z-z-i-x</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2985385%2F9cad0e52-d229-46a2-b9b7-80a5a607ee22.jpg</url>
      <title>DEV Community: Roman Madaev</title>
      <link>https://dev.to/m-o-z-z-i-x</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/m-o-z-z-i-x"/>
    <language>en</language>
    <item>
      <title>I Made REGENT: An MCP Server for Configuring OpenWrt Routers Through an AI</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Tue, 28 Jul 2026 22:09:03 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/i-made-regent-an-mcp-server-for-configuring-openwrt-routers-through-an-ai-2j62</link>
      <guid>https://dev.to/m-o-z-z-i-x/i-made-regent-an-mcp-server-for-configuring-openwrt-routers-through-an-ai-2j62</guid>
      <description>&lt;p&gt;A while ago my own OpenWrt router simply stopped passing traffic, and everything in the web interface looked perfectly fine. It took me a whole afternoon to find the cause: four separate misconfigurations, each enough to stop traffic on its own, none of them visible on the page where I had set them up&lt;/p&gt;

&lt;p&gt;This became the reason for creating REGENT — a server that lets an AI read the entire router at once, tell you what is actually broken, and fix it in plain language, without ever touching the command line yourself&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;REGENT&lt;/strong&gt; is an &lt;strong&gt;MCP server&lt;/strong&gt; that hands an AI controlled root access to an OpenWrt router. You describe what the network should do in ordinary words, and it works out which &lt;code&gt;uci&lt;/code&gt; and &lt;code&gt;ubus&lt;/code&gt; commands that takes, in which order, and which service has to reload before the change means anything. It handles ordinary OpenWrt configuration across network, Wi-Fi, firewall, packages and services, and goes deepest on the routed client mode scenario, where the router joins an upstream Wi-Fi network and shares that connection onward with the VPN and ad-blocking the upstream cannot provide&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;REGENT speaks the Model Context Protocol over stdin and stdout, so the AI client spawns it directly and no network ports are ever opened. It holds a single reused SSH session to the router and turns natural-language intent into ordered &lt;code&gt;uci&lt;/code&gt;, &lt;code&gt;ubus&lt;/code&gt; and &lt;code&gt;opkg&lt;/code&gt; calls. Rather than dumping the raw configuration, its topology tool reads the whole router in one pass and names the specific misconfigurations that leave a router looking healthy while nothing works&lt;/p&gt;

&lt;p&gt;Every change is guarded on two fronts. A three-level access gate keeps reading always available, while writes need an explicit gate and destructive actions need a separate confirmation on each call. And before any risky change, the configuration is snapshotted and a deferred restore is armed on the router itself — if connectivity is confirmed afterwards the restore is cancelled, and if it is not, the router puts itself back on its own&lt;/p&gt;

&lt;p&gt;Example diagnosis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UPLINK   wwan via phy1-sta0, 192.168.1.4/24, gateway 192.168.1.1
SERVES   lan  192.168.1.1/24   DHCP OFF
AP       HomeNet  2.4 GHz  →  wwan2

WARNINGS 4
  ! lan is on the same subnet as the uplink — the gateway resolves to
    this router itself and nothing routes out
  ! access point HomeNet is attached to 'wwan2', which is not up
  ! dhcp is not serving lan — clients must be configured by hand
  ! the uplink sits in zone lan, which does not masquerade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Natural-Language Configuration&lt;/strong&gt;&lt;br&gt;
Say what the network should do, and REGENT works out the exact &lt;code&gt;uci&lt;/code&gt; and &lt;code&gt;ubus&lt;/code&gt; commands, their order, and the service reload each one needs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Diagnosis, Not a Dump&lt;/strong&gt;&lt;br&gt;
Its topology tool reads the whole configuration in one call and reports what is broken and why it stops traffic, instead of a listing to interpret by hand&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Whole Recipes&lt;/strong&gt;&lt;br&gt;
Composite intents like "share the uplink with clients" run as one ordered change across several config files, so the AI never has to reassemble the steps itself&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Watchdog Rollback&lt;/strong&gt;&lt;br&gt;
Before a risky change the router is snapshotted and a restore is armed on the device itself, so a change that severs your own connection is undone automatically&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Three Levels of Access&lt;/strong&gt;&lt;br&gt;
Reading always works, changing needs the write gate open, and rebooting, flashing or resetting need the gate plus a separate confirmation on each call&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secrets Stay In&lt;/strong&gt;&lt;br&gt;
Wi-Fi passwords, VPN keys and subscription links are stripped before anything reaches the model, the command log, or the system log&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;apk Support&lt;/strong&gt; — package handling on OpenWrt 24.10 and newer, where &lt;code&gt;opkg&lt;/code&gt; became &lt;code&gt;apk&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wider Device Coverage&lt;/strong&gt; — verification beyond the single TP-Link Archer C59 confirmed so far&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Guest Network&lt;/strong&gt; — a separate isolated Wi-Fi brought up in one intent&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/REGENT" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/REGENT&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>python</category>
      <category>openwrt</category>
    </item>
    <item>
      <title>I Made NR34P3R: Fast Multi-Threaded Port Scanner for Detecting Open Ports &amp; Services</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Sun, 22 Jun 2025 01:52:34 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/nr34p3r-a-fast-multi-threaded-port-scanner-for-detecting-open-ports-and-services-2d0</link>
      <guid>https://dev.to/m-o-z-z-i-x/nr34p3r-a-fast-multi-threaded-port-scanner-for-detecting-open-ports-and-services-2d0</guid>
      <description>&lt;p&gt;A few months ago I found myself in need of a lightweight port scanner that could deliver actionable insights quickly without bloating system resources or drowning me in irrelevant data. Existing tools felt either too bulky or too barebones, so I decided to build something new — NR34P3R , a fast, multi-threaded port scanner with an intuitive terminal interface and smart service detection&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;NR34P3R is a modern port scanner designed to help security professionals and sysadmins detect open ports and identify associated services with precision. It supports multi-threaded scanning for maximum efficiency, automatically resolves over 3000 service names, and presents results in a clean, color-coded format using Rich tables&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw43moiko4vamzbnoysdr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw43moiko4vamzbnoysdr.gif" alt="Demo" width="760" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;NR34P3R uses a modular scanning engine that leverages Python's socket library and advanced concurrency. You define a target host and specify a port range — single ports, custom ranges (80-443), or full-range scans (1-65535). The scanner then sends asynchronous requests and collects responses, resolving service names and descriptions from its built-in database&lt;/p&gt;

&lt;p&gt;When a port is found open, NR34P3R automatically fetches service metadata including protocol, description, and known vulnerabilities (if available), giving you immediate context for further investigation&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ultra-Fast Multi-threaded Scanning&lt;/strong&gt;&lt;br&gt;
Supports up to 100 concurrent threads for lightning-fast scans across large port ranges&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rich Service Database&lt;/strong&gt;&lt;br&gt;
Automatically identifies over 3000 services with detailed descriptions powered by WikiLess integration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Colorful Terminal UI&lt;/strong&gt;&lt;br&gt;
Interactive output with live progress bars, syntax highlighting, and adaptive formatting via Colorama and Rich&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Structured Results&lt;/strong&gt;&lt;br&gt;
Displays findings in organized tables showing port number, service name, status, and description&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexible Scanning Options&lt;/strong&gt;&lt;br&gt;
Supports single ports, custom ranges, or full-range scans from 1 to 65535&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ASN Lookup&lt;/strong&gt; — Identify network ownership for scanned hosts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;JSON Reporting&lt;/strong&gt; — Export scan results for documentation and analysis&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ping Sweep&lt;/strong&gt; — Check host availability before scanning&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Port Test Tool&lt;/strong&gt; — Verify specific port configurations and firewall rules&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/NR34P3R" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/NR34P3R&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>python</category>
      <category>security</category>
      <category>scanner</category>
    </item>
    <item>
      <title>I Made CR4SH3R: Tool for Automating Vulnerability Detection in WordPress Plugins</title>
      <dc:creator>Roman Madaev</dc:creator>
      <pubDate>Sun, 22 Jun 2025 01:38:36 +0000</pubDate>
      <link>https://dev.to/m-o-z-z-i-x/cr4sh3r-tool-for-detecting-vulnerabilities-in-wordpress-plugins-15a7</link>
      <guid>https://dev.to/m-o-z-z-i-x/cr4sh3r-tool-for-detecting-vulnerabilities-in-wordpress-plugins-15a7</guid>
      <description>&lt;p&gt;A couple of months ago, I came across a WordPress site that needed a quick security check for obvious vulnerabilities. It all started with routine work: standard checks, searching for known CVEs, and inspecting popular plugins. But what I found made me think more seriously — critical Arbitrary File Download vulnerabilities in several plugins that allowed access to wp-config.php with just a few requests&lt;/p&gt;

&lt;p&gt;This became the reason for creating CR4SH3R — a simple yet powerful tool designed to automate the detection of such vulnerabilities within the WordPress ecosystem&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;CR4SH3R is a GUI utility designed to scan websites for Arbitrary File Download vulnerabilities in WordPress plugins. Its main purpose is to detect paths through which the wp-config.php file can be downloaded, and automatically extract sensitive information from it — such as database login credentials and other important parameters&lt;/p&gt;

&lt;h2&gt;
  
  
  Screenshots
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrkghwg3qg7luctvekjs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrkghwg3qg7luctvekjs.jpg" alt="Pic. 1" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqneql2bh9emu3mgq9zm8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqneql2bh9emu3mgq9zm8.jpg" alt="Pic. 2" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;The scanner uses a pre-prepared list of potentially vulnerable URL paths and sends HTTP requests to the target domain. If the server returns the contents of the wp-config.php file, the program parses it and displays only the relevant data. There’s also an option to save results in .xlsx format&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example payload:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;/wp-content/plugins/vulnerable-plugin/download.php?file=../../../../wp-config.php&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-threaded Scanning&lt;/strong&gt;&lt;br&gt;
Fast scanning using concurrent request processing. Supports up to 10 simultaneous checks&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automatic Data Extraction from wp-config.php&lt;/strong&gt;&lt;br&gt;
If the file is found, CR4SH3R automatically extracts values like:&lt;br&gt;
&lt;code&gt;DB_NAME&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_USER&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_PASSWORD&lt;/code&gt;&lt;br&gt;
&lt;code&gt;DB_HOST&lt;/code&gt;&lt;br&gt;
&lt;code&gt;table_prefix&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Excel (.xlsx) Report Generation&lt;/strong&gt;&lt;br&gt;
All findings are saved in a structured and easy-to-share format&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simple GUI Interface&lt;br&gt;
Built using PyQt5 for user-friendly interaction&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Roadmap:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Auto-updater&lt;/strong&gt; — built-in version checker&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Config Presets&lt;/strong&gt; — save and load frequently used scan settings&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Session History&lt;/strong&gt; — track previous scans with timestamps and results&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Encrypted .env File&lt;/strong&gt; — prevent plaintext exposure when bundled into binaries&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Repository Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/m-o-z-z-i-x/CR4SH3R" rel="noopener noreferrer"&gt;https://github.com/m-o-z-z-i-x/CR4SH3R&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>python</category>
      <category>security</category>
      <category>scanner</category>
    </item>
  </channel>
</rss>
