udhcpd就是终端设备作为DHCP服务器
udhcpc就是终端设备作为DHCP客户端
一、做服务器端,开启WIFI
在UBUNTU系统或者其他类似linux系统上,使用hostapd,可以实现WIFI的无线接入热点(AP)
以便提供给其他需要无线接入联网的设备,如笔记本,手机实现无线上网功能。也即是无线路由的功能。
什么是hostapd:
hostapd 是用户控件的守护进程用于无线接入点(AP)和授权服务器(authentication servers).
她实现了IEEE802.11的AP管理,IEEE802.1X/WPA/WPA2/EAP授权,RADIUS 客户端,EAP服务器和RADIUS 授权服务器,目前最新版本支持Linux系统(HOST AP,madwifi,mac80211-based驱动)和FreeBSD(net80211)。
hostapd设计为一个守护程序(进程),后台运行,进行一些相关控制授权的操作。属于一个开源项目
1、sudo apt-get install hostapd / git clone git:sudo hostapd /etc/hostapd/hostapd.conf -B(-B是需要在后台运行的时候添加) //可搜索到热点了
######################################
1、sudo apt-get install isc-dhcp server
2、sudo service isc-dhcp-server restart 安装开启DHCP服务器
######################################
1、udhcpd –fS /etc/udhcpd.conf 嵌入式的DHCP服务器,动态分配IP地址给接入者
#udhcpd 在usr/sbin 中(链接 到/bin/busybox, 由其生成的包含相关命令的文件系统)
#hostapd wpa_supplient wpa_passphrase 在usr/sbin 中
1 > /dev/null 2>&1 语句含义:
1 > /dev/null : 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2 > &1 :接着,标准错误输出重定向(等同于)标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出
也重定向到空设备文件
sed -i "s/`grep -i ^ssid $FILE`/ssid=$NAME/g" $FILE 语句的含义
对$FILE以行为单位进行处理,-i∶直接修改读取的文件内容,而不是由屏幕输出
寻找以ssid开头的行,并替换为"ssid=$NAME"
二、做客户端,连接WIFI
(源码)工具包可以让您连接到那些使用WPA的AP
wpa_supplicant本是开源项目源码,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。
《wpa_supplicant 配置移植》:http://blog.chinaunix.net/uid-29110326-id-4362338.html
进入busybox目录:busybox1.19.2/example/udhcp/,拷贝文件simple.script到根文件系统的/usr/share/udhcpc/目录下,更名为default.script
default.script:
-
#!/bin/sh
-
-
exec run-parts -a "$1" /etc/udhcpc.d # udhcpc.d中可执行文件50default
执行wifi_connect.sh脚本:
-
#!/bin/sh
-
set -x
-
CONN=$1
-
NAME=$2
-
PASS=$3
-
if [ "$CONN" = "CONNECT" ] ; then
-
killall udhcpc 1> /dev/null 2>&1
-
killall wpa_supplicant 1> /dev/null 2>&1
-
killall hostapd 1> /dev/null 2>&1
-
ifconfig wlan0 up
-
wpa_passphrase $NAME $PASS > /etc/wpa.conf
-
wpa_supplicant -iwlan0 -Dnl80211 -c /etc/wpa.conf -B
-
sleep 2
-
udhcpc -iwlan0 -q -n
-
else
-
ifconfig wlan0 down
-
fi
-
-
exit 0
wpa_passphrase 将网络名和密码写入配置文件wpa.conf
wpa_supplicant -iwlan0 -Dnl80211 -c /etc/wpa.conf -B (-d) 调用wpa.conf,做客户端链接无线网
-i参数指定无线网络接口,-D指定驱动,-c指定配置文件,参数值前不要留空格。-d调试
udhcpc -iwlan0 -q -n 执行default.script脚本,获取ip //udhcpc 在 /sbin中
单独执行效果:
网页端执行wifi_connect.sh脚本过程打印:
成功连上"TP-LINK_527EB0":
#########################################################################################
wpa_supplicant是linux系统下一个非常强大的无线网卡管理程序。google搜索到的它似乎不支持WPA2和AES,其实不然,参考它的文档可以发现,WPA2只是RSN的别名,而AES也是CCMP的一部分,所以它们的支持完全是没有问题的。
它的文档看起来非常复杂,其实配置非常简单,下面先给出我的wpa_supplication.conf
-
ctrl_interface=/var/run/wpa_supplicant
-
ctrl_interface_group=wheel
-
update_config=1
-
-
network={
-
ssid="xxxx"
-
scan_ssid=1
-
psk=xxxxxxxxx37bca5cf24a345f514d319211822f568bba28f8f0b74c894e7644
-
proto=RSN
-
key_mgmt=WPA-PSK
-
pairwise=CCMP
-
auth_alg=OPEN
-
}
解释一下上面的比较容易困惑的地方:
签名三句应该是个模板,没仔细研究过。
network=开始是无线接入点的具体配置,一般的无线接入点可以用wpa_passphrase来自动生成,语法是
-
yj@YJ_N ~ $ wpa_passphrase
-
usage: wpa_passphrase [passphrase]
-
-
If passphrase is left out, it will be read from stdin
-
-
接下来看个实例:
-
-
yj@YJ_N ~ $ wpa_passphrase TPLINK 12345678
-
network={
-
ssid="TPLINK"
-
-
psk=992194d7a6158009bfa25773108291642f28a0c32a31ab2556a15dee97ef0dbb
-
}
-
这里表示名为TPLINK的接入点,密码是12345678,输出就是该接入点在wpa_supplicant.conf里面的配置内容,可以直接用下面的命令自动写入
-
-
yj@YJ_N ~ $ wpa_passphrase TPLINK 12345678 |sudo tee -a /etc/wpa_supplicant/wpa_supplicant.conf
继续解释最开始的例子,network=后面的内容
ssid :接入点名称,这个没什么好说的
scan_ssid=1 :这个很容易错过,如果你的无线接入点是隐藏的,那么这个就是必须的,亲身经历,折腾了好久才搞定,记之备忘。
psk=xx :是加密后的密码,用wpa_passphrase自动生成的
proto=RSN WPA2就选这个,抄一下官方配置文件例子里面的:
key_mgmt= 认证密钥管理协议,还是抄:
pairwise= 这个就是加密方式,继续抄
好了,其他的不多说了,有兴趣看英文原文吧:
阅读(2043) | 评论(0) | 转发(0) |