linux设置无线网络

操作环境: ArchLinux Linux myhost 2.6.36-ARCH
硬件: USB 无线网卡 TL-WN821N

无线网卡工作工作模式
无线网卡一共有4种工作模式。
被管理模式(Managed mode):你作为无线客户端直接与无线接入点(Wireless Access Point,WAP)连接时,就使用这个模式。在这个模式中,无线网卡的驱动程序依赖WAP管理整个通信过程。
Ad hoc模式:当你的网络由互相直连的设备组成时,就使用这个模式。在这个模式中,无线通信双方共同承担WAP的职责。
主模式(Master mode):一些高端无线网卡还支持主模式。这个模式允许无线网卡使用特制的驱动程序和软件工作,作为其他设备的WAP。
监听模式(Monitor mode):就我们的用途而言,这是最重要的模式。当你希望无线客户端停止收发数据,专心监听空气中的数据包时,就使用监听模式。要使Wireshark捕获无线数据包,你的无线网卡和配套驱动程序必须支持监听模式(也叫RFMON模式)。
大部分用户只使用无线网卡的被管理模式或ad hoc模式。

如何判断无线网卡是否识别
根据设备是 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,首先需要注意的是它属于应用层协议,和网络设备以及网络层并无直接联系。传统上Linux的DNS配置文件为/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、使用哪条信道、采用什么认证方式(WEP、WPA…)。这些链路层配置信息也可以写到/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 加密ipiw / iwconfigip / dhcpcd / dhclient
手动管理,WPA 或 WPA2 PSK 加密ipiw / iwconfig + wpa_supplicantip / 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 devIwconfig获取接口名
iw dev wlan0 linkiwconfig 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/ether12: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 /lessiwlist 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_essidiwconfig wlan0 essid your_essid连接到开放网络
iw dev wlan0 connect your_essid 2432iwconfig wlan0 essid your_essid freq 2432M连接到开放网络的一个频道
iw dev wlan0 connect your_essid key 0:your_keyiwconfig 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:0011223344iwconfig 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 oniwconfig 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_(简体中文))。
如果连接成功,在新终端中执行后续命令或(或者通过 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


  1. 安装 wireless_tools 和 madwifi
    pacman -S wireless_tools madwifi
  2. 查看网卡状态
    lsusb
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
    Bus 002 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
    Bus 001 Device 003: ID 0cf3:7015 Atheros Communications, Inc.
    在USB接口001/003上检测到网卡。
    iwconfig
    lo no wireless extensions.
    eth0 no wireless extensions.
    wlan0 IEEE 802.11bgn ESSID:off/any
    Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
    Retry long limit:7 RTS thr:off Fragment thr:off
    Encryption key:off
    Power Management:off
    无线网卡为 wlan0
  3. 激活网卡
    ifconfig wlan0 up
    因为我的网卡必需要先激活才能扫描,否则下一步scan会出现错误:wlan0 Interface doesn’t support scanning.
  4. 扫描网络
    iwlist wlan0 scan
    wlan0 Scan completed :
    Cell 01 - Address: 54:E6:FC:22:E1:D2
    Channel:1
    Frequency:2.412 GHz (Channel 1)
    Quality=53/70 Signal level=-57 dBm
    Encryption key:on
    ESSID:“TP-LINK_22E1D2”
    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
    9 Mb/s; 12 Mb/s; 18 Mb/s
    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
    Mode:Master
    Extra:tsf=000000292a41bd80
    Extra: Last beacon: 960ms ago
    IE: Unknown: 000E54502D4C494E4B5F323245314432
    IE: Unknown: 010882848B960C121824
    IE: Unknown: 030101
    IE: IEEE 802.11i/WPA2 Version 1
    Group Cipher : CCMP
    Pairwise Ciphers (1) : CCMP
    Authentication Suites (1) : PSK
    IE: WPA Version 1
    Group Cipher : CCMP
    Pairwise Ciphers (1) : CCMP
    Authentication Suites (1) : PSK
    发现WPA2-PSK/WPA-PSK 加密网络 TP-LINK_22E1D2
    因为加密方式为 WPA-PSK 所以得用 wpa_supplicant 而不能使用 iwconfig wlan0 key xxx 形式,iwconfig key方式适用于WEP。
  5. 配置 wpa_supplicant
    新建文件 /etc/my_wpa_supplicant.conf
    ctrl_interface=/var/run/wpa_supplicant
    network={
    ssid=“TP-LINK_22E1D2”
    psk=“密码”
    }
    因为全部使用默认配置,所以配置文件非常简单。
  6. 连接wlan0到网络,并以daemon方式运行
    wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf
    -B Background 在后台以daemon 运行
    -i interface
    -c 配置文件
  7. 设置IP地址
    ifconfig wlan0 192.168.1.131
    ifconfig 查看状态
    wlan0 Link encap:Ethernet HWaddr 54:E6:FC:03:0D:6B
    inet addr:192.168.1.131 Bcast:192.168.1.255 Mask:255.255.255.0
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:95 errors:0 dropped:0 overruns:0 frame:0
    TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:32434 (31.6 Kb) TX bytes:576 (576.0 b)
  8. 加入网关到路由
    我的网关的是192.168.1.1
    添加通过wlan0访问的网关
    route add default gw 192.168.1.1 dev wlan0
    route 查看route状态
    Kernel IP routing table
    Destination Gateway Genmask Flags Metric Ref Use Iface
    192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
    default 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
  9. 设置完毕。
    以后上线只需运行
    wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf
    ifconfig wlan0 192.168.1.131
    route add default gw 192.168.1.1 dev wlan0
    即可
    可以在/etc/rc.d/rc.local加入开机启动
  10. 相关命令
    关闭连接
    wpa_cli terminate
    连接状态
    wpa_cli status
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值