我是靠谱客的博主 陶醉音响,最近开发中收集的这篇文章主要介绍WIFI模块工作模式浅析(二),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

上篇介绍了WIFI模块的STA模式,这篇介绍下WIFI的AP模式(软AP)。

这里我们这样使用我们的设备,开发板上插上网线和WIFI模块。其工作原理是通过网线把网络接到开发板,我们的WIFI模块作为无线的接入点,组成一个迷你的无线路由器。我们的电脑就能通过连接开发板上的AP来上网了。

 

首先我们还是从ifconfig开始:

 

~ >: ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:E5:49:83:76:1A 
          inet addr:192.168.1.168  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:64 (64.0 B)  TX bytes:0 (0.0 B)
          Interrupt:51 Base address:0x4300

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:0C:43:30:72:81 
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

~ >: ifconfig wlan0 192.168.1.2 netmask 255.255.255.0 up
~ >: ifconfig

eth0   Link encap:Ethernet  HWaddr 00:E?49:83:76:1A 
          inet addr:192.168.1.168  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:896 (896.0 B)  TX bytes:272 (272.0 B)
          Interrupt:51 Base address:0x4300

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


wlan0     Link encap:Ethernet  HWaddr 00:0C:43:30:72:81 
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

如果你想要让你的迷你路由器支持DHCP自动分配IP,那么你首先要在你的开发板上移植dhcpd的命令(busybox中也有udhcpd的命令,不过功能没有dhcpd强大)

它的一些配置文件为:

/tmp >: vim dhcpd_wlan0.conf

subnet 192.168.5.0 netmask 255.255.255.0 {
  range 192.168.5.10 192.168.5.100;/分配的子网的范围/
  option domain-name-servers 4.2.2.2, 8.8.8.8;/域名解析服务器/
  option routers 192.168.5.1;/配置路由器表/
  default-lease-time 18800;
  max-lease-time 72000;
  authoritative;
}

subnet 子网  

网络的一部分。它是物理上独立的网络段,与网络其它部分共享网络地址,并用子网号区分。

 并在/tmp目录下用touch创建dhcpd_wlan0.leases文件

之后运行命令dhcpd -q -pf dhcpd_wlan0.pid -cf dhcpd_wlan0.conf -lf dhcpd_wlan0.leases wlan0

/tmp >: vim dhcpd_wlan0.pid

 704 /这里的进程号是我们dhcp服务开启时,自己把进程号写入到这个文件中,每次启用都会覆盖写入/

 

就设置好了dhcp的服务。

 

之后我们就要用hostapd工具来配置我们的迷你路由器了,没有这个工具请自行百度移植。(要学会利用好百度,goole)它的配置文件为:

/apps/etc/network >: vim hostapd.conf

# Software AP daemon program hostapd configure file
# FILE:/apps/etc/network/hostapd.conf
# Copyright (C) 2012 GuoWenxue <
guowenxue@gmail.com QQ:281143292>

ctrl_interface=/var/run/hostapd
interface=wlan0
#bridge=br0
driver=nl80211
ssid=Router_s3c2440/你可以给你的WIFI起个自己想要的名字/
hw_mode=g
channel=7   /802.11b/g工作在2.4~2.4835GHz频段,这些频段被分为11或13个信道,我们一般设置小于10/

macaddr_acl=0
auth_algs=1
ieee80211n=1
dtim_period=2
rts_threshold=2347
fragm_threshold=2346
macaddr_acl=0
eap_server=0
wpa=2
wpa_passphrase=lingyun_embedded/自己设置密码/
wpa_key_mgmt=WPA-PSK

# WPA standard definition only support TKIP, but the vendor
# support AES-CCMP(A.K.A AES or CCMP) too.
wpa_pairwise=TKIP CCMP

# RSN(A.K.A WPA2) standard define support TIKP AES-CCMP.
rsn_pairwise=TKIP CCMP

wpa_group_rekey=86400
wpa_gmk_rekey=86400

如果你曾配置过路由器,有些选项你会熟悉吧。初学没必要把每个选项弄懂,把几个重要的设置好就行了。

配置好之后就可以运行了:

~ >: mkdir -p /var/run/hostapd

~ >: hostapd -B /apps/etc/network/hostapd.conf
Configuration file: /apps/etc/network/hostapd.conf
Using interface wlan0 with hwaddr 00:0c:43:30:72:81 and ssid 'Router_s3c2440'

~ >: ls /var/run/hostapd/
wlan0(不清楚这里生成和下面的mon.wlan0有什么关系,有大神请留言指教)

可以看到生成的wlan0,而且

~ >: ifconfig
eth0      Link encap:Ethernet  HWaddr 00:E5:49:83:76:1A 
          inet addr:192.168.1.168  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:371446 errors:0 dropped:43 overruns:0 frame:0
          TX packets:306189 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:360520116 (343.8 MiB)  TX bytes:140937225 (134.4 MiB)
          Interrupt:51 Base address:0x4300

lo        Link encap:Local Loopback 
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1320 (1.2 KiB)  TX bytes:1320 (1.2 KiB)

mon.wlan0 Link encap:UNSPEC  HWaddr 00-0C-43-30-72-81-00-00-00-00-00-00-00-00-00-00 
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2883 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:329852 (322.1 KiB)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 00:0C:43:30:72:81 
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:310453 errors:0 dropped:0 overruns:0 frame:0
          TX packets:372073 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:141302428 (134.7 MiB)  TX bytes:365778847 (348.8 MiB)

会发现多生成了一个mon.wlan0的网络接口。这个查了下也没弄清是怎么工作的。

但是现在你还无法上网,联网的结果是会是受限的访问权限。

这是因为我们数据没法通过路由器转发出去,解决方法是用iptables来实现NAT。首先你要移植iptables到你的开发板,

NAT分成了两种类型,即源NAT(SNAT)和目的NAT(DNAT),顾名思义,所谓SNAT就是改变转发数据包的源地址,所谓DNAT就是改变转发数据包的目的地址。

NAT表也有三条缺省的"链"(chains),这三条链也是规则的容器,它们分别是:

PREROUTING:可以在这里定义进行目的NAT的规则,因为路由器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必须在路由之前就进行目的NAT;

POSTROUTING:可以在这里定义进行源NAT的规则,系统在决定了数据包的路由以后在执行该链中的规则。

OUTPUT:定义对本地产生的数据包的目的NAT规则。

有一种SNAT的特殊情况是ip欺骗,也就是所谓的Masquerading,通常建议在使用拨号上网的时候使用,或者说在合法ip地址不固定的情况下使用。

对于nat没什么深入研究,下面有个网址讲的不错:

http://www.51cto.com/html/2005/0813/1388.htm

配置SNAT

Linux可以很方便的通过iptables配置SNAT服务器,命令如下:

~ >: ptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
~ >: iptables -A FORWARD -s 192.168.5.0/24 -j ACCEPT
~ >: iptables -A FORWARD -d 192.168.5.0/24 -j ACCEPT

其中第一条表示将通过本机的转发数据包从eth0(外网)这个网卡发出去,另外两条表示只转发192.168.5.0/24这个网段过来的数据包,这个网段正好是wlan0其它设备连上本机以后分配的网段。

还需要在打开内核的ip转发功能:

~ >: vim /etc/sysctl.conf

添加或修改这样一段:

net.ipv4.conf.default.rp_filter = 1

然后执行命令

~ >: sysctl -p

再把我们的网线连上开发板,我们的电脑就可以连接开发板上网了。

 

 

 

 

 

 

最后

以上就是陶醉音响为你收集整理的WIFI模块工作模式浅析(二)的全部内容,希望文章能够帮你解决WIFI模块工作模式浅析(二)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部