Contents

通过Linux CLI连接到无线网络

1. 概述

在本教程中,我们将描述如何使用 Linux 命令行将系统连接到无线网络。即使它们是命令行实用程序,我们也不会考虑*nmcli wpa_cli wifi_menu *(来自 Arch Linux 等发行版),因为它们可能并非在所有系统中都可用。

在设置硬件和网络接口之前,我们将从一些初步步骤开始。然后是更不安全的 WEP 无线网络(因为它们更容易设置),然后是更安全的 WPA/WPA2 网络。最后,我们将介绍一些最终步骤,以确保该过程成功。

2. 预备步骤

在设置无线网络之前,我们需要执行三个步骤。首先是我们必须知道我们的网络接口的名称。为此,让我们使用iwconfig 命令:

$ iwconfig
enp0s25   no wireless extensions.
wlp3s0    IEEE 802.11 ESSID:off/any 
          Mode:Managed Access Point: Not-Associated Tx-Power=off 
          Retry short limit:7 RTS thr:off Fragment thr:off
          Power Management:on

在前面的输出中,我们看到两个接口:enp0s25(对应于没有无线扩展的以太网连接)和wlp3s0(我们将使用的网络接口)。

**得到我们要使用的接口名称后,我们需要激活它。**如果它尚未激活,我们可以使用ifconfig 命令:

$ sudo ifconfig wlp3s0 up

要管理网络接口,我们需要超级用户权限。因此,前面的命令和后面的许多命令都将在sudo 命令之前。

最后,我们可能还想扫描周围的无线网络。如果我们已经知道 ESSID(Extended Service Set IDentifier),也就是网络名称,我们可以跳过这一步。否则,我们可以使用iwlist 结合s模式和活动网络接口的名称进行扫描:

$ sudo iwlist wlp3s0 s | grep 'Cell\|Quality\|ESSID\|IEEE'
   Cell 01 - Address: AA:AA:AA:AA:AA:AA
             Quality=60/70 Signal level=-50 dBm 
             ESSID:"WLAN_NAME_1"
             IE: IEEE 802.11i/WPA2 Version 1
   Cell 02 - Address: BB:BB:BB:BB:BB:BB
             Quality=54/70 Signal level=-56 dBm 
             ESSID:"WLAN_NAME_2"
             IE: IEEE 802.11i/WPA2 Version 1
   Cell ...

grep 的使用是可选的,但是通过使用它,我们可以过滤iwlist的密集输出。更有趣的内容是地址、质量信号级别ESSID和无线安全类型(在IE部分下)。对于以下部分,我们将假设一个名为WLAN_NAME的无线网络,其密码为WLAN_PASSWORD

3. 连接到 WEP 无线网络

我们连接到网络的方式取决于网络的安全性。WEP(有线等效保密)是一种已弃用的无线网络安全算法。但是,我们仍然可以在周围找到这种类型的网络。

与这些网络的连接依赖于iwconfig命令。如果网络没有密码,我们可以使用

$ sudo iwconfig essid WLAN_NAME

**但是,如果网络受到保护,我们需要指定密码,无论是十六进制还是 ASCII 格式。**十六进制格式的密码输入如下:

$ sudo iwconfig essid WLAN_NAME key WLAN_PASSWORD

ASCII 格式要求在密码前加上s: 以指示其格式:

$ sudo iwconfig essid WLAN_NAME key s:WLAN_PASSWORD

4. 连接到 WPA/WPA2 无线网络

较新的 WPA(Wi-Fi 保护访问)加密需要不同的连接过程。**第一步包括将无线网络的名称及其密码存储在配置文件中。**为此,让我们将wpa_passphrase 命令与WLAN _NAME及其WLAN_PASSWORD 一起使用

$ sudo wpa_passphrase WLAN_NAME WLAN_PASSWORD > /etc/wpa_supplicant.conf

虽然文件*/etc/wpa_supplicant.conf*通常存储此信息,但我们可以选择任何其他路径。wpa_passphrase命令的功能是它使用哈希存储名称和密码:

$ cat /etc/wpa_supplicant.conf
  network={
           ssid="WLAN_NAME"
           #psk="WLAN_PASSWORD"
           psk=26df252bcd9b7be94233691ee676b581028e34052f13aff3c2a73122be1eea0f
          }

一旦我们有了给定无线网络的文件,我们就需要知道我们的网络接口可以使用的驱动程序。为此,我们将在没有任何其他参数的情况下运行wpa_supplicant 。除其他信息外,这将返回可用的驱动程序:

$ wpa_supplicant 
Successfully initialized wpa_supplicant
wpa_supplicant v2.10
  ...
usage:
  ...
drivers:
  nl80211 = Linux nl80211/cfg80211
  wext = Linux wireless extensions (generic)
  wired = Wired Ethernet driver
  macsec_linux = MACsec Ethernet driver for Linux
  none = no driver (RADIUS server/WPS ER)
options:
  ...

还有其他驱动程序可能出现在其他系统上。但是,最常见的驱动程序是*wext,*因此我们将使用它。如果我们的系统不能与通用驱动程序一起工作,我们应该尝试不同的驱动程序。

接下来,让我们可以使用连接参数启动wpa_supplicant以测试一切是否正常:

$ wpa_supplicant -i wlp3s0 -c /etc/wpa_supplicant.conf -D wext

-i标志用于指定网络接口。-c标志用于配置文件的路径。最后,-D标志位于驱动程序名称之前。 如果连接成功,我们可以取消进程(Ctrl+c)并使用*-B*标志再次执行它以保持它在后台运行:

$ wpa_supplicant -B -i wlp3s0 -c /etc/wpa_supplicant.conf -D wext

5. 最后步骤

将我们的系统连接到无线网络后,让我们运行dhclient 命令从 DHCP 服务器分配一个动态 IP:

$ sudo dhclient wlp3s0

最后,让我们运行iwconfig命令来检查一切是否成功:

$ iwconfig
enp0s25   no wireless extensions.
wlp3s0    IEEE 802.11  ESSID:"WLAN_NAME"  
          Mode:Managed  Frequency:5.18 GHz  Access Point: AA:AA:AA:AA:AA:AA
          Bit Rate=135 Mb/s   Tx-Power=15 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=62/70  Signal level=-48 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1  Invalid misc:70   Missed beacon:0

ESSID部分,无线网络名称替换了在没有网络连接时调用iwconfigoff/any输出。