前提条件
下载源码
点击前往下载
或者使用以下命令
wget -c https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz
打个补丁
复制以下补丁内容,保存名为wireless_tools-29-fix_iwlist_scanning-1.patch
diff -Naur wireless_tools.29.orig/iwlist.c wireless_tools.29/iwlist.c
--- wireless_tools.29.orig/iwlist.c 2007-06-30 01:11:09.000000000 +0000
+++ wireless_tools.29/iwlist.c 2016-09-03 17:51:56.703353035 +0000
@@ -799,7 +799,7 @@
if(iw_get_ext(skfd, ifname, SIOCGIWSCAN, &wrq) < 0)
{
/* Check if buffer was too small (WE-17 only) */
- if((errno == E2BIG) && (range.we_version_compiled > 16))
+ if((errno == E2BIG) && (range.we_version_compiled > 16) && (buflen < 65535))
{
/* Some driver may return very large scan results, either
* because there are many cells, or because they have many
@@ -815,6 +815,9 @@
else
buflen *= 2;
+ if(buflen > 65535)
+ buflen = 65535;
+
/* Try again */
goto realloc;
}
解压缩源码
#解压缩
tar -xvf wireless_tools.29.tar.gz
#进入源码目录
cd wireless_tools.29
打补丁
patch -Np1 -i ../wireless_tools-29-fix_iwlist_scanning-1.patch
编译安装
替换
CC=你的编译工具
AR=你的编译工具
RANLIB=你的编译工具
PREFIX=你要安装的目录
INSTALL_MAN=你要安装的目录
PS:当安装目录/usr/local等普通用户没有写入权限的情况下,需切换为root用户进行执行安装命令
#编译
make CC=/home/aron566/opt/arm-2014.05/bin/arm-none-linux-gnueabi-gcc AR=/home/aron566/opt/arm-2014.05/bin/arm-none-linux-gnueabi-ar RANLIB=/home/aron566/opt/arm-2014.05/bin/arm-none-linux-gnueabi-ranlib
#安装
make PREFIX=/home/aron566/Downloads/wifi/wireless_tools_INSTALL INSTALL_MAN=/home/aron566/Downloads/wifi/wireless_tools_man install
使用方法
参考博客
#1. 扫描可用的无线网络:ifconfig可以看到wifi-name也就是wifi网卡名
iwlist wifi-name scanning
#2. 扫描附近无线网络信息,ESSID项的值即为无线网络的名字。如果值为空,说明在无线路由勾选了隐藏ESSID的选项
iwlist wifi-name scanning
#3. 设置要连接的网络类型
iwpriv wifi-name setNetworkType=Infra
#4. 设置要连接的无线网络的安全模式
iwpriv wifi-name setAuthMode=WPA2PSK
#5. 设置网络加密方式:(CCMP即为AES)
iwpriv wifi-name setEncrypType=TKIP
#6. 设置连接时的密码: 12345678为加密网络的密码
iwpriv wifi-name setWPAPSK=12345678
#7. 连接该网络:有两种方式:
#第一种iwpriv命令
iwpriv wifi-name setSSID=juwei
#第二种用iwconfig命令
iwconfig wifi-name essid juwei
#如果密码正确,就可以连接上网络juwei了。如果你不放心,可以用命令查看状态
iwpriv wifi-name connStatus
大致流程
#加载wifi网卡驱动
insmod rt3070sta.ko
ifconfig ra0 up 启用无线网卡,至于为什么是ra0,因为我的使用手册上是这样做的
此时cat /proc/wireless 可以看到多了一个ra0
iwlist scanning 可以搜索到可用的网络 iwlist ra0 scanning (只搜索ra0的无线网络)
iwpriv ra0 set SSID="name"无线网络配置 name是搜到的一个网络的名字。假如不要密码这样就行了。
iwpriv ra0 set WPAPSK="A3DDD" 输入登陆密码
iwconfig ra0 key open 打开密码 输入密码后 一定要加这条命令哦,不然连接不上
ifconfig ra0 192.168.1.109 netmask 255.255.255.0为无线网卡指定IP地址
设置网关 route add default gw 192.168.1.1
之后我在ubantu上ping 192.168.1.109 成功。这些命令就是所谓的工具。
在超级终端ping 外网成功。
各种密码的命令参数,这在iwpriv_usage.txt里面可以查到。
无密码:
iwpriv ra0 set SSID="Vodafone D100"
注意:在切换到无密码的用户时,若之前是有密码用户,则要iwconfig ra0 key off。
WPA型密码:
网上说若路由器的加密方式是wpa的话要移植wpa_supplicant工具,我没有这样做,还是可以。
iwpriv ra0 set NetworkType=Infra 网络类型有Infra,Adhoc两种,前者是基于AP的,后者是p2p
iwpriv ra0 set AuthMode=WPAPSK OPEN,SHARED,WEPAUTO,WPAPSK,WPA2PSK,WPANONE
iwpriv ra0 set EncrypType=TKIP NONE,WEP,TKIP,AES
iwpriv ra0 set SSID="Vodafone D100"
iwpriv ra0 set WPAPSK="1234567890"
WEP型密码:
iwpriv ra0 set NetworkType=Infra
iwpriv ra0 set AuthMode=OPEN
iwpriv ra0 set EncrypType=WEP
iwpriv ra0 set DefaultKeyID=1
iwpriv ra0 set Key1="1234567890"
iwpriv ra0 set SSID="Vodafone D100"
切换用户登陆:
直接重新输入登陆名字和输入密码的命令,值得注意的是在切换有密码和没有密码的用户时要相应的iwconfig ra0 key open和iwconfig ra0 key off。
常见问题
网上说若路由器的加密方式是wpa的话要移植wpa_supplicant工具http://blog.csdn.net/jimmy_1986/archive/2010/09/09/5872536.aspx
错误信息
PING 192.168.1.1 (192.168.1.1): 56 data bytes
ping: sendto: Network is unreachable
此原因是没有设置ip ifconfig ra0 192.168.1.109 up 解决。
ping 219.134.65.113 外网
ping: sendto: Network is unreachable
此原因是没有设置网关 route add default gw 192.168.1.1 解决。