如何从命令行调出 wi-fi 接口?

Pet*_*etr 37 linux command-line networking wifi debian

我不知道如何在笔记本电脑上正确调出 Wi-Fi 卡。当我打开它并发出

$ sudo iwconfig wlan0 txpower auto
$ sudo iwlist wlan0 scan
wlan0     Interface doesn't support scanning : Network is down
Run Code Online (Sandbox Code Playgroud)

它报告网络已关闭。试图提出它也失败了:

$ sudo ifup wlan0
wlan0     no private ioctls.

Failed to bring up wlan0.
Run Code Online (Sandbox Code Playgroud)

显然我缺少一些基本的低级iw...命令。

当我dhclient在界面上发出:

$ sudo dhclient -v wlan0
Internet Systems Consortium DHCP Client 4.2.2
Copyright 2004-2011 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

^C$
Run Code Online (Sandbox Code Playgroud)

并中断它,它以某种方式启动设备,然后扫描等工作。我想避免这明显多余的步骤。

Bor*_*kov 35

sudo ip link set wlan0 upsudo ifconfig wlan0 up


17 年 4 月 13 日的回答:

详细说明马丁的答案:

ifupifdown命令的一部分ifupdown的包,现在被认为是网络配置的传统前端,相对于较新的,例如network manager

一旦ifup ifupdown从读出的配置设置/etc/network/interfaces; 它运行pre-uppost-up以及post-down从脚本/etc/network,其包括启动/etc/wpasupplicant/ifupdown.sh该过程额外wpa-*的WPA wifi的配置选项,在/etc/network/interfaces (见zcat /usr/share/doc/wpasupplicant/README.Debian.gz用于文档)。对于 WEPwireless-tools包的作用与wpa-supplicant. iwconfig也来自wireless-tools

ifconfig同时是一个较低级别的工具,它被使用ifupdown并允许更大的灵活性。例如,wifi 适配器功能有 6 种模式,而 IIRCifupdown仅涵盖托管模式(+ 漫游模式,正式不是模式?)。使用iwconfigifconfig可以启用例如无线网卡的监控模式,而使用ifupdown您将无法直接执行此操作。

ipcommand 是一种在netlink sockets之上工作的较新工具,这是一种从用户空间配置内核网络堆栈的新方法(类似ifconfig的工具构建在ioctl系统调用之上)。

  • 在 debian stretch 中,`ifconfig` 已被替换为 `ip`,替代命令是 `ip link set wlan0 up` (7认同)

Mar*_*ich 12

尝试ifconfig wlan0 up代替ifup.


小智 6

从 Ubuntu 18.04(和相应的 Debian 版本)ifconfigifup/ 开始ifdown,不推荐使用,推荐的显示界面的方法是使用以下ip命令:

ip link set dev <interface> up
ip link set dev <interface> down
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式检查可用接口:

ip link
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令显示您的接口分配的 IP 地址:

ip addr show
Run Code Online (Sandbox Code Playgroud)

或者更具体地说:

ip addr show scope global | grep inet
Run Code Online (Sandbox Code Playgroud)


Bru*_*ger 5

以下是我每天用来连接 WEP 接入点的方法:

#!/bin/bash

DEV=$(iw dev | awk '/Interface/ {interf=$2} END {print interf}')
PIDFILE=/var/run/dhcpcd-$DEV.pid


if [[ -f $PIDFILE ]] && kill -0 $(cat /var/run/dhcpcd-$DEV.pid)
then
    dhcpcd -k $DEV
fi

ifconfig $DEV down
sleep 1
iwconfig $DEV mode managed
iwconfig $DEV  key blabfoobar
ifconfig $DEV up
iwconfig $DEV essid 'Unindicted Co-conspirator'
iwconfig $DEV ap 00:0D:51:EB:E5:1E

sleep 5
dhcpcd --noipv6rs --noarp $DEV
Run Code Online (Sandbox Code Playgroud)

您必须为您想要的任何接入点输入 ESSID 和 MAC。

WPA 加密有点难。您必须有一个wpa_supplicant.conf包含适当条目的文件。像这样:

# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
network={
    ssid="FaveCoffeeHouse"
    psk="cafe241800"
    priority=1
}
Run Code Online (Sandbox Code Playgroud)

一旦你有了这样的 conf 文件,你就可以运行这个脚本:

#!/bin/bash

DEV=$(iw dev | awk '/Interface/ {print $2}')

ifconfig $DEV down
iwconfig $DEV mode managed
ifconfig $DEV up
iwconfig $DEV essid 'FaveCoffeeHouse'
iwconfig $DEV ap 00:21:1e:3d:2a:80

echo now run: wpa_supplicant -Dnl80211 -i$DEV -c./wpa_supplicant.conf 
Run Code Online (Sandbox Code Playgroud)

更新,2014-12-03:

Arch linux 就是这样,我的连接到 WEP 脚本有很大不同。我想我会将它添加到这个答案中以使其保持最新状态。

#!/bin/bash

DEV=wlp12s0

if [[ -f /run/dhcpcd-$DEV.pid ]]
then
        kill -QUIT $(cat /run/dhcpcd-$DEV.pid)
fi

ifconfig $DEV down
iw dev $DEV set type managed
ifconfig $DEV up
sleep 2

iw dev wlp12s0 connect -w 'Akond of Swat' 2462 00:7c:41:eb:e5:1e key 0:befedade

sleep 15

dhcpcd -4 --nohook 10-wpa_supplicant --noarp --noipv6rs $DEV
Run Code Online (Sandbox Code Playgroud)

我不得不iw非常突然地切换到使用。Arch LTS 内核或 WiFi 驱动程序(我的笔记本电脑有一个使用“iwl4965”驱动程序的 Intel WiFi 卡)不久前发生了变化。您必须更改接入点的频率(“2462”)和 MAC 地址才能使其正常工作。