Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3002457
  • 博文数量: 674
  • 博客积分: 17881
  • 博客等级: 上将
  • 技术积分: 4849
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 10:15
文章分类

全部博文(674)

文章存档

2013年(34)

2012年(146)

2011年(197)

2010年(297)

分类: LINUX

2011-11-24 15:52:19

Wireless tools for Linux介绍

Wireless tools for Linux是一个Linux命令行工具包,用来设置支持Linux Wireless Extension的无线设备。Wireless tools for Linux 和 Linux Wireless Extension 由 Jean Tourrilhes在维护,由Hewlett-Packard(HP惠普)赞助。

大多数基于Linux内核的操作系统都包含Wireless tools。在许多GNU/Linux 发行版中,都缺省安装这个工具包,即使是没有自动安装,也能很容易地找到其二进制代码安装包。

Wireless Extension (WE)是一组通用的API,能在用户空间对通用Wireless LANs进行配置和统计。它的好处在于仅通过一组单一的工具就能对各种各样的Wireless LANs进行管理,不过它们是什么类型,只要其驱动支持Wireless Extension就行;另一个好处就是不用重启驱动或Linux就能改变这些参数。

       Wireless Tools (WT)就是用来操作Wireless Extensions的工具集,它们使用字符界面,虽然粗糙,但支持所有Wireless Extension。虽然还有很多其他管理Wireless Extensions的工具,但Wireless Tools是参考实现,它包括以下工具:

        iwconfig:设置基本无线参数

        iwlist:扫描、列出频率,比特率,密钥等

        iwspy:获取每个节点链接的质量

        iwpriv:操作Wireless Extensions 特定驱动

        ifrename: 基于各种静态标准命名接口

大多数 Linux 发行版本都在其网络初始化脚本中集成Wireless Extension,以便启动时配置无线接口。他们还将Wireless Tools作为其标准封装包。

无线配置也可以使用hotplug或uDev脚本来完成,需要发行版特定的支持,这样能支持任何可移动的无线接口(Pcmcia,CardBus,USB接口...)。

Wireless Tools(从版本19)开始完全支持IEEE 802.11标准参数和设备,支持旧风格的设备和最专有协议,并准备处理HiperLan。较新版本增加了更多802.11支持。但不幸的是,并非所有的驱动程序支持所有这些功能。

最新的稳定版本的Wireless Tools是版本29,大多数愚蠢的错误已被删除,并支持所有的Wireless Extension(从版本v11至v21)。可以从下载最新的Wireless Tools。

 
 
 
  我们经常会用到的主要是iwlist、iwconfig、 iwpriv:
 

命令行:(ap不需要验证密码)

iwlist mlan0 scan //搜索ap

iwconfig mlan0 essid “linksys” //连接ap

udhcpc –i mlan0  //获得动态IP

 

命令行:(ap需要验证密码)

iwlist mlan0 scan //搜索ap

iwconfig mlan0 key  xxxxxxxxxx  // 输入验证密码

iwconfig mlan0 key open //密码验证功能打开

iwconfig mlan0 essid “linksys” //连接ap

udhcpc –i mlan0 //获得动态IP

  

   关于iwconfig 可以看上一篇文章;这里补充一下有关iwpriv:
       [root@root- /]#iwpriv
    mlan0     Available private ioctls :
          extscan          (8BFA) : set   0 int   & get   2 char
          hostcmd          (8BE4) : set 2047 byte  & get 2047 byte
          arpfilter        (8BE6) : set 2047 byte  & get 2047 byte
          regrdwr          (8BE3) : set 256 char  & get 256 char
          sdcmd52rw        (8BFE) : set   7 byte  & get   7 byte
          sdcmd53rw        (8BFF) : set   0 char  & get   0 char
          setgetconf       (8BEA) : set 2000 byte  & get 2000 byte
          getcis           (8BE1) : set   0       & get 512 byte
          scantype         (8BEB) : set   8 char  & get   8 char
          deauth           (0001) : set   1 addr  & get   0
          getNF            (0001) : set   1 int   & get   1 int
          getRSSI          (0002) : set   1 int   & get   1 int
          bgscan           (0004) : set   1 int   & get   1 int
          enable11d        (0005) : set   1 int   & get   1 int
          adhocgrate       (0006) : set   1 int   & get   1 int
          sdioclock        (0007) : set   1 int   & get   1 int
          wmm              (0008) : set   1 int   & get   1 int
          uapsdnullgen     (000A) : set   1 int   & get   1 int
          setcoalescing    (000B) : set   1 int   & get   1 int
          adhocgprot       (000C) : set   1 int   & get   1 int
          disable_chsw     (000F) : set   1 int   & get   1 int
          setpowercons     (0001) : set   1 int   & get   1 int
          wmm_qosinfo      (0002) : set   1 int   & get   1 int
          lolisteninter    (0003) : set   1 int   & get   1 int
          psnullinterval   (0005) : set   1 int   & get   1 int
          bcnmisto         (0006) : set   1 int   & get   1 int
          ldocfg           (0008) : set   1 int   & get   1 int
          rtsctsctrl       (000F) : set   1 int   & get   1 int
          moduletype       (000B) : set   1 int   & get   1 int
          autodeepsleep    (000C) : set   1 int   & get   1 int
          enhanceps        (000D) : set   1 int   & get   1 int
          wakeupmt         (000E) : set   1 int   & get   1 int
          setrxant         (0001) : set   1 int   & get   0
          settxant         (0002) : set   1 int   & get   0
          authalgs         (0004) : set   1 int   & get   0
          encryptionmode   (0005) : set   1 int   & get   0
          setregioncode    (0006) : set   1 int   & get   0
          setlisteninter   (0007) : set   1 int   & get   0
          setmultipledtim  (0008) : set   1 int   & get   0
          setbcnavg        (0009) : set   1 int   & get   0
          setdataavg       (000A) : set   1 int   & get   0
          associate        (000B) : set   1 int   & get   0
          getregioncode    (0001) : set   0       & get   1 int
          getlisteninter   (0002) : set   0       & get   1 int
          getmultipledtim  (0003) : set   0       & get   1 int
          gettxrate        (0004) : set   0       & get   1 int
          getbcnavg        (0005) : set   0       & get   1 int
          getdataavg       (0006) : set   0       & get   1 int
          getauthtype      (0007) : set   0       & get   1 int
          getrsnmode       (0008) : set   0       & get   1 int
          act_paircipher   (0009) : set   0       & get   1 int
          act_groupcipher  (000A) : set   0       & get   1 int
          getdtim          (000B) : set   0       & get   1 int
          getrxant         (0001) : set   0       & get  12 char
          gettxant         (0002) : set   0       & get  12 char
          gettsf           (0003) : set   0       & get  12 char
          wpssession       (0004) : set   0       & get  12 char
          deepsleep        (8BFB) : set   1 char  & get   6 char
          adhocstop        (0004) : set   0       & get   0
          radioon          (0001) : set   0       & get   0
          radiooff         (0002) : set   0       & get   0
          rmaeskey         (0003) : set   0       & get   0
          crypto_test      (0006) : set   0       & get   0
          reasso-on        (0007) : set   0       & get   0
          reasso-off       (0008) : set   0       & get   0
          wlanidle-on      (0009) : set   0       & get   0
          wlanidle-off     (000A) : set   0       & get   0
          softreset        (000C) : set   0       & get   0
          sleepparams      (0002) : set  64 char  & get  64 char
          requesttpc       (0004) : set  64 char  & get  64 char
          powercap         (0005) : set  64 char  & get  64 char
          measreq          (000C) : set  64 char  & get  64 char
          bca-ts           (0003) : set  64 char  & get  64 char
          scanmode         (0006) : set  64 char  & get  64 char
          getadhocstatus   (0009) : set  64 char  & get  64 char
          setgenie         (000A) : set  64 char  & get  64 char
          getgenie         (000B) : set  64 char  & get  64 char
          qstatus          (000D) : set  64 char  & get  64 char
          ts_status        (000E) : set  64 char  & get  64 char
          setaeskey        (0001) : set  32 char  & get   0
          getaeskey        (0001) : set   1 int   & get 128 char
          version          (0002) : set   1 int   & get 128 char
          verext           (0003) : set   1 int   & get 128 char
          setwpaie         (8BE0) : set  24 char  & get   0
          setband          (0001) : set  10 char  & get   0
          setadhocch       (0002) : set  10 char  & get   0
          chanswann        (0003) : set  10 char  & get   0
          getband          (0001) : set   0       & get  10 char
          getadhocch       (0002) : set   0       & get  10 char
          getlog           (8BE9) : set   0       & get 512 char
          tpccfg           (0001) : set  16 int   & get  16 int
          scanprobes       (0006) : set  16 int   & get  16 int
          ledgpio          (0005) : set  16 int   & get  16 int
          sleeppd          (0007) : set  16 int   & get  16 int
          rateadapt        (0008) : set  16 int   & get  16 int
          getSNR           (0009) : set  16 int   & get  16 int
          getrate          (000A) : set  16 int   & get  16 int
          getrxinfo        (000B) : set  16 int   & get  16 int
          atimwindow       (000C) : set  16 int   & get  16 int
          bcninterval      (000D) : set  16 int   & get  16 int
          sdiopullctrl     (000E) : set  16 int   & get  16 int
          scantime         (000F) : set  16 int   & get  16 int
          sysclock         (0010) : set  16 int   & get  16 int
          txcontrol        (0012) : set  16 int   & get  16 int
          hscfg            (0014) : set  16 int   & get  16 int
          hssetpara        (0015) : set  16 int   & get  16 int
          inactoext        (0016) : set  16 int   & get  16 int
          dbgscfg          (0017) : set  16 int   & get  16 int
          drvdbg           (0018) : set  16 int   & get  16 int
          drvdelaymax      (001A) : set  16 int   & get  16 int
          intfctrl         (001B) : set  16 int   & get  16 int
          setquietie       (001C) : set  16 int   & get  16 int
          ctspowerctrl     (001E) : set  16 int   & get  16 int
          psmode           (001F) : set  16 int   & get  16 int
          setuserscan      (0001) : set 2000 byte  & get 2000 byte
          getscantable     (0002) : set 2000 byte  & get 2000 byte
          setmrvltlv       (0003) : set 2000 byte  & get 2000 byte
          getassocrsp      (0004) : set 2000 byte  & get 2000 byte
          addts            (0005) : set 2000 byte  & get 2000 byte
          delts            (0006) : set 2000 byte  & get 2000 byte
          qconfig          (0007) : set 2000 byte  & get 2000 byte
          qstats           (0008) : set 2000 byte  & get 2000 byte
          txpktstats       (000C) : set 2000 byte  & get 2000 byte
          getcfptable      (0009) : set 2000 byte  & get 2000 byte
          mefcfg           (000A) : set 2000 byte  & get 2000 byte
          getmem           (000B) : set 2000 byte  & get 2000 byte
    通过iwpriv,我们可以得到AP的一些参数设置,也可以设置自己的WIFI参数。
       [root@root- /]#iwpriv mlan0 getband
       mlan0     getband:bg
 -----------------------------------------------------------------

1.WIFI介绍
Wi-Fi(WirelessFidelity),即无线保真,与蓝牙技术一样,同属于在办公室和家庭中使用的短距离无线技术。该技术使用的使2.4GHz附近的频段,该频段目前尚属没用许可的无线频段。其目前可使用的标准有两个,分别是IEEE802.11a和IEEE802.11b。Wi-Fi技术突出的优势在于: 其一,无线电波的覆盖范围广,基于蓝牙技术的电波覆盖范围非常小,半径大约只有50英尺左右约合15米,而Wi-Fi的半径则可达300英尺左右约合100米。 其二,传输速度非常快,可以达到11mbps,符合个人和社会信息化的需求。根据无线网卡使用的标准不同,WIFI的速度也有所不同。其中IEEE802.11b最高为11Mbps(部分厂商在设备配套的情况下可以达到22Mbps),IEEE802.11a为54Mbps、IEEE802.11g也是54Mbps。WIFI无线网络由AP(Access Point)和无线网卡组成。AP一般称为网络桥接器或接入点,AP每100ms将SSID(Service Set Identifier)经由beacons(信号台)封包广播一次,beacons封包的传输速率是1 Mbit/s,并且长度相当的短,所以这个广播动作对网络效能的影响不大。因为Wi-Fi规定的最低传输速率是1 Mbit/s ,所以确保所有的Wi-Fi client端都能收到这个SSID广播封包,client 可以借此决定是否要和这一个SSID的AP连线。使用者可以设定要连线到哪一个SSID。Wi-Fi系统总是对用户端开放其连接标准,并支援漫游,这就是Wi-Fi的好处。但亦意味着,一个无线适配器有可能在性能上优于其他的适配器。由于Wi-Fi通过空气传送信号,所以和非交换以太网有相同的特点。 Wifi加密方式主要有以下三种:WEP(有线等效加密)——采用WEP 64位或者128位数据加密 WPA-PSK [TKIP]——采用预共享密钥的Wi-Fi保护访问,采用WPA-PSK标准加密技术,加密类型为TKIP WPA2-PSK [AES]——采用预共享密钥的Wi-Fi保护访问(版本2),采用WPA2-PSK标准加密技术,加密类型为AES
2.WIFI相关工具安装
在加载wifi驱动之前,我们需要安装应用层的工具,即wireless tools与wpa_supplicant。

2.1 wireless-tools安装
wireless-tools是一组无线网络扫描器及监控工具,可以用于监控、分析、以及测试WiFi网络,支持几乎所有的无线网卡和驱动,它可以支持WEP的AP,但它不能连接到那些只支持WPA的AP。连接AP需要使用它所编译出来的工具。

1、资源下载

下载wireless_tools.29.tar.gz

2、解压

# tar zxvf wireless_tools.29.tar.gz

#cd wireless_tools.29

3、修改Makefile

## Compiler to use (modify this for cross compile).

CC = mipsel-linux-gcc

4、编译

#make

5、拷贝

将生成的工具:iwlist、iwconfig、iwpriv等拷贝到目标板上,路径为:/root/app/bin/wifitools/

2.3 wpa-supplicant安装
由于wireless tools只能支持连接WEP的AP,所以要支持WPA的AP就需要移植wpa_supplicant。

Rt73的原始驱动中采用的wpa_supplicant的版本比较旧,是0.5.8,我们采用版本。

1、下载资源

本文使用的是:

最新 wpa-supplicant

2、文件修改

对照2009_0206_RT73_Linux_STA_Drv.bz2中WPA_Supplicant-0.5.8的文件,修改0.5.11中的对应文件,

3、解压

# tar zxvf wpa_supplicant-0.5.11.tar.gz

# cd wpa_supplicant-0.5.11

4、编译

#cp defconfig .config #使用默认的config

#export CC=mipsel-linux-gcc

#make

5、安装

将生成的wpa_supplicant 拷贝到目标板上, 路径为:/root/app/bin/wifitools/下

6、编写wpa网络的配置文件wpa_supplicant.conf

在目标板上目录为/root/appb/conf/wifi/下,创建一个wpa_supplicant.conf,键入以下内容:

ctrl_interface=/var/run/wpa_supplicant

ctrl_interface_group=0

ap_scan=1

network={

ssid="a" #essid

psk="111" #密码

}

3. WIFI驱动安装
1、驱动下载

2、解压

# tar jxvf 2009_0206_RT73_Linux_STA_Drv1.1.0.2.tar.bz2

# cd 2009_2006_RT73_Linux_STA_Drv_1.1.0.2/Module

3、修改Makefile

5 #PLATFORM=PC

6 PLATFORM=CMPC

40 ifeq ($(PLATFORM),CMPC)

41 LINUX_SRC = /opt/smp86xx_kernel_source_2.8.4.1/linux-2.6.15

42 endif

4、编译

# cp Makefile.6 ./Makefile

# make

5、安装

在目标板上,先将生成的rt73.ko以及文件rt73sta.dat 与 rt73.bin 拷贝到目标板上。

# cp rt73.ko /root/app/lib/ modules/2.6.15/

# mkdir –p /etc/Wireless/RT73STA

# cp rt73.bin /etc/Wireless/RT73STA

# cp rt73sta.dat /etc/Wireless/RT73STA

# insmod rt73.ko

# lsmod

另:ifrename 的使用

touch /etc/iftab
ifrename -i ra0 -n wlan0
ifrename -i rausb0 -n wlan0
/etc/iftab  wlan1 mac

 ---------------------------------------------------------------------------

移植wireless tools for liunx

要正常使用无线网卡,还要正确配置。linux下的配置工具是wireless-tools,可以在这里下载到它的最新版。
下载后,将源代码解压。再修改其中的makefile文件,将其中的
CC = gcc
AR = ar
RANLIB = ranlib
改为
CC = arm-linux-gcc
AR = arm-linux-ar
RANLIB = arm-linux-ranlib
再执行make,编译完成后,将生成的iwconfig,iwlist文件拷贝到rat-linux for mini2440的根文件系统中的/bin目录下,将
libiw.so.29拷贝到/lib目录下。
启动mini2440开发板,进入linux命令行后,执行ifconfig wlan0 up,启动无线网卡。再执行iwlist scanning,此命令可以搜索到
可用的无线网络接入点。我的无线接入点是一台无线路由器,ESSID是"rat-linux",执行此命令后就会下列输出
wlan0     Scan completed :
          Cell 01 - Address: 00:19:C6:53:B9:CE
                    ESSID:"rat-linux"
                    Mode:Master
                    Channel:2
                    Frequency:2.417 GHz (Channel 2)
                    Quality=11/100  Signal level:66/100
                    Encryption key:on
                    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; 24 Mb/s; 36 Mb/s
                              48 Mb/s; 54 Mb/s
                    Extra:tsf=000000056306469f
                    Extra: Last beacon: 1065ms ago

其中可以看到我的无线接入点是需要密码的。假设密码是123456。使用如下的命令设置密码。
  iwconfig wlan0 key 123456
为了能接无线网,还要使用下面的命令设置ESSID
  iwconfig wlan0 essid "rat-linux"
其它的参数可以都采用默认的,不用再设了。可以使用下面的命令加入无线网了。
 
  iwconfig wlan0 ap auto
再执行iwconfig wlan0,就可以看到下面的信息。
wlan0     IEEE 802.11bg  ESSID:"rat-linux"
          Mode:Managed  Frequency:2.417 GHz  Access Point: 00:19:C6:53:B9:CE
          Bit Rate=1 Mb/s   Tx-Power=27 dBm
          Retry min limit:7   RTS thr:off   Fragment thr=2352 B
          Encryption key:1234-56   Security mode:open
          Power Management:off
          Link Quality=100/100  Signal level:66/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
这就表示已接入无线网。
最后,为无线网卡指定IP地址。命令如下
  ifconfig wlan0 192.168.1.30 netmask 255.255.255.0
我的开发主机和无线网卡处于同一网段,因此是可以相互PING通的。因此可以用从开发主机上PING无线网卡的IP地址的方法来确网
卡是否工作正常。从主机上执行ping 192.168.1.30,正常PING通。
至此,无线网卡安装全部完成。
最后,为了方便配置,可以将上述的配置命令写入linux脚本文件,以后,只要执行此脚本,即可完成上述步骤的配置。脚本文件内
容如下。
#! /bin/sh
ifconfig wlan0 up
iwconfig wlan0 key 123456
iwconfig wlan0 essid "rat-linux"
iwconfig wlan0 ap auto
ifconfig wlan0 192.168.1.30 netmask 255.255.255.0
阅读(600) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~