wpa_supplicant

简介

wpa_supplicant是一个发送WPA请求的工具,WPA是Wi-Fi Protected Access的简称。用于在Linux、MAC、Windows上支持WPA和WPA2(IEEE 802.11i / RSN)。不论是在桌面应用还是嵌入式设备都是一个实用的工具。该工具设计为一个daemon程序,支持两个前端,wpa_cli是文本界面,wpa_gui是图形界面。

基本用法

首先需要写一个配置文件,一般就叫wpa_supplicant.conf。如果有密码,就需要指定psk,psk的计算可以通过如下命令来生成。

wpa_passphrase YOUR-SSID YOUR-PASSWORD

执行上面的命令就会输出下面的结果。

network={
        ssid="YOUR-SSID"
        #psk="YOUR-PASSWORD"
        psk=e1a0872bd7f7cfd7efa1cbc7d7aec742c58f3ae24e4757d98eae8bf7b53254de
}

通常配置还包括许多其它信息,如下所示。

ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
update_config=1
network={
        ssid="YOUR-SSID"
        #psk="YOUR-PASSWORD"
        psk=e1a0872bd7f7cfd7efa1cbc7d7aec742c58f3ae24e4757d98eae8bf7b53254de
}
ctrl_interface
要使用wpa_cli就必须设置ctrl_interface, GROUP用于指定哪些组的用户可以执行wpa_cli命令。
update_config=1
表示wpa_cli中做的更改可以保存下来。

写好配置文件之后,用如下命令启动。

wpa_supplicant -d -D wext -i wlan0 -c wpa_supplicant.conf &
-B
后台执行
-d
调试信息
-i INTERFACE
指定网络接口,如wlan0、wlan1等等
-c CONF
配置文件名
-D DRIVER
驱动名,如nl80211是标准,但是支持不广,而wext已经不建议使用,但是支持广泛。

wpa_cli

在wpa_cli交户界面下可以执行的命令如下所示。

简写 全写 含义
stat status 连接状态
disc disconnect  
q quit  
term terminate kill wpa_supplicant
recon reconfigure 重新载入配置文件
scan scan 扫描网络
scan_r scan_result 扫描结果
list_n list_networks  
select_n select_network  
enable_n enable_network  
disable_n disable_network  
remove_n remove_network  
add_n add_network 添加新网络,自动返回编号
set_n set_network  
get_n get_network  
save_c save_config  

1. 连接无加密AP

>add_network # It will display a network id for you, assume it returns 0
>set_network 0 ssid "666"
>set_network 0 key_mgmt NONE
>enable_network 0
>quit

2. 连接WEP加密AP

>add_network # assume return 1
>set_network 1 ssid "666"
>set_network 1 key_mgmt NONE
>set_network 1 wep_key0 "your ap password"
>enable_network 1

3. 连接WPA-PSK/WPA2-PSK加密的AP

>add_network # assume return 2
>set_network 2 ssid "666"
>set_network 2 psk "your pre-shared key"
>enable_network 2

iperf

iperf是一个网络吞吐量测试工具,可以对TCP或UDP测试,要进行测试,需要配置服务端和客户端。

基本参数

GENERAL OPTIONS

-f, --format [kmKM]     format to report: Kbits, Mbits...
-i, --interval n        pause n seconds between reports
-l, --len n[KM]         set buffer length to n (default 8 KB)
-m, --print_mss         print TCP maximum segment size
-p, --port n            set server port to n (default 5001)
-u, --udp               use UDP rather than TCP
-w, --window n[KM]      TCP window size (socket buffer size)
-B, --bind <host>       bind to <host>
-M, --mss n             set TCP maximum segment size
-N, --nodelay           set TCP no delay
-v, --version           print version information and quit
-V, --IPv6Version       Set the domain to IPv6

SERVER SPECIFIC OPTIONS

-s, --server            run in server mode
-U, --single_udp        run in single threaded UDP mode
-D, --daemon            run the server as a daemon

CLIENT SPECIFIC OPTIONS

-b, --bandwidth n[KM]   set target bandwidth to n bits/sec
                        This setting requires UDP (-u).
-c, --client <host>     connecting to <host>
-d, --dualtest          Do a bidirectional test simultaneously
-n, --num n[KM]         number of bytes to transmit
-r, --tradeoff          Do a bidirectional test individually
-t, --time n            time in seconds to transmit
-F, --fileinput <name>  input the data to be transmitted
-I, --stdin             input the data to be transmitted
-L, --listenport n      port to receive bidirectional tests
-P, --parallel n        number of parallel client threads
-T, --ttl n             time-to-live, for multicast

其它参数

TCP_WINDOW_SIZE
环境变量,用于控制TCP缓冲区大小。

基本用法

要进行网络传输测试需要两台机器,同一台机器可能并没有通过网络传输,所以速度过快。

测试TCP

启动服务端:

iperf -s -p1234

启动客户端:

# 传输30s,每2s打印一次报告
iperf -c 192.168.0.100 -p1234 -i2 -t30

测试UDP

启动服务端:

iperf -s -p1234 -u

启动客户端:

iperf -c 192.168.0.100 -p1234 -i2 -t30 -u -b1000M