zoukankan      html  css  js  c++  java
  • 使用WIFI网卡的AP功能

    前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式。本篇博客就研究使wifi 无线网卡工作于AP模式。
    使用一个应用程序hostapd,关于它的介绍可以去此网站https://wireless.wiki.kernel.org/en/users/documentation/hostapd了解一下。
    1.1 下载源码  :http://w1.fi/hostapd/

    1.2 编译、安装

    tar xzf hostapd-2.0.tar.gz
    cd hostapd-2.0/
    cd hostapd/
    cp defconfig .config
    修改.config, 加一行: CONFIG_LIBNL32=y
    修改Makefile:
    CC=arm-linux-gcc
    make
    make DESTDIR=$PWD/tmp install

    把生成的hostapd hostapd_cli复制到NFS的bin目录

    1.3 使用hostapd的配置文件以支持 :WPA/WPA2

    1.3.1 使用hostapd的配置文件
    #change wlan0 to your wireless device
    interface=wlan0 //指定使用哪一个网卡
    driver=nl80211 //指定使用哪一个驱动
    ssid=s3c2440 //AP的名字是什么
    channel=1

    # 认证/加密方式
    macaddr_acl=0 //用来控制mac地址的过滤。
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=3
    wpa_passphrase=baiwenwang
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP

    把配置文件存为/etc/myhostapd.conf
    启动 hostapd: hostapd -B /etc/myhostapd.conf

    ps 可以查看一下,将会看到下面的这个进程在运行了。
    hostapd -B /etc/myhostapd.conf
    用手机看一下,能否使用wifi 网卡这个AP。即手机处于STA模式,wifi 网卡处于AP模式。

    打开手机,将会观察到s3c244o这个AP已经存在了,但是连接后,会出现一种现象:

    正在获取ip地址(一直这样),这个ip是从AP上获取,即从s3c2440上面去获取。一直获取不到的原因是什么呢?

    需要我们在开发板上开启一个dhcpd的服务,让它给STA设备(在这里就指手机)分配ip。

    1.3.2  启动dhcpd服务

    修改配置文件/etc/dhcpd.conf,添加:
    subnet 192.168.1.0 netmask 255.255.255.0 {
      range 192.168.1.10 192.168.1.100;
      option domain-name-servers 192.168.1.1;
      option routers 192.168.1.1;
    }

    此时如果直接运行dhcpd -cf /etc/dhcpd.conf wlan0,会出现下面的问题:
    can't open lease database /var/db/dhcpd.lease: No such file or directory

    创建空文件/var/db/dhcpd.leases:
    > /var/db/dhcpd.leases  //命令 >就表示生成一个文件,里面的内容是空的。

    再次运行dhcpd -cf /etc/dhcpd.conf wlan0,会出现下面的问题:
    No subnet declaration for wlan0(no IPv4 address),没有给wifi网卡配置IP地址。

    ifconfig wlan0 192.168.1.1
    dhcpd -cf /etc/dhcpd.conf wlan0

    此时再来实验一下,利用手机能否连接上wifi 网卡这个AP。

    正在从s3c244o获取IP地址---->已连接到s3c2440

    ping 192.168.1.10(利用wifi 网卡去ping 手机),是可以ping的通的。

    问题:怎么确定处于STA模式的设备(在此处指的是手机)ip地址是192.168.1.10呢?

    在/etc/dhcpd.conf文件中已经指定了,处于STA模式的设备的ip地址范围:range 192.168.1.10 192.168.1.100;

    这和常识正好对应起来,一个AP可以被很多处于STA模式的设备所连接。

    1.3.3 能否用命令来查看有多少个客户端连接到wifi 网卡这个AP呢?

    执行:hostapd_cli
    could not connect to hostapd -re-trying
    配置文件中还缺少这些一些内容。什么内容呢?
    在利用wpa_supplicant这个工具时,wpa_supplicant与wpa_cli进行通信需要指定一个socket文件。
    同样在这个地方也需要指定。hostapd与hostapd_cli是通过socket文件进行通信的。如果不指定的话,hostapd_cli无法连接hostapd

     修改 hostapd的配置文件

    ctrl_interface=/var/run/hostapd
    #change wlan0 to your wireless device
    interface=wlan0
    driver=nl80211
    ssid=S3C2440
    channel=1

    # 认证/加密方式
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=3
    wpa_passphrase=baiwenwang
    wpa_key_mgmt=WPA-PSK
    wpa_pairwise=TKIP
    rsn_pairwise=CCMP

    hostapd_cli 进入交互模式:

    all_sta  看一下有多少个STA连接到了AP。

    会显示MAC地址等信息,但是在这个地方是看不到ip的。ip在哪看呢?

    在 var/db/dhcpd.leases中会看到它的ip。
    在这个文件中,可以通过它的mac地址,去查找它的ip地址。

    1.4 OPEN方式的配置文件
    ctrl_interface=/var/run/hostapd
    #change wlan0 to your wireless device
    interface=wlan0
    driver=nl80211
    ssid=S3C2440
    channel=1

    # 认证/加密方式
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0

    1.5 WEP方式的配置文件
    ctrl_interface=/var/run/hostapd
    #change wlan0 to your wireless device
    interface=wlan0
    driver=nl80211
    ssid=S3C2440
    channel=1

    # 认证/加密方式
    macaddr_acl=0
    auth_algs=2
    ignore_broadcast_ssid=0
    wep_key0="baiwenwang123"
    wep_default_key=0

    1.6 修改/etc/mdev.conf自动启动AP模式
    cat /etc/mdev.conf
    wlan0 0:0 777 * /sbin/auto_wifi_ap.sh

    cat /sbin/auto_wifi_ap.sh
    #!/bin/sh
    if [ $ACTION = "add" ];
    then
      hostapd -B /etc/myhostapd.conf
      ifconfig wlan0 192.168.1.1
      dhcpd -cf /etc/dhcpd.conf wlan0
    else
      killall hostapd
      killall dhcpd
    fi

    注意事项:
    对于包含了AR9271网卡驱动的内核,有一个问题:
    在上电之前就接上了网卡,那么系统启动后无法识别出这个网卡。
    解决方法:
    1.上电后再接网卡
    2.把驱动编译为模块,当系统启动后再insmod: 可以在上电之前就接网卡

    可能原因:ath9k_htc.ko要用到固件, 但是固件要到根文件系统被挂载后才能访问

  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/-glb/p/11616560.html
Copyright © 2011-2022 走看看