DR HACK

Davide Rosa Hack

CMDgui

CMDgui

Interfaccia grafica (WinForms, .NET 10) per i principali comandi shell di Windows — ping, tracert, pathping, ipconfig, nslookup, netstat, arp, route, tasklist, systeminfo, netsh wlan, robocopy — con output in tempo reale e vista parsificata dei risultati.

Caratteristiche

  • Menu comandi: selezionando una voce dal menu si apre una nuova tab indipendente per quel comando.
  • Esecuzioni multiple in parallelo: si possono aprire più tab dello stesso comando contemporaneamente (es. due ping verso host diversi).
  • Output in tempo reale: ogni tab mostra l'output grezzo del comando non appena viene prodotto, oltre a una vista strutturata (tabella o riepilogo) aggiornata via via che il comando gira.
  • Output grezzo collassabile: la sezione di testo grezzo si trova in basso in ogni tab e può essere nascosta/mostrata con un pulsante, per lasciare più spazio alla vista parsificata.
  • Anteprima del comando: tra i parametri e la tabella dei risultati, ogni tab mostra una casella di testo in sola lettura con l'anteprima esatta del comando che verrà eseguito (eseguibile + argomenti); si aggiorna automaticamente a ogni modifica delle opzioni, prima ancora di premere "Avvia".
  • Icona applicativa coerente: l'app usa un'icona personalizzata a tema terminale/prompt (Assets/AppIcon.ico), impostata sia come icona dell'eseguibile sia come icona della finestra principale.
  • Comandi supportati:
    • Ping — host, numero pacchetti, modalità continua (-t), timeout, più una sezione "Opzioni avanzate" collassabile con tutte le altre opzioni di ping.exe (-a -l -f -i -v -r -s -j -k -R -S -c -p -4 -6, con mutua esclusione tra -4/-6 e tra -j/-k); tabella delle risposte, grafico a linea del tempo di risposta (asse X = numero della richiesta, asse Y = tempo in ms) e riepilogo (pacchetti persi, tempi min/max/media).
    • Tracert — host, numero massimo di hop, timeout, più una sezione "Opzioni avanzate" collassabile (-d -j -R -S -4 -6, con mutua esclusione tra -4/-6); tabella hop-by-hop con i tre tempi e l'indirizzo di ciascun passaggio.
    • Pathping — host, numero massimo di hop, numero di query per hop, timeout, più una sezione "Opzioni avanzate" collassabile (-n -p -i -g -4 -6, con mutua esclusione tra -4/-6); tabella hop-by-hop con RTT e percentuali di perdita (da origine e per singolo nodo/collegamento).
    • Ipconfig — opzioni /all e /allcompartments; elenco degli adattatori di rete con indirizzo IPv4, subnet mask e gateway predefinito; azioni rapide indipendenti Pulisci cache DNS (/flushdns), Mostra cache DNS (/displaydns) e Registra DNS (/registerdns).
    • Nslookup — nome host, server DNS opzionale, tipo di record DNS (-type=: A, AAAA, MX, NS, CNAME, TXT, PTR, ANY); server DNS interrogato e indirizzi risolti.
    • Netstat — opzioni -a -n -o -b -f e filtro protocollo (TCP/UDP); tabella delle connessioni/socket con protocollo, indirizzo locale ed esterno, stato e PID.
    • Arp — filtro opzionale per indirizzo IP, filtro opzionale per indirizzo interfaccia (-N) e modalità dettagliata (-v); tabella della cache ARP con indirizzo IP, indirizzo fisico, tipo e interfaccia.
    • Route — filtro famiglia indirizzi (IPv4/IPv6/tutte, route print) e filtro opzionale per pattern di destinazione; tabella della route table IPv4 (indirizzo rete, mask, gateway, interfaccia, metrica).
    • Tasklist — elenco dei processi in esecuzione (nome immagine, PID, sessione, memoria) con filtro opzionale per nome immagine (/FI) e azione Termina processo selezionato che esegue taskkill /PID <pid> /F e aggiorna automaticamente l'elenco.
    • Systeminfo — riepilogo di sistema (host, SO, hardware, memoria, tempo di avvio, ecc.) mostrato come tabella proprietà/valore.
    • Wlan (netsh) — due modalità: Stato interfaccia (netsh wlan show interfaces, tabella proprietà/valore con nome, stato, SSID connesso, segnale, ecc.) e Reti disponibili (netsh wlan show networks mode=bssid, tabella delle reti Wi-Fi visibili con SSID, segnale, banda, canale, autenticazione, crittografia e BSSID).
    • Robocopy — cartella di origine/destinazione (con selezione da finestra di dialogo), pattern file, opzioni di base sempre visibili e una sezione "Opzioni avanzate" collassabile (-S -E /MIR /MOV /L /V, tentativi /R e attesa /W con valori predefiniti ridotti rispetto a quelli nativi per evitare attese eccessive, copia multithread /MT); tabella delle operazioni file/directory (tipo, dimensione, percorso) e riepilogo finale (directory, file e byte totali/copiati/ignorati/non riusciti). Le opzioni distruttive (/MIR, /MOV) sono chiaramente etichettate; è disponibile anche una modalità di sola simulazione (/L, nessuna modifica reale).
  • Architettura modulare: ogni comando è un modulo indipendente (Modules/<Comando>/); aggiungerne uno nuovo non richiede modifiche al core dell'applicazione (vedi .github/copilot-instructions.md per i dettagli).

Requisiti

Build ed esecuzione

dotnet build CMDgui/CMDgui.csproj
dotnet run --project CMDgui/CMDgui.csproj

In alternativa, aprire CMDgui.slnx in Visual Studio.

Struttura del progetto

CMDgui.slnx              # soluzione
CMDgui/
  Program.cs              # entry point
  FormMain.cs              # finestra principale (menu + tab)
  Core/                    # infrastruttura condivisa dei moduli comando
    ICommandModule.cs
    ICommandParser.cs
    ShellProcessRunner.cs
    CollapsibleOutputPanel.cs
    LineChartControl.cs
    CommandRegistry.cs
  Modules/                 # un modulo per comando (Ping, Tracert, Pathping, Ipconfig, Nslookup, Netstat, Arp, Route, Tasklist, Systeminfo, NetshWlan, Robocopy)
    <Comando>/
      <Comando>Module.cs
      <Comando>Result.cs
      <Comando>OutputParser.cs
      <Comando>Control.cs
  Assets/
    AppIcon.ico            # icona applicativa (eseguibile + FormMain)

Note

  • I comandi vengono eseguiti tramite cmd.exe /c <comando> <argomenti>, catturando stdout/stderr in modo asincrono.
  • Il parsing dell'output dipende dalla lingua del sistema operativo: i parser riconoscono sia etichette italiane sia inglesi (es. Trasmessi/Sent, Minimo/Minimum).
  • Non sono presenti al momento test automatici o pipeline CI.

Estendere l'app con un nuovo comando

  1. Creare una cartella Modules/<Comando>/ con Module, Result, OutputParser e Control seguendo il pattern dei moduli esistenti.
  2. Registrare il nuovo modulo in Core/CommandRegistry.cs.

Per maggiori dettagli architetturali vedere .github/copilot-instructions.md.

Apri il progetto su GitHub

Per il codice sorgente e gli altri progetti visita il profilo GitHub di rsodvd79 .