How to scan Wifi network from terminal in Linux

By | April 2, 2023

Scanning for wifi networks will show you the ssids of all the wifi networks in your neighbourhood that your wifi adapter can detect or connect to. By default the gui network manager apps do this in kde and gnome desktop environments.

However you can also scan the wifi networks from the command prompt. In this article we take a look at some simple commands that can be used to list out all the wifi networks that can be seen by the wifi adapter.

1. iwlist

The iwlist command when run with root privileges can scan and list out the wifi networks. Using grep we can extract the specific piece of information we are interested in. Here is a minimal example:

$ sudo iwlist wlp0s20f3 scan | grep -i 'frequency\|ssid\|signal'
                    Frequency:2.442 GHz (Channel 7)
                    Quality=36/70  Signal level=-74 dBm  
                    ESSID:"AirtelFiber"
                    Frequency:2.412 GHz (Channel 1)
                    Quality=43/70  Signal level=-67 dBm  
                    ESSID:"TP-Link_6018"
                    Frequency:2.422 GHz (Channel 3)
                    Quality=33/70  Signal level=-77 dBm  
                    ESSID:"Himadri"
                    Frequency:2.432 GHz (Channel 5)
                    Quality=31/70  Signal level=-79 dBm  
                    ESSID:"dlink-15A3"
                    Frequency:2.437 GHz (Channel 6)
                    Quality=30/70  Signal level=-80 dBm  
                    ESSID:"OnePlus 5"
                    Frequency:2.447 GHz (Channel 8)
                    Quality=33/70  Signal level=-77 dBm  
                    ESSID:"Krishna"
                    Frequency:2.457 GHz (Channel 10)
                    Quality=29/70  Signal level=-81 dBm  
                    ESSID:"JioFiber-01"
                    Frequency:2.462 GHz (Channel 11)
                    Quality=25/70  Signal level=-85 dBm  
                    ESSID:"Ayush22"
                    Frequency:5.18 GHz (Channel 36)
                    Quality=22/70  Signal level=-88 dBm  
                    ESSID:"Ayush22_5G"
                    Frequency:5.22 GHz (Channel 44)
                    Quality=24/70  Signal level=-86 dBm  
                    ESSID:"Himadri_5G"
                    Frequency:2.417 GHz (Channel 2)
                    Quality=33/70  Signal level=-77 dBm  
                    ESSID:"deep wifi"
                    Frequency:2.452 GHz (Channel 9)
                    Quality=23/70  Signal level=-87 dBm  
                    ESSID:"Subash_ext"
                    Frequency:2.462 GHz (Channel 11)
                    Quality=22/70  Signal level=-88 dBm  
                    ESSID:"angshu"
                    Frequency:5.745 GHz
                    Quality=26/70  Signal level=-84 dBm  
                    ESSID:"AirtelFiber_5GHz"
$

You need to specify the interface name of your wifi adapter. If you don't already know that use the iwconfig command to find it.

Note that it is important to run the command with root privileges. Without root the command will run but the output will not be accurate and keep changing everytime.

We can see the ssid, signal level, frequency band and channel number of each wifi network. This is useful information!

2. iw command

The next command is iw and it can scan the wifi networks as well.

$ sudo iw dev wlp0s20f3 scan | grep -i 'ssid\|signal\|^bss'
BSS 98:35:ed:d4:e1:48(on wlp0s20f3) -- associated
        signal: -66.00 dBm
        SSID: AirtelFiber
BSS ac:84:c6:f4:60:18(on wlp0s20f3)
        signal: -62.00 dBm
        SSID: TP-Link_6018
BSS b6:a7:c6:53:cf:00(on wlp0s20f3)
        signal: -79.00 dBm
        SSID: 
BSS b4:a7:c6:53:cf:00(on wlp0s20f3)
        signal: -80.00 dBm
        SSID: Himadri
                HESSID: 00:00:00:00:00:00
BSS b4:b0:24:3f:29:44(on wlp0s20f3)
        signal: -79.00 dBm
        SSID: deep wifi
BSS 8c:a3:99:d3:79:f3(on wlp0s20f3)
        signal: -83.00 dBm
        SSID: JioFiber-01
BSS 98:35:ed:d4:e1:4c(on wlp0s20f3)
        signal: -82.00 dBm
        SSID: AirtelFiber_5GHz
BSS b4:a7:c6:53:cf:01(on wlp0s20f3)
        signal: -85.00 dBm
        SSID: Himadri_5G
BSS b6:a7:c6:53:cf:01(on wlp0s20f3)
        signal: -84.00 dBm
        SSID: 
BSS 8c:a3:99:2f:a9:fd(on wlp0s20f3)
        signal: -84.00 dBm
        SSID: Ayush22_5G
BSS 0c:80:63:76:5f:90(on wlp0s20f3)
        signal: -79.00 dBm
        SSID: Krishna
BSS 7a:22:e5:f1:83:6d(on wlp0s20f3)
        signal: -83.00 dBm
        SSID: OnePlus 5
$

The output has lots of information quite similar to the iwlist command.

3. nmcli command

The nmcli command is actually a tool to control NetworkManager from the terminal. And it can used to query the interface for available wifi networks. Here is a quick example.

Note that we need not provide the interface name of the wifi adapter with nmcli.

$ nmcli dev wifi list
IN-USE  BSSID              SSID              MODE   CHAN  RATE        SIGNAL  BARS  SECURITY  
        AC:84:C6:F4:60:18  TP-Link_6018      Infra  1     270 Mbit/s  64      ▂▄▆_  WPA2      
*       98:35:ED:D4:E1:48  AirtelFiber       Infra  7     130 Mbit/s  53      ▂▄__  WPA2      
        B4:B0:24:3F:29:44  deep wifi         Infra  2     270 Mbit/s  39      ▂▄__  WPA2      
        B4:A7:C6:53:CF:00  Himadri           Infra  3     130 Mbit/s  39      ▂▄__  WPA2      
        60:63:4C:84:15:AA  dlink-15A3        Infra  5     270 Mbit/s  35      ▂▄__  WPA1 WPA2 
        8C:A3:99:D3:79:F3  JioFiber-01       Infra  10    130 Mbit/s  34      ▂▄__  WPA2      
        0C:80:63:76:5F:90  Krishna           Infra  8     405 Mbit/s  32      ▂▄__  WPA2      
        8C:A3:99:2F:A9:FC  Ayush22           Infra  11    130 Mbit/s  29      ▂___  WPA2      
        8A:D8:1B:26:FC:02  --                Infra  9     195 Mbit/s  27      ▂___  WPA2      
        8C:A3:99:2F:A9:FD  Ayush22_5G        Infra  36    270 Mbit/s  27      ▂___  WPA2      
        B6:A7:C6:53:CF:01  --                Infra  44    270 Mbit/s  27      ▂___  WPA2      
        98:35:ED:D4:E1:4C  AirtelFiber_5GHz  Infra  149   270 Mbit/s  27      ▂___  WPA2      
        10:62:EB:1D:D2:F5  Debnath_Adv2      Infra  1     270 Mbit/s  25      ▂___  WPA1 WPA2 
        7A:22:E5:F1:83:6D  OnePlus 5         Infra  6     130 Mbit/s  25      ▂___  WPA2      
        B4:A7:C6:53:CF:01  Himadri_5G        Infra  44    270 Mbit/s  24      ▂___  WPA2      
        84:D8:1B:26:FC:02  Subash_ext        Infra  9     195 Mbit/s  22      ▂___  WPA1 WPA2 
        84:D8:1B:14:9F:D0  Joydip            Infra  10    270 Mbit/s  22      ▂___  WPA2      
        60:E3:27:7B:2B:D4  angshu            Infra  11    135 Mbit/s  20      ▂___  WPA2      
$

The nmcli command generates a fancy colorful output with a nice looking signal strength bar graph. The output is quite well formatted also.

Conclusion

That was a quick list of commands to query wifi networks from the command shell. If you want to learn more about wifi commands in linux check out our previous articles.

Top 3 Commands to check Wifi Information on Ubuntu / Linux - iwconfig, iwlist, nmcli
How to check what Wifi Standard is being used in Linux
How to check supported Wifi Standards on Linux
How to check USB Wifi Adapter details on Linux - iw, lsusb, iwlist, iwconfig

About Silver Moon

A Tech Enthusiast, Blogger, Linux Fan and a Software Developer. Writes about Computer hardware, Linux and Open Source software and coding in Python, Php and Javascript. He can be reached at [email protected].

Leave a Reply

Your email address will not be published. Required fields are marked *