Configurare manualmente il debug del kernel di rete KDNET

Gli strumenti di debug per Windows supportano il debug del kernel in una rete. Questo articolo descrive come configurare manualmente il debug di rete.

Importante

La configurazione manuale di un debug di rete è un processo complesso e soggetto a errori. Per configurare automaticamente il debug di rete, vedere Configurazione automatica del debug del kernel di rete KDNET. L'uso dell'utilità KDNET è fortemente consigliato per tutti gli utenti del debugger.

Il computer che esegue il debugger viene chiamato computer host e il computer sottoposto a debug viene chiamato computer di destinazione. Il computer host deve eseguire Windows 7 o versione successiva e il computer di destinazione deve eseguire Windows 8 o versione successiva.

Il debug in una rete presenta i vantaggi seguenti rispetto al debug su altri tipi di connettività.

  • I computer host e di destinazione possono trovarsi in qualsiasi punto della rete locale.
  • È facile eseguire il debug di molti computer di destinazione da un computer host.
  • Dato qualsiasi due computer, è probabile che abbiano entrambe schede Ethernet. È meno probabile che abbiano entrambe le porte seriali o 1394 porte.
  • Il debug di rete è più veloce rispetto al debug delle porte seriali.

Schede di rete supportate

Il computer host può usare qualsiasi scheda di rete, ma il computer di destinazione deve usare una scheda di rete supportata da Strumenti di debug per Windows. Per un elenco delle schede di rete supportate, vedere Schede di interfaccia di rete Ethernet supportate per il debug del kernel di rete in Windows 10 e schede di interfaccia di rete Ethernet supportate per il debug del kernel di rete in Windows 8.1.

Installare gli strumenti di debug per Windows

Verificare che gli strumenti di debug per Windows siano installati nel sistema host. Per informazioni sul download e l'installazione degli strumenti del debugger, vedere Strumenti di debug per Windows.

Determinare l'indirizzo IP del computer host

Utilizzare una delle procedure seguenti per determinare l'indirizzo IP del computer host.

  1. Nel computer host aprire un prompt dei comandi e immettere il comando seguente:

    ipconfig
    

    Prendere nota dell'indirizzo IPv4 della scheda di rete che si intende usare per il debug.

  2. Nel computer di destinazione aprire un prompt dei comandi e immettere il comando seguente, dove YourIPAddress è l'indirizzo IP del computer host:

    ping -4 <YourIPAddress>
    

Scegliere una porta per il debug di rete

Scegliere un numero di porta per il debug nei computer host e di destinazione. È possibile scegliere qualsiasi numero compreso tra 49152 e 65535. L'intervallo consigliato è 50000 - 50039. La porta scelta viene aperta per l'accesso esclusivo dal debugger in esecuzione nel computer host. Prestare attenzione a scegliere un numero di porta non usato da altre applicazioni eseguite nel computer host.

Nota

L'intervallo di numeri di porta che possono essere usati per il debug di rete potrebbe essere limitato dai criteri di rete dell'azienda. Non c'è modo di indicare dal computer host quali sono le limitazioni. Per determinare se i criteri aziendali limitano l'intervallo di porte che possono essere usate per il debug di rete, rivolgersi agli amministratori di rete.

Se si connettono più computer di destinazione a un singolo computer host, ogni connessione deve avere un numero di porta univoco. Ad esempio, se si connettono 100 computer di destinazione a un singolo computer host, è possibile assegnare la porta 50000 alla prima connessione, alla porta 50001 alla seconda connessione e così via.

Nota

 Un computer host diverso potrebbe usare lo stesso intervallo di porte (da 50000 a 50099) per connettersi a altri 100 computer di destinazione.

Configurare il computer di destinazione

  1. Verificare che nel computer di destinazione sia supportata una scheda di rete. Per altre informazioni, vedi:

  2. Connessione la scheda supportata a un hub di rete o un commutatore usando un cavo di rete appropriato.

Importante

Prima di usare BCDEdit per modificare le informazioni di avvio, potrebbe essere necessario sospendere temporaneamente le funzionalità di sicurezza di Windows, ad esempio BitLocker e Avvio protetto, nel PC di test. Riabilitare queste funzionalità di sicurezza al termine dei test e gestire in modo appropriato il PC di test quando le funzionalità di sicurezza sono disabilitate.

  1. In un prompt dei comandi con privilegi elevati immettere i comandi seguenti, dove w.x.y.z è l'indirizzo IP del computer host e n è un numero di porta desiderato:

    bcdedit /debug on
    
    bcdedit /dbgsettings net hostip:w.x.y.z port:n
    
  2. BCDEdit visualizza una chiave generata automaticamente. Copiare la chiave e archiviarla in un dispositivo di archiviazione rimovibile, ad esempio un'unità flash USB. È necessaria la chiave quando si avvia una sessione di debug nel computer host.

  3. Usare Gestione dispositivi per determinare i numeri di bus, dispositivo e funzione PCI per l'adattatore da usare per il debug. Questi valori vengono visualizzati in Gestione dispositivi in Posizione nella scheda Generale. Quindi, in un prompt dei comandi con privilegi elevati immettere il comando seguente, dove b, d e f sono il numero del bus, il numero di dispositivo e il numero di funzione dell'adattatore:

    bcdedit /set "{dbgsettings}" busparams b.d.f
    
  4. Il PC di destinazione verrà riavviato dopo che è stato collegato un debugger del kernel.

Nota

Se si intende installare il ruolo Hyper-V nel computer di destinazione, vedere Configurazione del debug di rete di un host macchina virtuale.

Attenzione Se il computer di destinazione si trova in una stazione di ancoraggio e il debug di rete è abilitato per una scheda di rete che fa parte della stazione di ancoraggio, non rimuovere il computer dalla stazione di ancoraggio. Se è necessario rimuovere il computer di destinazione dalla stazione di ancoraggio, disabilitare prima il debug del kernel. Per disabilitare il debug del kernel nel computer di destinazione, aprire un prompt dei comandi come amministratore e immettere il comando bcdedit /debug off. Riavviare il computer di destinazione.

Avviare la sessione di debug

Verificare che la scheda di rete del computer host sia connessa a un hub di rete o a un commutatore usando un cavo di rete appropriato.

Nel computer host aprire WinDbg. Scegliere Debug kernel dal menu File. Nella finestra di dialogo Debug kernel aprire la scheda Net . Immettere il numero di porta e la chiave. Seleziona OK.

È anche possibile avviare una sessione con WinDbg aprendo un prompt dei comandi e immettendo il comando seguente, dove n è il numero di porta e MyKey è la chiave generata automaticamente da BCDEdit quando si configura il computer di destinazione:

windbg -k net:port=<n>,key=<MyKey>

Se viene richiesto di consentire a WinDbg di accedere alla porta tramite il firewall, consentire a WinDbg di accedere alla porta per tutti e tre i diversi tipi di rete.

Usare KD

Nel computer host aprire un prompt dei comandi. Immettere il comando seguente, dove n è il numero di porta e MyKey è la chiave generata automaticamente da BCDEdit quando si configura il computer di destinazione:

kd -k net:port=<n>,key=<MyKey>

Se viene richiesto di consentire a WinDbg di accedere alla porta tramite il firewall, consentire a WinDbg di accedere alla porta per tutti e tre i diversi tipi di rete.

Riavviare il PC di destinazione

Dopo che il debugger è connesso e in attesa di connettersi, riavviare il computer di destinazione. Un modo per riavviare il PC consiste nell'usare questo comando dal prompt dei comandi di un amministratore:

shutdown -r -t 0

Quando la destinazione viene riavviata, il debugger nel sistema operativo host deve connettersi.

Dopo la connessione alla destinazione nell'host, premere l'interruzione nel debugger ed è possibile avviare il debug.

Consentire al debugger tramite il firewall

Quando si tenta di stabilire una connessione di debug di rete, potrebbe essere richiesto di consentire all'applicazione di debug (WinDbg o KD) l'accesso tramite il firewall. Le versioni client di Windows visualizzano il prompt, ma le versioni server di Windows non visualizzano il prompt. È consigliabile rispondere al prompt selezionando le caselle per tutti e tre i tipi di rete: dominio, privato e pubblico.

Se non si riceve il prompt o se non si selezionano le caselle quando la richiesta era disponibile, è necessario usare il Pannello di controllo per consentire l'accesso tramite il firewall nel PC host in cui è in esecuzione il debugger. Aprire Pannello di controllo > Sistema e sicurezza e selezionare Consenti un'app tramite Windows Firewall.

  • (WinDbg) Nell'elenco delle applicazioni individuare il processo del motore WinDbg (TCP) (tutto).

  • (WinDbg classico) Nell'elenco delle applicazioni individuare Debugger simbolico dell'interfaccia utente grafica di Windows e Debugger kernel Windows.

Usare le caselle di controllo per consentire a tali applicazioni tramite il firewall. Riavviare l'applicazione di debug (WinDbg o KD).

Encryption key

Per proteggere il computer di destinazione, è necessario crittografare i pacchetti che si spostano tra i computer host e di destinazione. È consigliabile usare una chiave di crittografia generata automaticamente (fornita da BCDEdit quando si configura il computer di destinazione). L'uso di una chiave di crittografia generata automaticamente è consigliato perché è più sicuro e fornisce un valore univoco usato per stabilire la connessione a una destinazione specifica.

Il debug di rete usa una chiave a 256 bit specificata come quattro valori a 64 bit, in base 36, separati da punti. Ogni valore a 64 bit viene specificato usando fino a 13 caratteri. I caratteri validi sono le lettere da az e le cifre da 0 a 9. Non sono consentiti caratteri speciali.

Per specificare la propria chiave, aprire un prompt dei comandi con privilegi elevati nel computer di destinazione. Immettere il comando seguente, dove w.x.y.z è l'indirizzo IP del computer host, n è il numero di porta e Key è la chiave:

bcdedit /dbgsettings net hostip:w.x.y.z port:n key:Key

Il computer di destinazione deve essere riavviato ogni volta che le impostazioni dbgsettings vengono modificate.

Suggerimenti per la risoluzione dei problemi

L'applicazione di debug deve essere consentita tramite firewall

Quando si tenta di stabilire una connessione di debug di rete, potrebbe essere richiesto di consentire all'applicazione di debug (WinDbg o KD) l'accesso tramite il firewall. Le versioni client di Windows visualizzano il prompt, ma le versioni server di Windows non visualizzano il prompt. È consigliabile rispondere al prompt selezionando le caselle per tutti e tre i tipi di rete: dominio, privato e pubblico.

Se non si riceve la richiesta o se non sono state controllate le caselle quando la richiesta era disponibile, è necessario usare il Pannello di controllo per consentire l'accesso tramite il firewall. Aprire Pannello di controllo > Sistema e sicurezza e selezionare Consenti un'app tramite Windows Firewall.

  • (WinDbg) Nell'elenco delle applicazioni individuare il processo del motore WinDbg (TCP) (tutto).

  • (WinDbg (versione classica)) Nell'elenco delle applicazioni individuare Debugger simbolico dell'interfaccia utente grafica di Windows e Debugger kernel Windows.

Usare le caselle di controllo per consentire a tali applicazioni tramite il firewall. Scorrere verso il basso e selezionare OK per salvare le modifiche del firewall. Riavviare il debugger.

Il numero di porta deve essere compreso nell'intervallo consentito dai criteri di rete

L'intervallo di numeri di porta che possono essere usati per il debug di rete potrebbe essere limitato dai criteri di rete dell'azienda. Per determinare se i criteri aziendali limitano l'intervallo di porte che possono essere usate per il debug di rete, rivolgersi all'amministratore di rete. Nel computer di destinazione aprire un prompt dei comandi come amministratore e immettere il comando bcdedit /dbgsettings. L'output sarà simile al seguente:

C:\> bcdedit /dbgsettings
key                     XXXXXX.XXXXX.XXXXX.XXXXX
debugtype               NET
hostip                  169.168.1.1
port                    50085
dhcp                    Yes
The operation completed successfully.

Nell'output precedente il valore della porta è 50085. Se il valore della porta non rientra nell'intervallo consentito dall'amministratore di rete, immettere il comando seguente. Il valore w.x.y.z è l'indirizzo IP del computer host e YourDebugPort è un numero di porta nell'intervallo consentito.

bcdedit /dbgsettings net hostip:w.x.y.z port:YourDebugPort

Dopo aver modificato le impostazioni del debugger del computer di destinazione, eseguire di nuovo il debugger nel computer host con la nuova impostazione della porta e quindi riavviare il computer di destinazione.

Usare ping per testare la connettività

Se il debugger non si connette, usare il comando ping nel PC di destinazione per verificare la connettività.

C:\>Ping <HostComputerIPAddress>

Nota

Questo potrebbe non funzionare se il computer host non è configurato per essere individuabile in rete perché il firewall potrebbe bloccare le richieste ping. Se il firewall blocca le richieste ping, non si otterranno risposte quando si esegue il ping dell'host.

Come il debugger ottiene un indirizzo IP per il computer di destinazione

KDNET nel computer di destinazione tenta di usare DHCP (Dynamic Host Configuration Protocol) per ottenere un indirizzo IP instradabile per la scheda di rete usata per il debug. Se KDNET ottiene un indirizzo assegnato da DHCP, il computer di destinazione può essere sottoposto a debug da computer host che si trovano in qualsiasi punto della rete. Se KDNET non riesce a ottenere un indirizzo assegnato da DHCP, usa l'APIPA (Automatic Private IP Addressing) per ottenere un indirizzo IP di collegamento locale. Gli indirizzi IP del collegamento locale non sono instradabili, quindi un host e una destinazione non possono usare un indirizzo IP di collegamento locale per comunicare tramite un router. In tal caso, il debug di rete funzionerà se si collega l'host e i computer di destinazione nello stesso hub di rete o nello stesso commutatore.

Specificare sempre busparams durante la configurazione di KDNET in un computer fisico con una scheda di interfaccia di rete basata su PCI

Se si configura KDNET in un computer fisico con una scheda di interfaccia di rete basata su PCI o PCIe, è necessario specificare sempre i busparams per la scheda di interfaccia di rete da usare per KDNET. Per specificare i parametri del bus, aprire Gestione dispositivi e individuare la scheda di rete da usare per il debug. Aprire la pagina delle proprietà per la scheda di rete e prendere nota del numero del bus, del numero di dispositivo e del numero di funzione visualizzato in Posizione nella scheda Generale . In un prompt dei comandi con privilegi elevati immettere il comando seguente, dove b, d e f sono i numeri bus, dispositivo e funzione in formato decimale:

bcdedit /set "{dbgsettings}" busparams b.d.f

Quando il debugger è in esecuzione nel computer host e in attesa di connettersi, riavviare il computer di destinazione usando il comando seguente:

shutdown -r -t 0

Eliminare manualmente le voci BCDEdit

L'eliminazione manuale non è normalmente necessaria, ma viene fornita qui come procedura di risoluzione dei problemi per situazioni insolite.

L'eliminazione manuale delle voci non è necessaria quando si usa l'utilità kdnet. Per altre informazioni, vedere Configurazione automatica del debug del kernel di rete KDNET.

Quando si usa bcdedit –deletevalue, è necessario specificare un nome di elemento bcd valido. Per altre informazioni, vedere BCDEdit /deletevalue.

Per eliminare manualmente le voci bcdedit, seguire questa procedura:

  1. Nel computer di destinazione aprire un prompt dei comandi come amministratore.

  2. Ad esempio, immettere il comando seguente per eliminare la voce di debug BCDEdit per l'indirizzo IP host:

    bcdedit -deletevalue {dbgsettings} hostip
    

Quando si elimina l'hostip, è necessario specificare target= nella riga di comando del debugger.

  1. Come altro esempio, eliminare la voce di porta usando il comando seguente:

    bcdedit -deletevalue {dbgsettings} port
    

Quando si elimina la voce di porta, KDNET usa la porta del debugger ICANN registrata predefinita di 5364.

Configurare Hyper-V

Se si intende installare il ruolo Hyper-V nel computer di destinazione, vedere Configurazione del debug di rete di un host macchina virtuale.

Per informazioni sul debug di una macchina virtuale Hyper-V, vedere Configurazione del debug di rete di una macchina virtuale - KDNET.

Abilitare KDNET in un host Hyper-V che esegue macchine virtuali con connettività di rete esterna

In alcuni casi si verifica una situazione che causa l'arresto della rete nelle macchine virtuali:

  • Hyper-V è stato abilitato nel PC, è stato creato un commutatore di rete esterno e punta a una scheda di interfaccia di rete fisica nel computer e le macchine virtuali sono state configurate per l'uso di tale commutatore esterno per la rete.

  • KDNET viene quindi abilitato nel sistema operativo host Hyper-V usando la stessa scheda di interfaccia di rete fisica a cui punta il commutatore di rete esterno. L'host viene riavviato.

  • Tutte le macchine virtuali che usavano il commutatore esterno configurato in precedenza, perdono la connettività di rete dopo il riavvio.

Questa interruzione è progettata e avviene perché KDNET assume il controllo esclusivo sulla scheda di interfaccia di rete configurata per l'uso. Il miniport NDIS nativo per tale scheda di interfaccia di rete non viene caricato dal sistema operativo. Il commutatore di rete esterno non può più comunicare con il driver miniport NDIS nativo e smette di funzionare. Per ovviare a questa situazione, eseguire le operazioni seguenti:

  1. Aprire Virtual Switch Manager da Console di gestione di Hyper-V e selezionare il commutatore virtuale esistente. Modificare la scheda di rete esterna nella scheda di rete debug del kernel Microsoft selezionandola dal menu a discesa e quindi selezionando OK nella finestra di dialogo Gestione commutatori virtuali.

  2. Dopo aver aggiornato la scheda di interfaccia di rete del commutatore virtuale, arrestare e riavviare le macchine virtuali.

Quando il debug KDNET è disattivato, è necessario seguire la stessa procedura per riassegnare il commutatore esterno al miniport NDIS nativo per la scheda di interfaccia di rete. In caso contrario, la connettività della macchina virtuale viene persa quando il computer viene riavviato dopo la disabilitazione del debug.

IPv6

Il supporto IPv6 è stato aggiunto in Windows versione 1809.

Per usare IPv6 con il debugger, completare la procedura seguente:

  1. Eseguire il ping del <nomehost> debug e prendere nota dell'indirizzo IPv6 segnalato nella risposta dalle righe di output. Usare questo indirizzo IPv6 al posto di x:y:z:p:d:q:r:n.

  2. Usare BCDEdit per eliminare i valori degli indirizzi IP esistenti in dbgsettings.

    bcdedit -deletevalue {dbgsettings} hostip
    
  3. Impostare l'indirizzo IPv6 dell'host. Nella stringa non devono essere presenti spazi hostipv6=s:t:u:v:w:x:y:z . <YourPort> è il numero di porta di rete da usare per questo computer di destinazione. <YourKey> è la chiave di sicurezza in quattro parti. <b.d.f> sono i numeri di posizione della funzione del dispositivo bus per la scheda di interfaccia di rete che si vuole usare per KDNET.

    bcdedit /dbgsettings net hostipv6:s:t:u:v:w:x:y:z port:<YourPort> key:<YourKey> busparams:<b.d.f>
    
  4. Digitare questo comando per verificare che le impostazioni dbgsettings siano impostate correttamente.

    C:\> bcdedit /dbgsettings
    busparams               0.25.0
    key                     2steg4fzbj2sz.23418vzkd4ko3.1g34ou07z4pev.1sp3yo9yz874p
    debugtype               NET
    hostipv6                  2001:db8:0:0:ff00:0:42:8329
    port                    50010
    dhcp                    Yes
    The operation completed successfully.
    
  5. Nel computer host usare il comando seguente per avviare il debugger:

    Windbg -k net:port=<yournetworkportnumber>,key=<key_output_from_kdnet>,target=::<YourIPv6Address> 
    
  6. Quando il debugger è in esecuzione nel computer host e in attesa di connettersi, riavviare il computer di destinazione.

  7. Il debugger deve connettersi al debugger host all'inizio dell'avvio. È possibile notare che KDNET usa una connessione IPv6 perché gli indirizzi IP segnalati nel messaggio connesso sono indirizzi IPv6 anziché indirizzi IPv4.

Note

  • Ogni impostazione bcd del debugger che consente di specificare l'oggetto hostip ha un elemento corrispondente hostipv6 . Ci sono tre.

    IPv4 IPv6 Utilizzo
    hostip hostipv6 Per il debug di avvio e kernel
    targethostip targethostipv6 Specifico del debug del kernel
    hypervisorhostip hypervisorhostipv6 Per il debug di Hyper-v
  • Se si imposta l'indirizzo hostipv6 di stile per uno di questi tipi di debug, significa che si vuole e si otterrà IPv6.

  • Se si imposta l'indirizzo hostip di stile per uno di questi tipi di debug, significa che si vuole e si otterrà IPv4.

  • La destinazione eseguirà solo IPv4 o IPv6, non entrambe contemporaneamente. La versione del protocollo IP usata è controllata dal dbgsettings del computer di destinazione. Se hostip è impostato, la destinazione usa IPv4. Se hostipv6 è impostato, la destinazione usa IPv6.

  • Il debugger host seleziona in genere automaticamente l'uso di IPv4 o IPv6. Per impostazione predefinita, il debugger è in ascolto sia su un socket IPv4 che su un socket IPv6 e si connette automaticamente su uno al computer di destinazione.

  • Se si vuole forzare l'uso di IPv6 nel debugger nell'host, ma si vuole che il debugger sia in ascolto di una connessione dalla destinazione, è possibile aggiungere target=:: alla riga di comando del debugger. :: è un indirizzo IPv6 pari a 0.

  • Se si vuole forzare il debug IPv4 nel debugger nell'host, ma si vuole che il debugger sia in ascolto di una connessione dalla destinazione, è possibile aggiungere target=0.0.0.0 alla riga di comando del debugger. 0.0.0.0 è un indirizzo IPv4 pari a 0.

  • Se si specifica target= nella riga di comando del debugger e si usa un nome computer, il debugger converte il nome del computer in un indirizzo IPv4 e un indirizzo IPv6. Il debugger tenta quindi di connettersi a entrambi.

  • Quando si specifica target= nella riga di comando del debugger e si usa un indirizzo IP, se l'indirizzo IP contiene caratteri : , il debugger presuppone che si tratti di un indirizzo IPv6 e forza l'uso di IPv6 per tale connessione. Se l'indirizzo IP contiene qualsiasi carattere , il debugger presuppone che si tratti di un indirizzo IPv4 e forza l'uso di IPv4 per tale connessione.

  • Se si configura IPv6 nella destinazione e si forza l'uso di IPv4 nella riga di comando del debugger, non si ottiene una connessione.

  • Se si configura IPv4 nella destinazione e si forza l'uso di IPv6 nella riga di comando del debugger, non si ottiene una connessione.

Vedi anche