Skip to content

Network Troubleshooting Windows

Outils et techniques de diagnostic réseau avancé sous Windows.

Outils de Diagnostic

OUTILS RÉSEAU WINDOWS
══════════════════════════════════════════════════════════

ping          Test de connectivité ICMP
tracert       Trace du chemin réseau
pathping      Combinaison ping + tracert avec stats
nslookup      Requêtes DNS interactives
ipconfig      Configuration IP
netstat       Connexions et ports ouverts
route         Table de routage
arp           Cache ARP
netsh         Configuration réseau avancée
Test-NetConnection (PowerShell)  Test complet

Diagnostic de Base

Connectivité

# Test de connectivité basique
Test-Connection -ComputerName "server01" -Count 4

# Test avec détails
Test-NetConnection -ComputerName "server01" -InformationLevel Detailed

# Test d'un port spécifique
Test-NetConnection -ComputerName "server01" -Port 443

# Traceroute PowerShell
Test-NetConnection -ComputerName "8.8.8.8" -TraceRoute

# Ping continu avec timestamp
ping -t server01 | ForEach-Object { "$(Get-Date -Format 'HH:mm:ss') $_" }

Configuration IP

# Configuration complète
Get-NetIPConfiguration

# Adresses IP
Get-NetIPAddress | Where-Object AddressFamily -eq IPv4

# Passerelle par défaut
Get-NetRoute -DestinationPrefix "0.0.0.0/0"

# Serveurs DNS
Get-DnsClientServerAddress

# Libérer/Renouveler DHCP
ipconfig /release
ipconfig /renew

# Vider le cache DNS
Clear-DnsClientCache
# ou
ipconfig /flushdns

Diagnostic DNS

Requêtes DNS

# Résolution simple
Resolve-DnsName "www.google.com"

# Type de record spécifique
Resolve-DnsName "corp.local" -Type MX
Resolve-DnsName "corp.local" -Type NS
Resolve-DnsName "_ldap._tcp.dc._msdcs.corp.local" -Type SRV

# Utiliser un serveur DNS spécifique
Resolve-DnsName "www.google.com" -Server "8.8.8.8"

# nslookup interactif
nslookup
> server 8.8.8.8
> set type=MX
> corp.local

Troubleshooting DNS

# Voir le cache DNS local
Get-DnsClientCache

# Vérifier la configuration DNS
Get-DnsClientServerAddress -InterfaceAlias "Ethernet"

# Tester la résolution depuis différents serveurs
$servers = @("10.10.1.10", "10.10.1.11", "8.8.8.8")
foreach ($srv in $servers) {
    Write-Host "Server: $srv"
    Resolve-DnsName "www.corp.local" -Server $srv -ErrorAction SilentlyContinue
}

# Vérifier les enregistrements SRV AD
Resolve-DnsName "_ldap._tcp.corp.local" -Type SRV
Resolve-DnsName "_kerberos._tcp.corp.local" -Type SRV

Diagnostic Ports et Connexions

Connexions Actives

# Toutes les connexions établies
Get-NetTCPConnection -State Established

# Connexions par processus
Get-NetTCPConnection -State Established |
    Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess,
    @{N='Process';E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}}

# Ports en écoute
Get-NetTCPConnection -State Listen |
    Select-Object LocalAddress, LocalPort, @{N='Process';E={(Get-Process -Id $_.OwningProcess).Name}}

# Connexions UDP
Get-NetUDPEndpoint | Select-Object LocalAddress, LocalPort, OwningProcess

# netstat classique
netstat -ano | findstr LISTENING
netstat -ano | findstr :443

Test de Ports

# Test si un port est ouvert
Test-NetConnection -ComputerName "server01" -Port 3389

# Tester plusieurs ports
$ports = @(22, 80, 443, 3389, 5985)
foreach ($port in $ports) {
    $result = Test-NetConnection -ComputerName "server01" -Port $port -WarningAction SilentlyContinue
    [PSCustomObject]@{
        Port = $port
        Open = $result.TcpTestSucceeded
    }
}

# Scanner rapide (attention: pas un vrai scanner de sécurité)
1..1024 | ForEach-Object {
    $result = Test-NetConnection -ComputerName "server01" -Port $_ -WarningAction SilentlyContinue
    if ($result.TcpTestSucceeded) { "Port $_ open" }
}

Diagnostic Réseau Physique

Adaptateurs Réseau

# Lister les adaptateurs
Get-NetAdapter

# Détails d'un adaptateur
Get-NetAdapter -Name "Ethernet" | Format-List *

# Statistiques
Get-NetAdapterStatistics

# Propriétés avancées (offload, vitesse, etc.)
Get-NetAdapterAdvancedProperty -Name "Ethernet"

# Désactiver/Activer
Disable-NetAdapter -Name "Ethernet" -Confirm:$false
Enable-NetAdapter -Name "Ethernet"

# Vérifier le lien physique
Get-NetAdapter | Select-Object Name, Status, LinkSpeed

Diagnostics Matériels

# État physique
Get-NetAdapter | Select-Object Name, Status, MediaConnectionState, LinkSpeed

# Erreurs de transmission
Get-NetAdapterStatistics | Select-Object Name, ReceivedDiscards, OutboundDiscards, ReceivedErrors, OutboundErrors

# Driver info
Get-NetAdapter | Select-Object Name, DriverVersion, DriverDate, DriverProvider

# Événements réseau
Get-WinEvent -LogName "Microsoft-Windows-NetworkProfile/Operational" -MaxEvents 20

Diagnostic Routage

Table de Routage

# Voir les routes
Get-NetRoute

# Routes IPv4 uniquement
Get-NetRoute -AddressFamily IPv4 | Sort-Object DestinationPrefix

# Route vers une destination
Find-NetRoute -RemoteIPAddress "8.8.8.8"

# Ajouter une route statique
New-NetRoute -DestinationPrefix "10.20.0.0/16" -InterfaceAlias "Ethernet" -NextHop "10.10.1.1"

# Supprimer une route
Remove-NetRoute -DestinationPrefix "10.20.0.0/16" -Confirm:$false

# Traceroute
tracert -d 8.8.8.8
Test-NetConnection -ComputerName "8.8.8.8" -TraceRoute

Pathping (Analyse de Chemin)

REM Pathping combine ping et tracert avec statistiques de perte
pathping -n 8.8.8.8

REM Sortie :
REM - Liste des sauts
REM - Statistiques de perte par saut
REM - Latence par saut

Diagnostic Firewall

Vérifier les Règles

# Règles bloquant un port
Get-NetFirewallRule -Enabled True -Direction Inbound |
    Get-NetFirewallPortFilter |
    Where-Object LocalPort -eq 443

# Vérifier si le firewall bloque
# Test depuis une autre machine + vérifier les logs
Get-Content "C:\Windows\System32\LogFiles\Firewall\pfirewall.log" -Tail 50 |
    Where-Object { $_ -match "DROP" }

# Profil actif
Get-NetConnectionProfile
Get-NetFirewallProfile | Select-Object Name, Enabled

Désactiver Temporairement

# Désactiver (pour test uniquement!)
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled False

# Réactiver
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled True

Diagnostic Avancé

Capture de Paquets

# Capture avec netsh (intégré)
netsh trace start capture=yes tracefile=C:\capture.etl maxsize=500

# Arrêter
netsh trace stop

# Convertir en pcap (nécessite Microsoft Message Analyzer ou etl2pcapng)
# etl2pcapng.exe C:\capture.etl C:\capture.pcapng

# Packet Monitor (pktmon) - Windows 10/Server 2019+
pktmon start --capture --file C:\pktmon.etl
pktmon stop
pktmon etl2pcap C:\pktmon.etl --out C:\capture.pcap

Network Diagnostics

# Diagnostic automatique Windows
msdt.exe /id NetworkDiagnosticsWeb
msdt.exe /id NetworkDiagnosticsNetworkAdapter

# Test de bande passante (iperf requis)
# Serveur: iperf3 -s
# Client: iperf3 -c server01

# Test MTU
ping -f -l 1472 server01  # 1472 + 28 (headers) = 1500

Wireshark Filters Utiles

FILTRES WIRESHARK COURANTS
══════════════════════════════════════════════════════════

ip.addr == 10.10.1.50       Trafic vers/depuis IP
tcp.port == 443             Port TCP spécifique
dns                         Requêtes DNS
http                        Trafic HTTP
tcp.flags.syn == 1          Connexions TCP (SYN)
tcp.analysis.retransmission Retransmissions
kerberos                    Authentification Kerberos
smb2                        Trafic SMB
ldap                        Requêtes LDAP

Scénarios Courants

"Pas d'accès réseau"

# 1. Vérifier la configuration IP
Get-NetIPConfiguration

# 2. Vérifier le DHCP
Get-NetIPAddress | Where-Object PrefixOrigin -eq "Dhcp"

# 3. Ping la passerelle
Test-Connection (Get-NetRoute -DestinationPrefix "0.0.0.0/0").NextHop

# 4. Ping DNS
Test-Connection (Get-DnsClientServerAddress -AddressFamily IPv4).ServerAddresses[0]

# 5. Ping externe
Test-Connection 8.8.8.8

# 6. Test DNS
Resolve-DnsName "www.google.com"

"Impossible de joindre un serveur"

# 1. Résolution DNS
Resolve-DnsName "server01"

# 2. Test ICMP
Test-Connection server01

# 3. Test du port requis
Test-NetConnection server01 -Port 443

# 4. Traceroute
Test-NetConnection server01 -TraceRoute

# 5. Vérifier le firewall local
Get-NetFirewallRule -Direction Outbound -Enabled True |
    Where-Object Action -eq "Block"

"Lenteurs réseau"

# 1. Statistiques interface
Get-NetAdapterStatistics | Select-Object Name, *Error*, *Discard*

# 2. Latence
Test-Connection server01 -Count 20 | Measure-Object ResponseTime -Average -Maximum

# 3. Vérifier les retransmissions (capture réseau)
# Wireshark: tcp.analysis.retransmission

# 4. Vérifier la bande passante
Get-Counter '\Network Interface(*)\Bytes Total/sec' -SampleInterval 5 -MaxSamples 10

Scripts de Diagnostic

Health Check Réseau

function Test-NetworkHealth {
    param($Gateway, $DNS, $External = "8.8.8.8")

    $results = @()

    # Test passerelle
    $results += [PSCustomObject]@{
        Test = "Gateway"
        Target = $Gateway
        Result = (Test-Connection $Gateway -Count 1 -Quiet)
    }

    # Test DNS
    $results += [PSCustomObject]@{
        Test = "DNS Server"
        Target = $DNS
        Result = (Test-Connection $DNS -Count 1 -Quiet)
    }

    # Test externe
    $results += [PSCustomObject]@{
        Test = "External"
        Target = $External
        Result = (Test-Connection $External -Count 1 -Quiet)
    }

    # Test résolution
    $results += [PSCustomObject]@{
        Test = "DNS Resolution"
        Target = "www.google.com"
        Result = [bool](Resolve-DnsName "www.google.com" -ErrorAction SilentlyContinue)
    }

    return $results
}

# Utilisation
$config = Get-NetIPConfiguration | Where-Object IPv4DefaultGateway
Test-NetworkHealth -Gateway $config.IPv4DefaultGateway.NextHop -DNS $config.DNSServer.ServerAddresses[0]

Bonnes Pratiques

Checklist Troubleshooting:
  Méthodologie:
    - [ ] Commencer par le plus simple (ping)
    - [ ] Procéder par couche (physique → app)
    - [ ] Documenter chaque test
    - [ ] Comparer avec une machine qui fonctionne

  Outils:
    - [ ] PowerShell pour l'automatisation
    - [ ] Wireshark pour l'analyse profonde
    - [ ] Event logs pour le contexte
    - [ ] Perfmon pour les tendances

  Documentation:
    - [ ] Baseline réseau connue
    - [ ] Schéma réseau à jour
    - [ ] Contacts équipe réseau
    - [ ] Procédures d'escalade

Voir aussi :