Konfiguracja i troubleshooting klienta Wi-Fi z wiersza poleceń

Łukasz Kowalski
Łukasz Kowalski Komentarze: 14

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>
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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

Code language: plaintext (plaintext)

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=dhcpCode language: plaintext (plaintext)

Odpowiada to poniższej 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.1Code language: plaintext (plaintext)

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

Code language: plaintext (plaintext)

Odpowiada to poniższej 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.datCode language: plaintext (plaintext)

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.datCode language: plaintext (plaintext)

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

netsh exec config.datCode language: plaintext (plaintext)

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)
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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
    (...)
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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
Code language: plaintext (plaintext)

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

netsh wlan connect name=TEST_SSID ssid=TEST_SSID interface=Wi-Fi
Connection request was completed successfully.
Code language: plaintext (plaintext)

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".
Code language: plaintext (plaintext)

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=enabledCode language: plaintext (plaintext)

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ł wcześniej 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ń.

Jak wygenerować raport graficzny

Bardzo ciekawą i mało oczywistą funkcją netsh jest możliwość tworzenia specjalnych raportów dostępnych do przejrzenia w formie pliku HTML. Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.

Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze 033. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.

Artykuł oryginalnie opublikowany 20. grudnia 2018, a następnie odświeżony i zaktualizowany o nowe informacje 30. października 2023.

Komentarze: 14
Otrzymuj powiadomienia z tej dyskusji
Powiadom mnie o
guest

14 - Ilość komentarzy
Sortuj wg najlepszych
Sortuj wg najnowszych Sortuj wg najstarszych
Inline Feedbacks
View all comments
artur5236
artur5236
5 lat temu

Ciekawe przykłady zastosowawnia netsh. Do dzisiaj używałem tylko skryptów do turn on/off karty sieciowej a tutaj widzę szerokie zastosowanie. Przy okazji zauważyłem, że jeden z AP mi nie działa 🙁

Czekam na więcej

Michał
Michał
4 lat temu
Odpowiedź do  artur5236

Bardzo ciekawy artykuł przydatny do troubleshooting\’u z perspektywy obsługi klienta. Czy planujesz rozszerzenie artykułu o troubleshooting od strony infrastruktury czyli WLC i APka?

Patryk
Patryk
5 lat temu

świetny artykuł, dzięki temu artykułowi widzę że wiele problemów mogę rozwiązać bez konieczności wykonywania wizji lokalnej 🙂 więcej takich artykułów!!!

Krzysiek
Krzysiek
4 lat temu

Przydatne. Dzięki. 🙂

wwwww
wwwww
11 miesięcy temu

a co jeśli polecenie: netsh wlan show profiles name=TEST_SSID key=clear wcale nie wyświetla hasła do wifi? u mnie pokazuje tylko: „długość danych polecenia dostawcy=3276

wwwww
wwwww
11 miesięcy temu
Odpowiedź do  Łukasz Kowalski

proszę: Microsoft Windows [Wersja 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Wszelkie prawa zastrzeżone.

C:\Windows\system32>netsh wlan show profiles name=TP-Link_Parter key=clear

Profil TP-LINK_Parter w interfejsie Połączenie sieci bezprzewodowej 20:
=======================================================================

Zastosowano: Profil bieżącego użytkownika

Informacje o profilu
——————-
Wersja : 1
Typ : Bezprzewodowa sieć LAN
Nazwa : TP-LINK_Parter
Opcje sterowania :
Tryb połączenia : Połącz automatycznie
Emisja w sieci : połącz nawet, jeśli sieć nie wykonuje emisji
Autoprzełączanie : Jeśli to możliwe, przełącz na bardziej preferowaną
sieć

Ustawienia łączności
———————
Liczba identyf. SSID : 1
Nazwa SSID : „TP-LINK_Parter”
Typ sieci : Infrastruktura
Typ radia : [ Dowolny typ radia ]
Ident. rozsz. dostawcy : [ 0x00 0x80 0x86 ]

Ustawienia zabezpieczeń
—————–
Długość danych rozszerzenia dostawcy: 3276

C:\Windows\system32>

Radek
Radek
3 miesięcy temu
Odpowiedź do  wwwww

Taki wynik jest gdy do sieci autoryzujesz się certyfikatem a nie hasłem. Widzę tu nie cne zamiary 😀

Mod
3 miesięcy temu
Odpowiedź do  Radek

🤫😂