iwpriv指令

转自:http://blog.csdn.net/liangyamin/article/details/7209761

无线网络飞速发展的今天,许多设备都提供了连接无线网络的功能。

那么Linux下的wifi到底该怎么配置、连接呢??

开始配置之前,我们要说说iw家族。iw是linux下常用的wifi配置工具,网上有相应的库和源码。全名为wirelessTools。

配置wifi模块,并连接相应的无线网络过程:主要使用iwpriv命令

1. 扫描可用的无线网络:

 
  1. iwlist wifi-name scanning  
其中wifi-name为无线网卡的名字,比如网卡eth0就是系统默认的网卡名字, wifi-name可以用ifconfig查看,一般为ra0。

2. 看扫描到的网络信息,按要连接的网络类型进行配置。以下为扫描到的网络:

  1. iwlist ra0 scanning  
  2. ===>rt_ioctl_giwscan. 11(11) BSS returned, data->length 1427  
  3. ra0       Scan completed  
  4.           Cell 01 Address: C4:CA:D9:1D:9E:A0  
  5.                     Protocol:802.11b/g/n  
  6.                     ESSID:""  
  7.                     Mode:Managed  
  8.                     Frequency:2.412 GHz (Channel 1)  
  9.                     Quality=7/100  Signal level=-87 dBm  Noise level=-82 dBm  
  10.                     Encryption key:off  
  11.                     Bit Rates:54 Mb/s  
  12.           Cell 02 Address: FC:75:16:A1:A9:16  
  13.                     Protocol:802.11b/g/n  
  14.                     ESSID:"jxj_rd"  
  15.                     Mode:Managed  
  16.                     Frequency:2.452 GHz (Channel 9)  
  17.                     Quality=94/100  Signal level=-53 dBm  Noise level=-92 dBm  
  18.                     Encryption key:on  
  19.                     Bit Rates:54 Mb/s  
  20.                     IE: WPA Version  
  21.                         Group Cipher TKIP  
  22.                         Pairwise Ciphers (2) TKIP CCMP  
  23.                         Authentication Suites (1) PSK  
  24.                     IE: IEEE 802.11i/WPA2 Version  
  25.                         Group Cipher TKIP  
  26.                         Pairwise Ciphers (2) TKIP CCMP  
  27.                         Authentication Suites (1) PSK  
  28.           Cell 03 Address: C4:CA:D9:02:2A:70  
  29.                     Protocol:802.11b/g/n  
  30.                     ESSID:""  
  31.                     Mode:Managed  
  32.                     Frequency:2.462 GHz (Channel 11)  
  33.                     Quality=83/100  Signal level=-57 dBm  Noise level=-92 dBm  
  34.                     Encryption key:off  
  35.                     Bit Rates:54 Mb/s  
  36.           Cell 04 Address: 14:D6:4D:75:CA:9C  
  37.                     Protocol:802.11b/g/n  
  38.                     ESSID:"liangym"  
  39.                     Mode:Managed  
  40.                     Frequency:2.472 GHz (Channel 13)  
  41.                     Quality=100/100  Signal level=-27 dBm  Noise level=-92 dBm  
  42.                     Encryption key:on  
  43.                     Bit Rates:54 Mb/s  
  44.                     IE: WPA Version  
  45.                         Group Cipher CCMP  
  46.                         Pairwise Ciphers (1) CCMP  
  47.                         Authentication Suites (1) PSK  
  48.                     IE: IEEE 802.11i/WPA2 Version  
  49.                         Group Cipher CCMP  
  50.                         Pairwise Ciphers (1) CCMP  
  51.                         Authentication Suites (1) PSK  
如上:ESSID项的值即为无线网络的名字,如上的“jxj_rd”等。如果值为空,说明在无线路由勾选了隐藏ESSID的选项。

ESSID是很关键的,如果被隐藏了,也不是不能连接,而是需要破解,用到其他的工具,非常麻烦。至于如何破解,不是本文叙述的内容,有兴趣的朋友可以网上搜索。

得到了网络的信息,接下来就是配置连接选项了。以连接"jxj_rd"为例,我们看看具体的过程:

(1) 设置要连接的网络类型:

  1. iwpriv ra0 set NetworkType=Infra  

(2) 设置要连接的无线网络的安全模式:
  1. iwpriv ra0 set AuthMode=WPA2PSK  


(3) 设置网络加密方式:(CCMP即为AES)

  1. iwpriv ra0 set EncrypType=TKIP  

(4) 设置连接时的密码: ********为加密网络的密码
  1. iwpriv ra0 set WPAPSK=*******  
(5) 连接该网络:有两种方式:

    <1> 用iwpriv命令

  1. iwpriv ra0 set SSID=jxj_rd  
<2> 用iwconfig命令
  1. iwconfig ra0 essid jxj_rd  
至此,如果密码正确,就可以连接上网络jxj_rd了。如果你不放心,可以用命令查看状态:
  1. iwpriv ra0 connStatus  
当然,你也可以用iwconfig命令查看状态,这里不再赘述。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`iwpriv`命令的源码主要位于Linux内核源代码树中的`net/wireless/wext-core.c`文件中,以下是该文件中`ioctl_standard_iwpriv`函数的源码解析: ```c static int ioctl_standard_iwpriv(struct net_device *dev, struct iwreq *iwr, u32 cmd) { /* 通过命令码cmd解析出设备驱动程序中相应的命令处理函数 */ struct iw_priv_args *priv; struct iw_handler_def *iwe; int i, count; struct iw_priv_args user_priv; void __user *argp = iwr->u.name; int (*handler)(struct net_device *, struct iw_request_info *, union iwreq_data *, struct iw_priv_args *); union iwreq_data wrqu; int ret = 0; /* 遍历设备驱动程序中支持的所有IWPRIV命令 */ for (i = 0; i < dev->ieee80211_ptr->priv_args_count; i++) { priv = &dev->ieee80211_ptr->priv_args[i]; if ((!priv->name) || (!priv->set)) { continue; } if (strcmp(priv->name, iwr->u.name) == 0) { /* 找到要执行的IWPRIV命令 */ iwe = priv->handler; count = iwe->num_standard; /* 该命令支持的标准命令个数 */ if (iwe->flags & IW_HANDLER_SPECIAL) { /* 特殊处理的IWPRIV命令 */ handler = iwe->standard[count].handler; if (!handler) return -EOPNOTSUPP; ret = handler(dev, NULL, &wrqu, priv); } else { /* 标准IWPRIV命令 */ handler = iwe->standard[IW_PRIV_CMD_GET].handler; if (!handler) return -EOPNOTSUPP; /* 解析参数 */ if (iwe->standard[IW_PRIV_CMD_SET].handler) { if (copy_from_user(&user_priv, argp, sizeof(user_priv))) return -EFAULT; wrqu.data.pointer = user_priv.pointer; wrqu.data.length = user_priv.length; wrqu.data.flags = user_priv.flags; } /* 调用设备驱动程序中的命令处理函数 */ ret = handler(dev, NULL, &wrqu, priv); /* 将处理结果返回给用户空间 */ if (iwe->standard[IW_PRIV_CMD_GET].handler) { if (copy_to_user(argp, &user_priv, sizeof(user_priv))) return -EFAULT; } } break; } } if (i == dev->ieee80211_ptr->priv_args_count) /* 没有找到要执行的IWPRIV命令 */ ret = -EOPNOTSUPP; return ret; } ``` `ioctl_standard_iwpriv`函数主要实现了`iwpriv`命令的功能。它通过解析`iwr->u.name`中的命令参数,找到对应的设备驱动程序中的命令处理函数,并通过调用该函数完成相应的操作。该函数的主要步骤包括: 1. 遍历设备驱动程序中支持的所有IWPRIV命令,找到要执行的IWPRIV命令。 2. 解析命令参数,根据命令处理函数的要求设置对应的参数值。 3. 调用设备驱动程序中的命令处理函数,完成相应的操作。 4. 将处理结果返回给用户空间。 在该函数中,命令处理函数主要分为两种类型:标准IWPRIV命令和特殊处理的IWPRIV命令。对于标准IWPRIV命令,用户空间可以通过`ioctl`系统调用的`arg`参数向内核空间传递一些参数,内核空间则通过解析这些参数来执行相应的操作;对于特殊处理的IWPRIV命令,用户空间直接调用该命令即可,不需要传递任何参数。 总的来说,`ioctl_standard_iwpriv`函数的实现比较复杂,需要涉及到内核空间和用户空间之间的数据传输、命令参数的解析和处理等方面的问题。如果您想要深入了解该函数的实现细节,可以仔细阅读该函数的源码,并结合相关的内核文档进行学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值