如何使用命令行连接到 WPA wifi 网络?

Ken*_*der 134 command-line wireless wpa

所以基本上,iwconfig当我不在 X 中时,我想用它来连接到我的 wifi 网络。但我只是在手册页中看不到这样做的方法。任何的想法?

Rin*_*ind 131

iw (list/config) 只能处理 WEP。

您需要wpasupplicant提供wpa_supplicant命令的软件包,如有必要,请通过sudo apt-get install wpasupplicant.

您将 SSID 和密码输入/etc/wpa_supplicant.conf(需要 sudo)。

例子:

network={
    ssid="ssid_name"
    psk="password"
}
Run Code Online (Sandbox Code Playgroud)

假设您的接口是 wlan0,您可以连接:

sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf -D wext
sudo dhclient wlan0
Run Code Online (Sandbox Code Playgroud)

“wext”是一个驱动程序,它是针对每张卡的;参考wpa_supplicant -h。例子:

hostap (default) Host AP driver (Intersil Prism2/2.5/3). (this can also be used with Linuxant DriverLoader).
hermes Agere Systems Inc. driver (Hermes-I/Hermes-II).
madwifi MADWIFI 802.11 support (Atheros, etc.).
atmel ATMEL AT76C5XXx (USB, PCMCIA).
wext Linux wireless extensions (generic).
ndiswrapper Linux ndiswrapper.
broadcom Broadcom wl.o driver.
ipw Intel ipw2100/2200 driver.
wired wpa_supplicant wired Ethernet driver
roboswitch wpa_supplicant Broadcom switch driver
bsd BSD 802.11 support (Atheros, etc.).
ndis Windows NDIS driver.
Run Code Online (Sandbox Code Playgroud)


Ale*_*idt 82

此链接显示了所有内容并且对我来说效果很好:http : //linux.icydog.net/wpa.php

我正在复制这里的内容,所以我们有它,以防该站点脱机。

命令行 WPA

有时您会在无法访问 GUI 网络工具的命令行中 -- 但您的访问点是由 WPA 保护的。你做什么工作?

假设您的无线网卡确实有效(即 iwconfig 可以看到它并与之交互),使用 wpa_supplicant 实际上非常简单。安装 wpa_supplicant

现在大多数发行版都默认安装了 wpa_supplicant。如果您有可用的 wpa_passphrase 和 wpa_supplicant 命令,那么您就可以开始了。否则,您将需要通过执行以下操作来安装软件包(对于 Ubuntu):

$ sudo apt-get install wpasupplicant
Run Code Online (Sandbox Code Playgroud)

或者(对于 Fedora):

# yum install wpa_supplicant
Run Code Online (Sandbox Code Playgroud)

或者无论您的发行版是什么命令。

生成配置文件

现在安装了 wpa_supplicant,我们将创建它的配置文件。一旦您知道 SSID 和 WPA 密码,您所要做的就是运行:

$ wpa_passphrase myrouter mypassphrase > wpa.conf
Run Code Online (Sandbox Code Playgroud)

当然,请将“myrouter”替换为您路由器的 SSID,将“mypassphrase”替换为您的 WPA 密码,将“wpa.conf”替换为您想要存储配置的任何文件。此文件名不必遵循特定格式或有一个特定的扩展名。

或者,为了避免在命令行上输入密码(因此它不会保存在 shell 的历史记录中),您可以在命令行上仅指定 SSID。wpa_passphrase 将等待您输入密码,然后输入:

$ wpa_passphrase myrouter > wpa.conf
mypassphrase
Run Code Online (Sandbox Code Playgroud)

您应该最终得到一个如下所示的文件:

network={
    ssid="myrouter"
    #psk="mypassphrase"
    psk=8ada1f8dbea59704ac379538b4d9191f6a72390581b4cd7a72864cea685b1a7f
}
Run Code Online (Sandbox Code Playgroud)

建立联系

现在我们将实际运行 wpa_supplicant 来连接到无线网络。首先,如果您的路由器广播其 SSID(默认情况下它们都会广播),您可能希望确保您的无线网卡确实可以看到它:

$ iwlist scan
Run Code Online (Sandbox Code Playgroud)

您可能必须以 root 身份运行它才能强制刷新。

接下来,您需要了解三项信息:

  1. 哪些 wpa_supplicant 无线驱动程序用于您的卡。运行wpa_supplicant --help列出了它拥有的不同驱动程序(在“驱动程序:”下)。作为0.5.8,有用的选择是:wexthostapmadwifiatmelndiswrapper,和ipw(IPW仅用于旧的内核;> = 2.6.13应该使用w外)。如果您没有看到与您的卡匹配的特定匹配项,请尝试使用 wext,因为这是一种包罗万象的方法。
  2. 您卡的网络设备。这通常是 eth1 或 wlan0,但如果您不确定,您可以直接运行iwconfig. 它将报告非无线设备的“无无线扩展”,并将显示任何无线设备的一些数据。
  3. 您在上一步中创建的配置文件的路径。

现在你有了这些数据,运行(以 root 身份):

# wpa_supplicant -D[driver] -i[device] -c[/path/to/config]
Run Code Online (Sandbox Code Playgroud)

选项和参数之间没有空格。不要包括括号,因为我只是为了清楚起见添加了括号。例如,对于我的笔记本电脑,它看起来像这样:

# wpa_supplicant -Dwext -ieth1 -c/root/wpa.conf
Run Code Online (Sandbox Code Playgroud)

您还可以使用该-B选项在后台运行它,这样它就不会占用您的控制台。

现在您已与网络关联。

上网

要真正上网,您必须以某种方式获得 IP。大多数人只想从 DHCP 服务器(可能是路由器内置的服务器)获取动态 IP。(我不打算介绍设置静态 IP 和路由表,因为这本身就是一个野兽。)

要获得 DHCP 租约,首先释放您仍然持有的任何租约(以 root 用户身份):

# dhclient -r
Run Code Online (Sandbox Code Playgroud)

然后请求一个新的租约(当然用你的网络设备的名称替换 eth1,与你在上一节中使用的相同):

# dhclient eth1
Run Code Online (Sandbox Code Playgroud)

至少在理论上,您现在拥有了一个 IP。冲浪快乐!


Dav*_*vid 9

Debian 和其他发行版默认将 wpa_suplicant 作为服务运行,以管理 wifi 网络。wpa_suplicant 可以由不同的客户端/前端处理,例如网络管理器 GUI。这在这个debian wiki 中有更好的解释。

wpa_cli 是命令行 wpa_suplicant 客户端,用于管理 wifi 网络。

编辑:我刚刚发现这篇文章解释了如何使用 nmcli,它比 wpa_cli 好得多,因为它与 GUI 网络管理器及其设置和保存的 wifi 网络兼容。

wpa_cli 的使用示例

检查我是否已经有启用 wifi 的网络接口:

# iwconfig
wlan0     IEEE 802.11bgn  ESSID:off/any  
          Mode:Managed  Access Point: Not-Associated   Tx-Power=22 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:on
Run Code Online (Sandbox Code Playgroud)

检查 wpa_suplicant 进程是否正在运行:

# ps -e | grep wpa
1881 ?        00:00:07 wpa_supplicant
Run Code Online (Sandbox Code Playgroud)

进入wpa客户端交互模式:

# wpa_cli
Run Code Online (Sandbox Code Playgroud)

列出可用的接入点:

> scan
> scan_results
Run Code Online (Sandbox Code Playgroud)

......你会得到这样的东西:

bssid / frequency / signal level / flags / ssid
e0:60:66:7c:81:7f       2417    -66     [WPA2-PSK-CCMP][ESS]    vodafone817E
e0:60:66:61:83:4b       2452    -76     [WPA2-PSK-CCMP][WPS][ESS]       vodafone834A
f8:8e:85:c5:65:c2       2462    -76     [WPA-PSK-CCMP+TKIP][WPS][ESS]   MOVISTAR_65C1
a8:d3:f7:46:0c:be       2472    -83     [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]       Orange-0CBC
...
Run Code Online (Sandbox Code Playgroud)

添加您的 AP:

> add_network
> set_network 0 ssid "vodafone817E"
> set_network 0 psk "my-pass-phrase"
Run Code Online (Sandbox Code Playgroud)

选择它作为当前:

> enable_network 0
Run Code Online (Sandbox Code Playgroud)

连接到它:

> reconnect
Run Code Online (Sandbox Code Playgroud)

检查状态:

> status
Run Code Online (Sandbox Code Playgroud)

退出 wpa_cli:

> quit
Run Code Online (Sandbox Code Playgroud)

在 shell 中,请求 DHCP 获取 IP 和网络设置:

# dhclient -r
# dhclient wlan0
Run Code Online (Sandbox Code Playgroud)