负责研发运动DV,功能有参考gopro,发现gopro有个特别功能,iphone连上gopro的ap热点之后,iphone打开移动网络(2/3/4 G网络)仍然可以上网!按理说,连上任意一个局域网,经过dhcp之后,设备就应该只能经过指定网关和域名服务器来访问外网啊,很奇怪,gopro是怎么实现的呢?
观察发现,连上gopro ap的iphone ip及网关变了,dns还是原来那个,也就是说,gopro没有分配dns地址!手头这个类android系统用的是dnsmasq,开启的热点会分配dns地址,是不是这个区别让gopro实现了这个功能呢?现在的问题就是如何实现实现这个功能,看看是不是gopro的效果了。
连接ap之后,手机端执行dhcpd来获取ip地址等信息,android或是类android设备的热点端一般都是用dnsmasq来给设备分配ip的。dhcp的过程其他地方查得到,这里不说了,dhcp的时候有个阶段是给sta发送ip地址、网关地址以及dns地址的,只需把填充dns地址的那小段代码屏蔽即可实现不分配dns的功能,而且经过测试,这正是gopro实现的功能---连上设备ap开启2/3/4G网络还可以通过移动网络上网。
主要修改有:
external\dnsmasq\src\rfc2131.c 屏蔽2190-2192行:
/*if (in_list(req_options, OPTION_DNSSERVER) &&
!option_find2(netid, config_opts, OPTION_DNSSERVER))
option_put(mess, end, OPTION_DNSSERVER, INADDRSZ, ntohl(context->local.s_addr));*/