软AP的实现------hostapd的编译运行
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://www.cnblogs.com/ahcc08/p/8495286.html
最近要给摄像头做一个软ap,让手机能够连上这个热点,从而能够与摄像头进行通信。
1、什么是hostapd :
hostapd能够使得无线网卡切换为master模式,模拟AP(通常可以认为是路由器)功能,也就是我们说的软AP(Soft AP)。
Hostapd的功能就是作为AP的认证服务器,负责控制管理stations(通常可以认为带无线网卡的PC)的接入和认证。
通过Hostapd可以将无线网卡切换为AP/Master模式,通过修改配置文件,可以建立一个开放式的(不加密)的,WEP,WPA或WPA2的无线网络。
并且通过修改配置文件可以设置无线网卡的各种参数,包括频率,信号,beacon包时间间隔,是否发送beacon包,如果响应探针请求等等。还可以设置mac地址过滤条件等。
下面是无线网卡常见的工作模式及其作用。

2、编译移植
基于RTL8188EUS无线网卡的驱动程序
版本:wpa_supplicant_hostapd-0.8_rtw_r7475.20130812
进入hostapd目录,修改Makefile 找到如下语句:
ifndef CC
CC=gcc
endif
删除上面的语句,改成自己编译服务器的gcc,然后make。
CROSS_COMPILE=arm-xxxx-linux-
CC=$(CROSS_COMPILE)gcc
生成hostapd和hostapd_cli
3、运行hostapd,创建软AP
vi /etc/hostapd.conf
1)、创建不需要密码的AP
ctrl_interface=/var/run/hostapd
interface=wlan0
driver=rtl871xdrv
ssid=Ap117081234000009
channel=
macaddr_acl=
auth_algs=
ignore_broadcast_ssid=
2)、创建wep加密类型的AP
ctrl_interface=/var/run/hostapd
interface=wlan0
driver=rtl871xdrv
ssid=Ap117081234000009
channel=
macaddr_acl=
auth_algs=
ignore_broadcast_ssid=
wep_key0=
wep_default_key=
3)、创建wpa psk加密类型的AP
ctrl_interface=/var/run/hostapd
interface=wlan0
driver=nl80211
ssid=Ap117081234000009
channel=
macaddr_acl=
auth_algs=
ieee80211n=
hw_mode=g
ignore_broadcast_ssid=
wpa=
wpa_passphrase=
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
运行命令: ./hostapd -B /etc/hostapd.conf -dd

电脑可以搜到这个wifi,但是连接不上 手机也可以搜到

连不上的原因是没有dhcpserver为其分配IP。
关于dhcpserver的移植编译见下章
这个版本使用的驱动是rtl871xdrv,不支持wpa_psk的加密类型,即使创建了wpa_psk的加密类型的AP,也是无法连接成功的。
重新下载了另一个版本wpa_supplicant_8_M_6.x_rtw_r17190.20160415,这个版本使用的nl80211驱动,是可以的。
不过编译起来有点麻烦。
进入hostapd目录,cp defconfig .config
修改Makefile
ifndef CC
CC=gcc
endif
将上面的删除,改成
CROSS_COMPILE=arm-XXX-linux-
CFLAGS = -mcpu=arm926ej-s -mno-unaligned-access -fno-aggressive-loop-optimizations
LIBS+= -L../../project/Trunk/Libs/hiXXX/opensource/ -lssl -lcrypto -lnl
CC=$(CROSS_COMPILE)gcc -L../../project/Trunk/Libs/hiXXX/opensource/ -DCONFIG_WPS
CFLAGS+= -I../../common-headers/Trunk/libnl-1.1.
然后make,报如下错误:
undefined reference to symbol 'pthread_rwlock_rdlock@@GLIBC_2.4'
error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
在Makefile添加如下语句:
LDFLAGS +=-Wl,--gc-sections -Wall -lpthread -lc -ldl
※这个版本的hostapd需要依赖libopenssl.a和libnl.a开源库
我是把用到的开源库放到了../../project/Trunk/Libs/hiXXX/opensource目录里的
这样make生成的hostapd是支持wpa_psk加密类型的。
把hostapd开源库编译成静态链接库,可以给其他项目进行调用
方法如下:
修改Makefile
添加
AR = $(CROSS_COMPILE)ar
RANLIB = $(CROSS_COMPILE)ranlib
把 ALL=libhostapd libhostapd_cli
改成ALL=libhostapd.a libhostapd_cli.a
在
hostapd_cli: $(OBJS_c)
$(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c)
@$(E) " LD " $@
下面添加:
libhostapd.a: .config $(OBJS)
$(AR) -r $@ $(OBJS)
$(RANLIB) $@
libhostapd_cli.a: $(OBJS_c)
$(AR) -r $@ $(OBJS_c)
$(RANLIB) $@
hostapd.conf的字段说明
macaddr_acl #可选,指定MAC地址过滤规则,
0表示除非在禁止列表否则允许,
1表示除非在允许列表否则禁止,
2表示使用外部RADIUS服务器;
accept_mac_file:指定允许MAC列表文件所在;
deny_mac_file:指定禁止MAC列表文件所在
auth_algs:指定采用哪种认证算法。
采用位域(bit fields)方式来制定,其中第一位表示开放系统认证(Open System Authentication, OSA),
第二位表示共享密钥认证(Shared Key Authentication, SKA)。
这里设置alth_algs的值为1,表示只采用OSA;如果为3则两种认证方式都支持。
对于WPA或WPA2,此值必须设为1
#指定802.11协议,包括 a = IEEE .11a, b = IEEE .11b, g = IEEE .11g
hw_mode:指定802.11协议,包括 a = IEEE .11a, b = IEEE .11b, g = IEEE .11g;
ignore_broadcast_ssid:
# 是否广播, 广播SSID, 不广播SSID(发送空SSID,即长度为0的SSID),
# 忽略广播 SSID 的探测请求,跟1类似,但是兼容某些不支持空SSID的设备
wpa:指定WPA类型,这是一个位域值(bit fields),
第一位表示启用WPA。 :支持wpa
第二位表示启用WPA2。 :支持wpa2 :两者都支持
WPA 是 次握手协商单播密钥+ 次握手协商组播密钥,推出时支持的加密算法 TKIP;
WPA2 使用 次握手同时协商单播和组播密钥,配套的加密算法是 CCMP
wpa_passphrase:WPA/WPA2加密需要指定密钥,这个选项就是配置WPA/WPA2的密钥。
注意wpa_passphrase要求8~63个字符。
软AP的实现------hostapd的编译运行的更多相关文章
- linux软AP--hostapd+dhcpd
linux软AP--hostapd+dhcpd 2018年05月08日 ⁄ 综合 ⁄ 共 4908字 ⁄ 字号 小 中 大 ⁄ 评论关闭 随着手机.笔记本等无线设备的增多,公司里的家用三个无线路由器已 ...
- 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...
- [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
reference to : http://www.cnblogs.com/soaringEveryday/p/4991563.html 以往的Android开发有一个头疼的且拖慢速度的问题,就是你每 ...
- Android UiAutomator 自动化测试编译运行---新手2
1.首先打开eclipse创建java项目
- ubuntu建立软ap共享无线网络
建立ad-hoc模式共享网络 viewtopic.php?f=116&t=387194 有些android手机可能不支持ad-hoc模式,要第三方rom才行. 首先安装这些工具 代码: apt ...
- 如何使用Notepad++编译运行php
安装编译运行文件的插件.插件-Plugin Manager-Show Plugin Manager. 找到NppExec插件,从这个插件的名字来看就是各位文件的执行.点击Install.需要下载安装, ...
- EditPlus远程编辑、语法高亮、编译运行源代码设置
最近写代码的过程中,除了写Java时用的Eclipse.在Linux下编辑的Vi之外,有时也会用EditPlus打开一些文件,如配置文件.日志文件.脚本等.个人觉得EditPlus在很多场景下比较好用 ...
- 如何用javac 和java 编译运行整个Java工程 (转载)【转】在Linux下编译与执行Java程序
如何用javac 和java 编译运行整个Java工程 (转载) http://blog.csdn.net/huagong_adu/article/details/6929817 [转]在Linux ...
- Sublime Text 3配置C++编译运行
2016.9.8更新: linux(Ubuntu16.04)下的配置,编译后用终端运行,解决了不能输入的问题 { "encoding": "utf-8", &q ...
随机推荐
- Linux用户登录记录日志和相关查看命令汇总
# 1 utmp.wtmp.btmp文件 Linux用户登录信息放在三个文件中: 1 /var/run/utmp:记录当前正在登录系统的用户信息,默认由who和w记录当前登录用户的信息,uptime记 ...
- Java序列化小结
title: Java序列化小结 date: 2017-05-06 20:07:59 tags: 序列化 categories: Java基础 --- Java序列化就是将一个对象转化成一串二进制表示 ...
- Servlet--j2e中文乱码解决
我们在写项目的时候经常会传递一些中文参数,但是j2e默认使用ISO-8859-1来编码和解码,所以很容易出现中文乱码问题.这里我做一个统一的整理,其实这里的中文乱码问题和上一篇的路径问题都是j2e经常 ...
- springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
随着业务发展,系统拆分导致系统调用链路愈发复杂一个前端请求可能最终需要调用很多次后端服务才能完成,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的,这时就需要解决如何快读定位 ...
- JavaWeb项目架构之Redis分布式日志队列
架构.分布式.日志队列,标题自己都看着唬人,其实就是一个日志收集的功能,只不过中间加了一个Redis做消息队列罢了. 前言 为什么需要消息队列? 当系统中出现"生产"和" ...
- SQL模板资源管理器,你用了吗?
SQL Server Management Studio 有个模板资源管理器,不知你用过没有?使用模板创建脚本.自定义模板等功能能大大提高你的工作效率,如果没有尝试过,赶紧去试试吧.很多时候,我们习惯 ...
- HTML5 拖放(Drag 和 Drop)详解与实例
简介 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. 先点击一个小例子:在用户开始拖动 <p> 元素时执行 JavaSc ...
- 洛谷 [P4011] 孤岛营救问题
状压+BFS 通过观察数据范围可知,我们应该状压钥匙种类,直接BFS即可 注意,一个点处可能不知有一把钥匙 #include <iostream> #include <cstdio& ...
- POJ 3348 Cows [凸包 面积]
Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9022 Accepted: 3992 Description ...
- 简易商品信息管理系统——首个Web项目
正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...