Ciao a tutti!

Il post di oggi è la soluzione al problema che ha causato diverse ore di sbattimento di testa sul muro sia da parte mia sia da parte di molti altri utenti che ci hanno provato prima di me. Sono contento di essere riuscito a risolverlo e di condividerne con voi la soluzione.

Problema: spesso in una traccia di rete, senza che l’utente specifichi nulla, Network Monitor automaticamente ci mostra gli FQDN degli host anzichè I loro indirizzi IP. La funzione è in alcuni casi utile, in altri no. Come fare a disabilitarla?

Pensiamo ad esempio al caso della seguente figura, dove la nomenclatura non è esattamente user-friendly, oppure quando gli FQDN sono particolarmente lunghi e saremmo costretti ad allargare la dimensione delle colonne):

image

Il workaround più semplice è utilizzare la funzione “alias” alla quale possiamo accedere tramite il pulsante posto sul lato destro dell’interfaccia:

image

Qui possiamo configurare degli alias di testo che verranno associati agli indirizzi IP e sostituiranno gli FDQN originali.

By design infatti Network Monitor prioritizza la visualizzazione degli alias rispetto all’FQDN originale.

Spesso può essere molto comodo usare come alias semplicemente “Client” e “Server”. Ecco come si presenterebbe la stessa trace mostrata nell’esempio precedente:

image

Comunque, i puristi del TCP/IP (come me) vorrebbero visualizzare sempre gli indirizzi IP originali dei pacchetti. Certo, è possibile usare ancora gli “alias” inserendo come stringa sostitutiva una stringa che è uguale all’indirizzo IP. Macchinoso, ma funzionante. Il workaround andrebbe però applicato ogni volta che vogliamo aprire una trace di rete, un lavoro che potrebbe essere monotono e far perdere del tempo prezioso. Ma ora c’è una soluzione duratura :)

Soluzione

Bisogna modificare il comportamento di default di Network Monitor e impedirgli di usare aliases o FQDN e mostrare l’IP. Per farlo, bisogna andare a modificare I files NPL che contengono I parsers utilizzati dal tool.

Al momento in cui scrivo questo articolo, inizio 2012, sto usando la versione 3.4 di Network Monitor. I riferimenti che farò al codice sono quindi quelli della versione 3.4; non escludo che in futuro possano esserci dei cambiamenti da parte degli sviluppatori.

Procedura:

1) Navigare alla cartella C:\ProgramData\Microsoft\Network Monitor 3\NPL\NetworkMonitor Parsers che continente tutti i parsers

2) Aprire la sottocartella Base e individuare il parser specifico del procotollo IP, il file che si chiama ipv4.npl

3) Con un editor di testo, aprire il file ed individuare la seguente porzione di codice.

[
        Pair = Address,
        Property.SourceIPv4Alias = Global.AliasTable$[this],
        Property.SourceName = Global.NameTable$[this],
        Property.Source = Property.OverIP ? Property.Source
                : Property.SourceIPv4Alias ? Property.SourceIPv4Alias
                : Global.MultiIPAddress$[Property.SourceName] ? this.ToDataTypeString
                : Property.SourceName ? Property.SourceName
                : this.ToDataTypeString,
        Property.SourceNetworkAddress,
        Property.SourceNetworkAddressString = this.ToDataTypeString
    ]
    IPv4Address SourceAddress;

    [
        Pair = Address,
        Property.DestinationIPv4Alias = Global.AliasTable$[this],
        Property.DestinationName = Global.NameTable$[this],
       
Property.Destination = Property.OverIP ? Property.Destination
                : Property.DestinationIPv4Alias ? Property.DestinationIPv4Alias
                : Global.MultiIPAddress$[Property.DestinationName] ? this.ToDataTypeString
                : Property.DestinationName ? Property.DestinationName
                : this.ToDataTypeString,
        Property.NetworkDirection = Property.OverIP ? Property.NetworkDirection
                : (SourceAddress > DestinationAddress) ? 1 : (SourceAddress == DestinationAddress) ? 0 : 2,
        Property.DestinationNetworkAddress,
        Property.DestinationNetworkAddressString = this.ToDataTypeString
    ]
    IPv4Address DestinationAddress;

4) Sostituire tale codice con quest’altro (ho evidenziato le differenze in rosso e blu)

[
        Pair = Address,
        Property.SourceIPv4Alias = Global.AliasTable$[this],
        Property.SourceName = Global.NameTable$[this],
     
  Property.Source = this.ToDataTypeString,
        Property.SourceNetworkAddress,
        Property.SourceNetworkAddressString = this.ToDataTypeString
    ]
    IPv4Address SourceAddress;

    [
        Pair = Address,
        Property.DestinationIPv4Alias = Global.AliasTable$[this],
        Property.DestinationName = Global.NameTable$[this],
       
Property.Destination = this.ToDataTypeString,
        Property.NetworkDirection = Property.OverIP ? Property.NetworkDirection
                : (SourceAddress > DestinationAddress) ? 1 : (SourceAddress == DestinationAddress) ? 0 : 2,
        Property.DestinationNetworkAddress,
        Property.DestinationNetworkAddressString = this.ToDataTypeString
    ]
    IPv4Address DestinationAddress;

5) salvare il file e riavviare Network Monitor.

La prima volta che avvieremo il tool dopo la modifica, Netmon procederà a ricaricare tutti I parsers perchè si è accorto della modifica.

A questo punto, visualizzeremo sempre gli IP desiderati!!!

image

La modifica avrà effetto per tutti I protocolli che viaggiano over IP, quindi sostanzialmente il 99% di quelli che ci interessano nel nostro troubleshooting quotidiano.

L’unica eccezione è ARP. I puristi dell’Ethernet potranno notare che il protocollo ARP viene ora visualizzato in modo “incorretto” poichè in effetti la comunicazione non avviene propriamente a livello IP e quindi non è corretto mostrare gli indirizzi IP come Source e Destination:

image

Per risolvere anche questo problema:

1) Navigare alla cartella C:\ProgramData\Microsoft\Network Monitor 3\NPL\NetworkMonitor Parsers che continente tutti i parsers

2) Aprire la sottocartella Core e individuare il parser specifico del procotollo ARP, il file che si chiama arp.npl

3) Con un editor di testo, aprire il file ed individuare le seguenti porzioni di codice.

            [   
                ARPSrcAddress = this.toString,
                SenderProtocolAddress,
                SourceIPv4Alias = Global.AliasTable$[this],
                SourceName = Global.NameTable$[this],
                  Source = SourceIPv4Alias ? SourceIPv4Alias
                          : Global.MultiIPAddress$[SourceName] ? this.ToDataTypeString
                          : SourceName ? SourceName
                          : this.ToDataTypeString
            ]

            [
                ARPDestAddress = this.ToString,
                TargetProtocolAddress,
                DestinationIPv4Alias = Global.AliasTable$[this],
                DestinationName = Global.NameTable$[this],
                  Destination = DestinationIPv4Alias ? DestinationIPv4Alias
                          : Global.MultiIPAddress$[DestinationName] ? this.ToDataTypeString
                          : DestinationName ? DestinationName
                          : this.ToDataTypeString
            ]

4) Sostituire tale codice con quest’altro (ho evidenziato le differenze in rosso e blu)

            [   
                ARPSrcAddress = this.toString,
                SenderProtocolAddress,
                SourceIPv4Alias = Global.AliasTable$[this],
                SourceName = Global.NameTable$[this],
                Source = SourceRawHardwareAddress
            ]
            IPv4Address SendersIp4Address;

            [
                ARPDestAddress = this.ToString,
                TargetProtocolAddress,
                DestinationIPv4Alias = Global.AliasTable$[this],
                DestinationName = Global.NameTable$[this],
                Destination = DestinationRawHardwareAddress
            ]
            IPv4Address TargetIp4Address;

5) salvare il file e riavviare Network Monitor.

image

Et voilà! Ora visualizziamo come sorgente e destinazione i MAC address per il protocollo ARP (mentre continueremo a vedere gli IP per tutti gli altri protocolli)

Nota Bene!! : Per chi ha intenzione di eseguire la procedura su Windows 8, sono necessari alcuni accorgimenti aggiuntivi poichè il nuovo sistema operativo è diversa la gestione dei permessi sulla cartella C:\ProgramData\ 

1) I files sotto la cartella C:\ProgramData\Microsoft\Network Monitor 3\NPL\NetworkMonitor Parsers potrebbero essere in read-only. È necessario disabilitare il flag “read-only” per poter eseguire la procedura.

2) È necessario utilizzare Notepad in modalità “elevated” con “Run As Administrator” per modificare i files *npl menzionati.

3) È necessario lanciare Network Monitor in modalità “Elevata” con “Run As Administrator” dopo aver effettuato le modifiche per effettuare il re-parsing.

Se non eseguite queste tre azioni, non sarete in grado di effettuare modifiche o peggio Network Monitor non riuscirà a leggere le modifiche che avete effettuato. Di conseguenza, potrebbe non essere possibile
lanciare il programma in nessun modo (se non reinstallandolo).

Dichiarazione di non responsabilità Gli script di esempio non fanno parte di alcun programma di supporto o servizio standard Microsoft. Gli script di esempio
vengono forniti "COSÌ COME SONO" senza garanzia di alcun tipo.Microsoft esclude inoltre ogni tipo di garanzia implicita, compresa la garanzia
di commerciabilità e idoneità all'uso. I rischi derivanti dall'utilizzo o dall'esecuzione degli script e della documentazione di esempio sono a carico
dell'utente. In nessun caso Microsoft, i relativi autori o chiunque altro abbia partecipato alla creazione, produzione o distribuzione degli script sarà
responsabile per danni di qualsiasi natura (ivi inclusi, in via esemplificativa,i danni per perdita o mancato guadagno, interruzione dell'attività, perdita di
informazioni aziendali o altra perdita economica) derivanti o comunque correlati all'utilizzo o all'incapacità di utilizzare gli script di esempio o
la documentazione, anche nel caso in cui Microsoft sia stata avvertita della possibilità del verificarsi di tali danni.

 

Ciao a tutti e alla prossima!

Stefano Gagliardi
Support Engineer
Microsoft Enterprise Platform Support