Linux 无线网卡配置

 

无线网卡常见的配置选项

TL-WR842N路由器无线配置选项含义:

无线名称
路由器的无线(Wi-Fi)名称。
无线密码
无线加密使用WPA2-PSK/WPA-PSK加密方式、AES加密算法,无线密码为8-63个字符,最好是数字、字母、符号的组合。
信道
无线数据信号传送的通道,建议保持默认的自动,此时路由器会自动根据周围的无线环境选择一个最好的信道。模式
路由器工作的无线模式。
频段带宽
路由器传输无线数据的频段宽度。
信号强度
可以根据实际使用需要选择不同档次的信号强度。
开启AP隔离
开启之后可以安全隔离连接到路由器的各个无线设备。

无线网卡工作工作模式

无线网卡一共有4种工作模式。

被管理模式(Managed mode):你作为无线客户端直接与无线接入点(Wireless Access PointWAP)连接时,就使用这个模式。在这个模式中,无线网卡的驱动程序依赖WAP管理整个通信过程。

Ad hoc模式:当你的网络由互相直连的设备组成时,就使用这个模式。在这个模式中,无线通信双方共同承担WAP的职责。

主模式(Master mode):一些高端无线网卡还支持主模式。这个模式允许无线网卡使用特制的驱动程序和软件工作,作为其他设备的WAP

监听模式(Monitor mode):就我们的用途而言,这是最重要的模式。当你希望无线客户端停止收发数据,专心监听空气中的数据包时,就使用监听模式。要使Wireshark捕获无线数据包,你的无线网卡和配套驱动程序必须支持监听模式(也叫RFMON模式)。

大部分用户只使用无线网卡的被管理模式或ad hoc模式。图11-4展示了各种模式如何工作。






如何判断无线网卡是否识别



根据设备是 PCI 还是 USB 连接,执行 lspci -k lsusb -v 检查设备驱动是否已经加载

$ lspci -k
06:00.0 Network controller: Intel Corporation
WiFi Link 5100
        Subsystem: Intel Corporation WiFi Link
5100 AGN
        Kernel driver in use: iwlwifi
        Kernel
modules: iwlwifi

如果是 USB 设备,执行 dmesg | grep usbcore 可以看到类似下面的输出 usbcore: registered new interface driver rtl8187

如果无线usb网卡后插入的话, 也会打印上述信息.

通过 ip link 查看无线 (设备名,通常是类似 wlp2s1) 的设备。启用设备:

# ip link set <设备名>
up

如果设备加载,接口正常启用,说明不需要安装额外的驱动和固件。

错误信息SIOCSIFFLAGS: No such file or directory 说明需要固件才能工作,



根据获得的信息,在下面网址查找硬件支持:

  • Ubuntu Wiki 维护了一个设备被内核和用户空间驱动支持状况的列表。

  • Linux 无线支持页面 和硬件兼容性列表(HCL)也维护了一个内核友好的设备列表。

  • 内核页面 也有一个支持的硬件矩阵。

如果列表中没有,可能你的设备只提供了 Windows 驱动(比如 Broadcom, 3com )。这时需要用 ndiswrapper.

Ndiswrapper 可以在 Linux 中使用 Windows 驱动。兼容性列表在 这里. 需要 Windows 中安装的 .inf .sys 文件。如果有更新的网卡,请通过互联网搜索型号名称 + 'linux' 以获取更多信息。

如何静态配置无线网卡

Unix一切皆文件,其它网络配置工具都是直接或者间接地修改这些虚拟文件来达到设置目的的。

pi@raspberrypi ~ $ ls -l /sys/class/net

total 0

lrwxrwxrwx 1 root root 0 May 8 08:12 eth0 -> ../../devices/platform/bcm2708_usb/usb1/1-1/1-1.1/1-1.1:1.0/net/eth0

lrwxrwxrwx 1 root root 0 May 8 08:12 lo -> ../../devices/virtual/net/lo

lrwxrwxrwx 1 root root 0 May 8 08:13 wlan0 -> ../../devices/platform/bcm2708_usb/usb1/1-1/1-1.2/1-1.2:1.0/net/wlan0

可以看到,系统当前存在三个网络设备:lo为回环设备;eth0为有线网卡;wlan0为无线网卡。

/etc/network/interfaces文件记录了所有的静态配置信息。内核在引导的时候,会自动启动标志为“auto”的设备,例如:

auto lo

auto eth0

auto wlan0

而如果设备标志为“allow-hotplug”,那么内核在检测到热插拔事件的时候,也会自动启动。例如:



allow-hotplug lo

allow-hotplug eth0

allow-hotplug wlan0

因为回环设备始终应该是存在的,所以/etc/network/interfaces文件的内容至少是:

auto lo

iface lo inet loopback

内核启动网络设备调用的是ifupdown工具,而ifupdown工具也是依赖于/etc/network/interfaces配置文件的。



对于有线(Wired)设备,物理层和数据链路层无须操作系统干预,网卡根据CSMA/CD协议就能够自行设置,所以/etc/network/interfaces文件只需包含网络层以上的配置信息,例如IP地址、子网掩码、默认网关等。例如:



iface eth0 inet static

address 192.168.11.100

netmask 255.255.255.0

gateway 192.168.11.1

默认网关”其实是路由的概念,在这里作为设备的一个属性,和IP地址子网掩码放在一起我觉得很不妥,很容易误导初学者,尤其是存在多网卡多IP地址的情况。默认网关的生成与这条配置有关, 如果去除这条, 网络连接将变慢.



对于DNS,首先需要注意的是它属于应用层协议,和网络设备以及网络层并无直接联系。传统上LinuxDNS配置文件为/etc/resolv.conf,一行一个服务器IP地址。例如:



nameserver 218.2.135.1

nameserver 61.147.37.1

如果安装了resolvconf工具,那么DNS的配置会被接管,此时/etc/resolv.conf就变成了一个符号链接,链接到了resolvconf运行时候动态维护的一个文件。在这种情况下,DNS的配置也可以写到/etc/network/interfaces文件中了,例如:



iface eth0 inet static

address 192.168.11.100

netmask 255.255.255.0

gateway 192.168.11.1

dns-nameservers 218.2.135.1 61.147.37.1

ifupdown工具会自动调用resolvconf完成DNS设置。



此处我也甚觉不妥,因为上面讲过,DNS是应用层的概念,这样写的话让初学者觉得好像DNS是网络设备的属性一样(传统Linux还真是有很多不足之处)。



如果安装了isc-dhcp-client工具,那么/etc/network/interfaces文件中就可以直接配置DHCP,例如:



iface eth0 inet dhcp

isc-dhcp-client有自己的配置文件,可以控制从DHCP服务器上获取哪些信息(例如DNS服务器地址)。



ifupdown工具会自动调用isc-dhcp-client完成DHCP设置。



此处需要注意的是:不论resolvconf是否存在,dhclient均会直接修改/etc/resolv.conf文件(不管它是不是一个链接),不过一般情况下也没有什么问题。



对于无线(Wireless)设备,工作方式和有线设备有很大的不同(不是插上网线就能直接用的)。数据链路层的连接必须由操作系统协同完成,例如连接哪个SSID、使用哪条信道、采用什么认证方式(WEPWPA...)。这些链路层配置信息也可以写到/etc/network/interfaces文件中以供ifupdown工具使用。



iface wlan0 inet dhcp

wpa-ssid homezone

wpa-psk 密码

ifupdown工具会自动调用wpasupplicant完成WPA设置。



例如WEP的配置:



iface wlan0 inet dhcp

wireless-essid Home

wireless-key1 0123-4567-89ab-cdef

wireless-key2 12345678

wireless-key3 s:password

wireless-defaultkey 2

wireless-keymode open

ifupdown工具会自动调用wireless-tools完成WEP设置。



wpa_supplicant 配置文件, 配置方法:

更详细的配置可参考手册man wpa_supplicant.conf 

如何动态配置无线网卡

为了管理已经安装好的无线驱动,并且使无线能正常工作,需要安装一个无线连接管理工具。需要使用的工具,将依赖于下面几个因素:

  • 配置方式,从完全手动执行每一步到软件自动管理、自动启动

  • 是否使用加密及加密类型

  • 是否需要区分网络配置,是否经常切换不同网络(比如手提电脑)。

下表列出可以使用的管理无线网络的方法,按照加密和管理方式分类,给出了需要的工具。虽然还有其他办法,但这些是最常使用的

管理方法

接口激活

无线连接管理
(/=alternatives)

IP 地址分配
(/=alternatives)

手动设置,
无加密或 WEP 加密

ip

iw / iwconfig

ip / dhcpcd / dhclient

手动管理,
WPA WPA2 PSK 加密

ip

iw / iwconfig + wpa_supplicant

ip / dhcpcd / dhclient

自动管理,
支持网络配置

netctl, Wicd, NetworkManager, etc.

这些工具会自动安装手动配置需要的工具。


软件包 wireless_tools 提供了建立无线连接的基础工具。如果你需要使用 WPA/WPA2 加密,还需要 wpa_supplicant。如下这些用户空间工具可以对无线连接进行完整控制。

  • iw - 当前的 nl80211 标准,不是所有的芯片都支持。

  • wireless_tools - 已经过时,但是依然广泛使用。

  • wpa_supplicant - 提供 WPA/WPA2 加密支持

下面表格给出了 iw wireless_tools 命令的对比


iw 命令

wireless_tools 命令

描述

Iw dev

Iwconfig

获取接口名

iw dev wlan0 link

iwconfig wlan0

获取连接状态

Iw dev wlan0 station dump


获取统计数据

Ip link set wlan0 up(可能需要) 一些无线网卡在使用 wireless_tools前需要激活内核接口.如果出现错误 RTNETLINK answers: Operation not possible due to RF-kill, 请确保硬件开关已经打开.要验证接口确实打开: # ip link show wlan0

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP>
			mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether
			12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff

<BROADCAST,MULTICAST,UP,LOWER_UP> 中的UP 显示接口已经打开。

Rfkill 介绍http://www.linuxidc.com/Linux/2015-08/121119.htm


激活内核接口


iw dev wlan0 scan | less

iwlist wlan0 scan

扫描可用热点




iw dev wlan0 set type ibss

有些网卡需要先关闭无线接口(ip link set wlan0 down)才能修改模式

iwconfig wlan0 mode ad-hoc

设置操作模式为 ad-hoc.

iw dev wlan0 connect your_essid

iwconfig wlan0 essid your_essid

连接到开放网络

iw dev wlan0 connect your_essid 2432

iwconfig wlan0 essid your_essid freq 2432M

连接到开放网络的一个频道

iw dev wlan0 connect your_essid key 0:your_key

iwconfig wlan0 essid your_essid key your_key

16进制加密密码访问 WEP 加密网络

iw dev wlan0 connect your_essid key 0:your_key


iw wlan0 connect
			foo keys 0:abcde d:1:0011223344


iwconfig wlan0 essid your_essid key s:your_key


iwconfig wlan0 key s:abcde
iwconfig wlan0 key '[2]0011223344'
iwconfig wlan0 key '[2]'
iwconfig wlan0
			essid foo


ASCII 密码访问 WEP 加密网络.

iw dev wlan0 set power_save on

iwconfig wlan0 power on

启用省电模式


根据加密方式不同,需要使用密码将无线设备关联到接入点。

假设要使用的接入点 ESSID MyEssid:

  • 无加密

# iw wlan0 connect
MyEssid
  • WEP

使用十六进制或 ASCII 密码(格式是自动识别出来的,因为 WEP 密码长度是固定的):

# iw dev wlan0
connect your_essid key 0:your_key

使用十六进制或 ASCII 密码,第三个是默认 (0计数,共四个):

# iw dev wlan0
connect your_essid key d:2:your_key


WPA/WPA2

如果要连接WPA认证的无线网络,wireless-tools就无可奈何了,必须使用wpasupplicant

wpasupplicant并不是像wireless-tools一样简单地用命令行配一配就可以了,它必须先启动一个服务进程,然后使用另外一个命令行工具对服务进程进行设置,而且在WIFI连接期间该服务进程必须始终运行着。


wpa_supplicant -i wlan0 -D nl80211,wext -s -B -P /var/run/wpa_supplicant.wlan0.pid -C /var/run/wpa_supplicant

其中:-i指定设备名;-D指定认证协议;-s -B指定在后台运行,并且调试输出到syslog中;-C参数指定“ctrl_interface”的位置,注意,wpa_supplicant是可以有配置文件的,而且配置文件中可以记录WIFI的静态配置,类似于/etc/network/interfaces的功能,但是我们这里用不到,在没有配置文件的情况下,“ctrl_interface”是必不可少的,wpa_cli通过它与之交互。


前台方式:

wpa_supplicant -i wlan0 -D nl80211,wext -dd -P /var/run/wpa_supplicant.wlan0.pid -C /var/run/wpa_supplicant

其中,-dd表示输出更详细的调试信息。


查看后台启动的进程参数:

pi@raspberrypi ~ $ ps ax | grep wpa

1618 ? Ss 0:00 /sbin/wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid -i wlan0 -D nl80211,wext -c /etc/wpa_supplicant/wpa_supplicant.conf

2379 pts/0 S+ 0:00 grep --color=auto wpa


然后使用wpa_cli进行设置。wpa_cli可以工作在交互模式,也可以命令行模式。例如在交互模式下执行如下命令加入并启用网络:

status:列出目前的联网状态。
list:列出所有备选网络。目前正连接到的网络会标[CURRENT],禁用的网络会标[DISABLE]
add_network:增加一个备选网络,输出新网络的号码(这个号码替代下文的[network_id])。注意新网络此时是禁用状态。
set_network [network_id] ssid “Your SSID”:设置无线网的名称(SSID
set_network [network_id] key_mgmt WPA-PSK:设置无线网的加密方式为WPA-PSK/WPA2-PSK
set_network [network_id] psk “Your Password”:设置无线网的PSK密码
enable_network [network_id]:启用网络。启用后如果系统搜索到了这个网络,就会尝试连接。
disable_network [network_id]:禁用网络。
save_config:保存配置。


> add_network

0 <--- 记住这个号码!

> set_network 0 ssid "ChinaUnicom-Me"

OK

> set_network 0 key_mgmt WPA-PSK

OK

> set_network 0 psk "密码"

OK

> enable_network 0

OK

> save_config <--------别忘了这个,否则重启之后网络配置可能丢失

OK


查看配置文件:

pi@raspberrypi ~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1


network={

ssid="Lair"

psk="knc4-102"

key_mgmt=WPA-PSK

scan_ssid=1 手动添加这一行, 可以支持链接隐藏的wifi

}

配置静态无线ip:

auto wlan0

allow-hotplug wlan0

iface wlan0 inet manual

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

address 192.168.1.105

netmask 255.255.255.0

gateway 192.168.1.1

以上配置有错误.



网络配置修改后, 重启服务

sudo /etc/init.d/networking restart

sudo service networking restart


假设设备使用 wext 驱动。如果无法工作,可能需要调整选项,参见 WPA_Supplicant(https://wiki.archlinux.org/index.php/WPA_supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29)

如果连接成功,在新终端中执行后续命令或(或者通过 Ctrl+c 退出并使用 -B 参数在后台再次执行上述命令。WPA_Supplicant 页面包含更多参数和配置文件的信息。

通过下面命令确认是否连接成功:

# iw dev wlan0 link


获取 IP 地址

使用 DHCP# dhcpcd wlan0

# dhclient wlan0

如果要设置DHCP,很简单。例如:

dhclient wlan0 -r
(释放IP,
相当于windows下的
ipconfig /release) 
dhclient wlan0
(申请IP,
相当于windows下的
ipconfig /renew)

静态 IP

ip address add 192.168.1.3/24 dev wlan0 
ip route add default via 192.168.1.1 dev wlan0 
第一行增加IP地址,第二行设置默认路由。

若要删除以 10. 起始的 IP 路由表中的所有路由,请键入:

route delete 10.*

route del default




https://wiki.archlinux.org/index.php/Wireless_network_configuration_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29#.E5.AE.89.E8.A3.85_driver.2Ffirmware

https://wireless.wiki.kernel.org/en/users/Documentation/iw/replace-iwconfig


https://wiki.archlinux.org/index.php/WPA_supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29

http://www.jb51.net/network/60999.html

http://www.cnblogs.com/abel/p/3441175.html

http://www.oschina.net/question/23734_117144

http://blog.csdn.net/jacobywu/article/details/7366080 wpa配置文件

http://shumeipai.nxez.com/2013/09/30/use-wpa-cli-command-line-to-configure-wi-fi-wireless-lan.html wpa_cli 命令使用方法

http://blog.csdn.net/stephen_yu/article/details/12492839 iwconfig 使用


http://www.360doc.com/content/14/0521/16/7821691_379668471.shtml wpa_supplicant.conf 配置说明

posted @ 2015-10-18 09:30  kunzj  阅读(34922)  评论(0编辑  收藏  举报