Konfiguracja i troubleshooting klienta Wi-Fi z wiersza poleceń

Niezależnie od jakości zarządzanej sieci bezprzewodowej, poprawności jej struktury, godzin spędzonych nad dopieszczaniem konfiguracji, przychodzi moment, w którym coś przestaje działać i trzeba szybko zebrać informacje o urządzeniu klienckim. W przypadku systemu Windows pomocne okazuje się narzędzie netsh – nie tylko do zbierania informacji, lecz także do konfiguracji samego urządzenia!

O narzędziu słów kilka

Netsh jest wbudowanym narzędziem dostępnym w systemie Windows począwszy od wersji Windows 2000. Umożliwia ono wyświetlanie i modyfikowanie ustawień sieciowych urządzenia z odpowiednim systemem operacyjnym, korzystając z dedykowanych komend w CLI. Jest to zatem alternatywa dla graficznego podejścia, mająca swoje plusy (o czym w dalszej części).

Korzystanie z netsh możliwe jest pośrednio poprzez Wiersz Poleceń (cmd.exe) lub Windows PowerShell (powershell.exe) wywołując komendę netsh, a także bezpośrednio poprzez aplikację netsh (netsh.exe) dostępną w katalogu */Windows/System32/. Uruchomienie netsh i wyświetlenie dostępnych komend przy użyciu ’?’ wygląda tak:

C:UsersNSS> netsh
netsh>
netsh>?

The following commands are available:

Commands in this context:
..             - Goes up one context level.
?              - Displays a list of commands.
abort          - Discards changes made while in offline mode.
add            - Adds a configuration entry to a list of entries.
advfirewall    - Changes to the `netsh advfirewall' context.
alias          - Adds an alias.
bridge         - Changes to the `netsh bridge' context.
bye            - Exits the program.
commit         - Commits changes made while in offline mode.
delete         - Deletes a configuration entry from a list of entries.
dhcpclient     - Changes to the `netsh dhcpclient' context.
dnsclient      - Changes to the `netsh dnsclient' context.
dump           - Displays a configuration script.
exec           - Runs a script file.
exit           - Exits the program.
firewall       - Changes to the `netsh firewall' context.
help           - Displays a list of commands.
http           - Changes to the `netsh http' context.
interface      - Changes to the `netsh interface' context.
ipsec          - Changes to the `netsh ipsec' context.
lan            - Changes to the `netsh lan' context.
mbn            - Changes to the `netsh mbn' context.
namespace      - Changes to the `netsh namespace' context.
netio          - Changes to the `netsh netio' context.
offline        - Sets the current mode to offline.
online         - Sets the current mode to online.
p2p            - Changes to the `netsh p2p' context.
popd           - Pops a context from the stack.
pushd          - Pushes current context on stack.
quit           - Exits the program.
ras            - Changes to the `netsh ras' context.
rpc            - Changes to the `netsh rpc' context.
set            - Updates configuration settings.
show           - Displays information.
trace          - Changes to the `netsh trace' context.
unalias        - Deletes an alias.
wcn            - Changes to the `netsh wcn' context.
wfp            - Changes to the `netsh wfp' context.
winhttp        - Changes to the `netsh winhttp' context.
winsock        - Changes to the `netsh winsock' context.
wlan           - Changes to the `netsh wlan' context.

The following sub-contexts are available:
 advfirewall bridge dhcpclient dnsclient firewall http interface ipsec lan mbn namespace netio p2p ras rpc trace wcn wfp winhttp winsock wlan

To view help for a command, type the command, followed by a space, and then
 type ?.

netsh>

Z czego korzystać? Osobiście polecam używać Windows PowerShell gdy:

  • jest dostępny na danej wersji Windows OS – PowerShell powstał w roku 2006
  • sprawdzasz lub konfigurujesz coś manualnie – PowerShell ma wiele wspaniałych cech, które poprawiają użytkowanie w porównaniu do CMD, np. dużo dłuższa historia outputu komend, dynamiczne zawijanie/rozwijanie outputu podczas skalowania okna, łatwiejsze kopiowanie i wklejanie tekstu

Używaj natomiast CMD zamiast PowerShella, gdy planujesz użycie netsh w formie automatycznie uruchamianego skryptu. Dzięki temu skrypt uruchomi się zawsze, niezależnie od wersji systemu Windows.

Jak już wspomniałem netsh związany jest z ustawieniami sieciowymi urządzenia – nie tylko karty LAN czy WLAN, lecz także stosu TCP/IP, wbudowanej funkcjonalności serwera DHCP, firewalla itp. W poniższych przykładach skupiam się na konfiguracji i troubleshootingu klienta bezprzewodowego, ale nic nie stoi na przeszkodzie aby przynajmniej część tych komend lub samą zasadę działania netsh przełożyć na klienta kablowego.

„Czy wiesz że…?”

W celu poprawnego działania komend (zwłaszcza konfiguracyjnych) zaleca się uruchomienie netsh jako administrator (prawoklik -> Uruchom jako Administrator).

Konfiguracja i wyświetlanie ustawień

Zaczynamy od wyświetlenia dostępnych interfejsów:

netsh interface show interface

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
Enabled        Disconnected   Dedicated        Ethernet
Enabled        Connected      Dedicated        VMware Network Adapter VMnet1
Enabled        Connected      Dedicated        VMware Network Adapter VMnet8
Enabled        Connected      Dedicated        Wi-Fi

Na liście znajdują się cztery interfejsy – Ethernet, Wi-Fi oraz dwa z VMware. Sprawdźmy aktualną konfigurację interfejsu Wi-Fi:

netsh interface ip show config name=Wi-Fi

Configuration for interface "Wi-Fi"
    DHCP enabled:                         Yes
    IP Address:                           192.168.5.10
    Subnet Prefix:                        192.168.5.0/24 (mask 255.255.255.0)
    Default Gateway:                      192.168.5.1
    Gateway Metric:                       0
    InterfaceMetric:                      55
    DNS servers configured through DHCP:  192.168.5.1
    Register with which suffix:           Primary only
    WINS servers configured through DHCP: None

Jak widzisz korzystam z DHCP w celu uzyskania adresu IP i ustawień DNS/WINS. Osiągnięcie takiej konfiguracji możliwe jest poprzez podanie komend:

netsh interface ip set address name=Wi-Fi source=dhcp
netsh interface ip set dnsservers name=Wi-Fi source=dhcp
netsh interface ip set winsservers name=Wi-Fi source=dhcp

Odpowiada to poniżej konfiguracji w trybie graficznym:

Konfiguracja na automatyczne uzyskanie adresów.
Konfiguracja na automatyczne uzyskanie adresów.

Oczywiście możliwe jest także statyczne przypisanie przytoczonych parametrów. Osiągniemy to wpisując poniższe komendy:

netsh interface ip set address name=Wi-Fi source=static addr=10.10.0.5 mask=255.255.255.0 gateway=10.10.0.1 gwmetric=0
netsh interface ip set dnsservers name=Wi-Fi source=static addr=10.10.0.1
netsh interface ip set winsservers name=Wi-Fi source=static addr=10.10.0.1

Dzięki temu uzyskamy poniższą konfigurację:

netsh interface ip show config name=Wi-Fi

Configuration for interface "Wi-Fi"
    DHCP enabled:                         No
    IP Address:                           10.10.0.5
    Subnet Prefix:                        10.10.0.0/24 (mask 255.255.255.0)
    Default Gateway:                      10.10.0.1
    Gateway Metric:                       0
    InterfaceMetric:                      55
    Statically Configured DNS Servers:    10.10.0.1
    Register with which suffix:           Primary only
    Statically Configured WINS Servers:   10.10.0.1

Odpowiada to poniżej konfiguracji w trybie graficznym:

Konfiguracja statyczna adresów karty sieciowej.
Konfiguracja statyczna adresów karty sieciowej.

Tak przygotowaną konfigurację można zapisać do pliku w celu późniejszego wczytania. Poniższa komenda zapisze konfigurację z kontekstu interface do pliku o nazwie config.dat:

netsh interface dump > config.dat

Można także zawęzić interesujący nas zakres konfiguracji. Poniższa komenda zapisze tylko konfigurację dotyczącą ipv4 z kontekstu interface:

netsh interface ipv4 dump > config.dat

Konfigurację można wczytać wykonując poniższą komendę:

netsh exec config.dat

Troubleshooting Wi-Fi

W netsh mamy dostęp do kontekstu wlan, a w nim mnóstwo przydatnych informacji dotyczących karty bezprzewodowej, parametrów aktualnego połączenia, sieci Wi-Fi „słyszanych” przez to urządzenie oraz wiele innych. To wszystko może nam pomóc w znalezieniu problemu w sieci WLAN.

Na początek warto sprawdzić z jaką kartą bezprzewodową mamy do czynienia:

netsh wlan show drivers

Interface name: Wi-Fi

    Driver                    : Karta bezprzewodowej sieci LAN 802.11n
    Vendor                    : Ralink Technology, Corp.
    Provider                  : Microsoft
    Date                      : 2015-05-18
    Version                   : 5.0.57.0
    INF file                  : netr28x.inf
    Type                      : Native Wi-Fi Driver
    Radio types supported     : 802.11b 802.11g 802.11n
    FIPS 140-2 mode supported : Yes
    802.11w Management Frame Protection supported : Yes
    Hosted network supported  : Yes
    Authentication and cipher supported in infrastructure mode:
                                Open            None
                                Open            WEP-40bit
                                Open            WEP-104bit
                                Open            WEP
                                WPA-Enterprise  TKIP
                                WPA-Enterprise  CCMP
                                WPA-Personal    TKIP
                                WPA-Personal    CCMP
                                WPA2-Enterprise TKIP
                                WPA2-Enterprise CCMP
                                WPA2-Personal   TKIP
                                WPA2-Personal   CCMP
                                Vendor defined  TKIP
                                Vendor defined  CCMP
                                WPA2-Enterprise Vendor defined
                                WPA2-Enterprise Vendor defined
                                Vendor defined  Vendor defined
                                Vendor defined  Vendor defined
                                Vendor defined  Vendor defined
    Authentication and cipher supported in ad-hoc mode:
                                Open            None
                                Open            WEP-40bit
                                Open            WEP-104bit
                                Open            WEP
                                WPA2-Personal   CCMP
                                Vendor defined  Vendor defined
    Wireless Display Supported: Yes (Graphics Driver: Yes, Wi-Fi Driver: Yes)

W powyższym outpucie możemy znaleźć między innymi takie informacje:

  • producent/model karty bezprzewodowej
  • wersja sterownika i jego data
  • obsługiwane standardy IEEE 802.11
  • wspierane metody uwierzytelniania i szyfrowania

Taka wiedza pozwoli nam określić możliwości karty bezprzewodowej, zakres obsługiwanych częstotliwości oraz podjąć decyzję o ewentualnym zaktualizowaniu sterownika.

Kolejna komenda da nam trochę dodatkowych informacji o karcie bezprzewodowej. Tak to może wyglądać gdy urządzenie nie jest podłączone do sieci Wi-Fi:

netsh wlan show interfaces

There is 1 interface on the system:

    Name                   : Wi-Fi
    Description            : Karta bezprzewodowej sieci LAN 802.11n
    GUID                   : da111d5e-d551-4aae-5t28-216556df565b
    Physical address       : 48:5a:b6:a2:16:11
    State                  : disconnected
    Radio status           : Hardware On
                             Software On

    Hosted network status  : Not available

Dzięki temu dowiadujemy się o adresie MAC karty bezprzewodowej i statusie radia. Ta sama komenda daje bardziej rozbudowany output gdy jesteśmy podłączeni do sieci Wi-Fi:

netsh wlan show interfaces

There is 1 interface on the system:

    Name                   : Wi-Fi
    Description            : Karta bezprzewodowej sieci LAN 802.11n
    GUID                   : da111d5e-d551-4aae-5t28-216556df565b
    Physical address       : 48:5a:b6:a2:16:11
    State                  : connected
    SSID                   : TEST_SSID
    BSSID                  : 70:0b:01:1c:24:34
    Network type           : Infrastructure
    Radio type             : 802.11n
    Authentication         : WPA2-Personal
    Cipher                 : CCMP
    Connection mode        : Profile
    Channel                : 6
    Receive rate (Mbps)    : 72
    Transmit rate (Mbps)   : 72
    Signal                 : 100%
    Profile                : TEST_SSID

    Hosted network status  : Not available

Pojawiła się informacja o sieci do której jesteśmy podłączeni – SSID, BSSID, użyte metody uwierzytelniania i szyfrowania, a także siła sygnału oraz data rates. Dzięki tym informacjom możemy sprawdzić do jakiego Access Pointa łączy się to urządzenie (sprawdzając BSSID) i ocenić czy odległość od niego nie jest zbyt duża.

Poniżej ostatnia komenda pokazująca możliwości urządzenia pod względem połączenia bezprzewodowego. Output został przycięty do najciekawszych informacji:

netsh wlan show wirelesscapabilities

Wireless System Capabilities
----------------------------
    Number of antennas connected to the 802.11 radio (value not available)

    Max number of channels the device can operate on, simultaneously (value not available)

    Co-existence Support                        : Unknown


Wireless Device Capabilities
----------------------------

Interface name: Wi-Fi

    (...)

    Station                                     : Supported

    Soft AP                                     : Supported

    Network monitor mode                        : Supported

    Wi-Fi Direct Device                         : Supported

    Wi-Fi Direct GO                             : Supported

    Wi-Fi Direct Client                         : Supported

    Protected Management Frames                 : Supported

    DOT11k neighbor report                      : Unknown

    ANQP Service Information Discovery          : Not Supported

    Action Frame                                : Not Supported

    Diversity Antenna                           : Unknown

    IBSS                                        : Supported

    Promiscuous Mode                            : Supported

    (...)

    MAC Randomization                           : Not Supported

    Fast Transition                             : Not Supported

    MU-MIMO                                     : Unknown

    Miracast Sink                               : Unknown

    BSS Transition (802.11v)                    : Unknown

    IHV Extensibility Module Configured         : Not Supported

    Number of Tx Spatial Streams                : 0

    Number of Rx Spatial Streams                : 0

    Number of Concurrent Channels Supported     : 2

    (...)

Pora na rozejrzenie się dookoła 🙂 Poniższa komenda wylistuje sieci „słyszane” przez nasze urządzenie oraz dodatkowe informacje na ich temat:

netsh wlan show networks mode=bssid

Interface name : Wi-Fi
There are 10 networks currently visible.

SSID 1 : TEST_SSID
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
    BSSID 1                 : 70:0b:01:1c:24:34
         Signal             : 100%
         Radio type         : 802.11n
         Channel            : 6
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54

SSID 2 : UPC1064xxx
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
    BSSID 1                 : 44:32:c8:32:90:11
         Signal             : 22%
         Radio type         : 802.11n
         Channel            : 1
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54

SSID 3 : UPC4496xxx
    Network type            : Infrastructure
    Authentication          : WPA2-Personal
    Encryption              : CCMP
    BSSID 1                 : 58:23:8c:7f:b8:56
         Signal             : 30%
         Radio type         : 802.11n
         Channel            : 1
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54

SSID 4 : UPC Wi-Free
    Network type            : Infrastructure
    Authentication          : WPA2-Enterprise
    Encryption              : CCMP
    BSSID 1                 : 92:5c:14:ab:9b:f2
         Signal             : 20%
         Radio type         : 802.11n
         Channel            : 6
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54
    BSSID 2                 : fe:94:e3:3f:18:1c
         Signal             : 16%
         Radio type         : 802.11n
         Channel            : 7
         Basic rates (Mbps) : 1 2 5.5 11
         Other rates (Mbps) : 6 9 12 18 24 36 48 54

Ciekawy przypadek dotyczy SSID 4 : UPC Wi-Free. Jak widzisz są tam widoczne 2 BSSID. Oznacza to tyle, że nasze urządzenie „słyszy” dwa różne radia (w domyśle dwa różne Access Pointy) rozgłaszające to samo SSID.

Poniższa komenda wylistuje wszystkie profile sieci bezprzewodowych zapisane na tym urządzeniu:

netsh wlan show profiles

Profiles on interface Wi-Fi:

Group policy profiles (read only)

User profiles

All User Profile: TEST_SSID
All User Profile: Siec_domowa
All User Profile: Kolejna_Zwyczajna_Siec

Poniższa komenda pokaże szczegóły wybranego profilu razem z odszyfrowanym hasłem dostępu w parametrze Key Content (w przypadku sieci zabezpieczonej PSK):

netsh wlan show profiles name=TEST_SSID key=clear

Profile TEST_SSID on interface Wi-Fi:
=======================================================================

Applied: All User Profile

Profile information
-------------------
    Version                : 1
    Type                   : Wireless LAN
    Name                   : TEST_SSID
    Control options        :
        Connection mode    : Connect manually
        Network broadcast  : Connect only if this network is broadcasting
        AutoSwitch         : Do not switch to other networks
        MAC Randomization  : Disabled

Connectivity settings
---------------------
    Number of SSIDs        : 1
    SSID name              : "TEST_SSID"
    Network type           : Infrastructure
    Radio type             : [ Any Radio Type ]
    Vendor extension          : Not present

Security settings
-----------------
    Authentication         : WPA2-Personal
    Cipher                 : CCMP
    Authentication         : WPA2-Personal
    Cipher                 : GCMP
    Security key           : Present
    Key Content            : hasloDOsieci123!

Cost settings
-------------
    Cost                   : Unrestricted
    Congested              : No
    Approaching Data Limit : No
    Over Data Limit        : No
    Roaming                : No
    Cost Source            : Default

W celu wyświetlenia wszystkich powyższych komend typu show oraz wielu innych wystarczy wykonać poniższą komendę. Output będzie bardzo długi więc warto całość przekierować do pliku tekstowego:

netsh wlan show all > plik.txt

Netsh pozwala również na manipulowanie połączeniem. W celu podłączenia urządzenia do sieci berzprzewodowej należy wykonać poniższą komendę:

netsh wlan connect name=TEST_SSID ssid=TEST_SSID interface=Wi-Fi
Connection request was completed successfully.

Parametr name w powyższej komendzie oznacza nazwę profilu sieci. Odłączenie od aktualnej sieci bezprzewodowej to:

netsh wlan disconnect interface=Wi-Fi
Disconnection request was completed successfully for interface "Wi-Fi".

Natomiast wyłączenie/włączenie karty sieciowej to odpowiednio:

netsh interface set interface name=Wi-Fi admin=disabled
netsh interface set interface name=Wi-Fi admin=enabled

Na koniec zostawiłem coś, czego niewiele osób spodziewałoby się tu zobaczyć. Poniższa komenda tworzy specjalny raport dostępny do przejrzenia w formie pliku HTML, a w nim między innymi:

  • outputy komend ipconfig i netsh
  • informacja o certyfikatach zainstalowanych na urządzeniu
  • informacja o urządzeniu, systemie, BIOSie
  • mnóstwo grafik i bardzo ciekawych raportów
netsh wlan show wlanreport

Generating report ...
Querying WLAN Events ...
Querying NCSI Events ...
Querying NDIS Events ...
Querying EAP Events ...
Querying WCM Events ...
Querying Kernel Events ...
Querying System Events ...
Running ipconfig ...
Running netsh wlan show all ...
Querying Wireless Profiles ...
Querying System and User Certificates ...
Querying User Info ...
Querying Network Devices ...

Report written to: C:ProgramDataMicrosoftWindowsWlanReportwlan-report-latest.html
done.

Poniżej przedstawiam kilka przykładowych danych:

Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN
Output wygenerowanego raportu WLAN

Automatyzacja

Narzędzie netsh posiada interfejs CLI więc warto zainteresować się automatyzacją korzystania z wymienionych komend. Możliwe przypadki użycia to między innymi:

  • skrypt wyłączający/resetujący/włączający kartę sieciową
  • skrypt łączący urządzenie z podanym SSID w podanym przypadku
  • generowanie raportów zawierających informacje o wersji sterowników urządzeń w sieci
  • skrypt automatycznie zbierający wszystkie informacje potrzebne do troubleshootingu

Sposobów na automatyzację jest co najmniej kilka, na pewno można zrobić skrypty dla CMD (*.bat / *.cmd) lub Windows PowerShell (*.ps1). Jednak najciekawiej zapowiada się wykorzystanie do tego Pythona – o pierwszych krokach z Pythonem pisał niedawno Damian.

Korzystanie z netsh jest bardzo przyjemne. Składnia jest zrozumiała, komendy przejrzyste i przede wszystkim działają tak jak jest to opisane. Na duży plus można zaliczyć możliwość zautomatyzowania tego procesu, a zwłaszcza uczynienie tego kroku przezroczystym dla użytkownika końcowego, który niekoniecznie musi wiedzieć o istnieniu Wiersza Poleceń.

Jakie inne ciekawe komendy znalazłeś w netsh, o których ja nie wspomniałem?

🗳 Jak przydatna była ta publikacja?

Średnia ocena 4.9 / 5. Ilość głosów: 20

Brak ocen. Bądź pierwszy!

Dziękujemy za ocenę! Zapraszamy Cię do obserwowania NSS w mediach społecznościowych!

Przykro nam, że ta publikacja okazała się być dla Ciebie nieprzydatna!

Uwaga: Twój głos będzie liczony tylko jeśli udzielisz feedbacku używając formularza poniżej.

Jak możemy poprawić tę publikację?

Łukasz Kowalski
Network Architect, Współtwórca Na Styku Sieci