通过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部分,无线网络名称替换了在没有网络连接时调用iwconfig的off/any输出。