WIFI热点鉴权

第1章 WIFI热点鉴权

Wifi热点是将手机接收的GPRS、3G或4G信号转化为wifi信号发出去的技术,手机必须有无线AP功能,才能当做热点。

1.1 主要相关类

    1、TetherSettings:是WiFi热点对应的界面;

    2、WifiTetherSwitchBarController.java是用来负责热电开关的相关处理逻辑;

    3、WifiTetherPreferenceController.java实现对preference的精细化控制。

1.1.1 开关控制

/packages/apps/Settings/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java   

1、WifiTetherSwitchBarController. onSwitchToggled—》startTether()

2、WifiTetherSwitchBarController.startTether:

        mSwitchBar.setEnabled(false);

       mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));

可以看出WiFi热点代开是通过ConnectivityManager.startTethering方法实现的。

3、ConnectivityManager.startTethering方法:是通过OnStartTetheringCallback实现的。可以看出wifi热点代开是通过ConnectivityManager.startTethering方法实现的。

4、WifiTetherSwitchBarController进行状态监听onReceive(),handleWifiApStateChanged

1.1.2 WifiTetherSwitchBarController

/packages/apps/Settings/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java

ConnectivityManager.startTethering方法。

1)WifiTetherSwitchBarController.startTether à       mConnectivityManager.startTethering ,callback抽象类直接new出来

public void startTethering(int type, boolean showProvisioningUi,final OnStartTetheringCallback callback, Handler handler) {

2)状态监听

WifiTetherSwitchBarController. onReceiveResult()

WifiTetherSwitchBarController. handleWifiApStateChanged

WifiTetherSwitchBarController. updateWifiSwitch();

1.1.3 ConnectivityManager

/frameworks/base/core/java/android/net/ConnectivityManager.java

ConnectivityManager.startTethering方法。

在startTethering方法中,调用mService.startTethering(type, wrappedCallback, showProvisioningUi);,发现mService类型为IConnectivityManager,这里用到了android里面的aidl通信机制,定义在IConnectivityManager.aidl文件中,实现在/frameworks/base/services/core/java/com/android/server/ConnectivityService.java中,所以在ConnectivityManager中的调用相当如调用的是ConnectivityService.java中的startTethering方法。

  1. ConnectivityService

/frameworks/base/services/core/java/com/android/server/ConnectivityService.java

ConnectivityService中的startTethering方法最终调用Tethering中的startTethering方法

  1. Tethering

/frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java

1.1.4 Tethering

/frameworks/base/services/core/java/com/android/server/connectivity/Tethering.java

1. Tethering. startTethering:打开tethering需要provision。

if (!isTetherProvisioningRequired()) { enableTetheringInternal}

if (showProvisioningUi) {runUiTetherProvisioningAndEnable(type, receiver);}

else {runSilentTetherProvisioningAndEnable(type, receiver);}

runUiTetherProvisioningAndEnable—》getProxyReceiver、sendUiTetherProvisionIntent

2enableTetheringInternal方法,在这里面会涉及到我们的关键问题。

在这里有3个重要方法:

    Wifi共享:setWifiTethering(enable);

    USB共享:setUsbTethering(enable);

蓝牙共享:setBluetoothTethering(enable, receiver);

这里会走到WifiManager,wifi config为空表示使用已有的wifi config。 后面的sendTetherResult就是会调之前的receiver通知执行结果。

1.1.5 ATT需求模块

1)Tethering.onReceive:监听wifi状态,如果监听到WifiManager.WIFI_AP_STATE_CHANGED_ACTION---》handleWifiApAction()。

2)在handleWifiApAction方法里面检测到wifi时开启过程中还是已开启。如果已经开启wifi,会调用enableWifiIpServingLocked。enableWifiIpServingLocked—》changeInterfaceState()--》tether()有if(!permit){ (ifname, requestedState)。--》checkPermission()--》isATTSimCard()判断是不是att的卡

在if(!permit){方法里面判断一下是否是ATT,权限是否允许

permit = checkPermission(iface);

if(!permit){//如果是ATT的且权限允许的话,执行……}

else{//如果不是ATT的话就执行

return tether_internel(iface,requestedState);}

3)看一下checkPermission:

在这个方法里面会判断是否是ATT的卡,ATT的卡为False,非ATT的卡为true。

ATT的卡changeInterfaceState()就会返回true,enableWifiIpServingLocked()方法返回true

1.1.6 ATT需求模块

1)Tethering

/vendor/tct/source/apps/serviceEntitlement/src/com/app/serviceEntitlement/HttpUtils.java

在开启wifi,usb需要AT&T的认证,到对应的网站去发起请求,根据返回码做对应处理。

2)serviceEntitlementService.java

/vendor/tct/source/apps/serviceEntitlement/src/com/app/serviceEntitlement/serviceEntitlementService.java

在serviceEntitlementService.java中的entitlementHandle类的run函数中调用checkPermission。

entitlementHandle又是如何创建的呢?是在 TetherChangeReceiver中创建,TetherChangeReceiver是广播,专门来处理Tethering状态发生改变的事件,该广播注册在serviceEntitlementService的onCreate方法中。

最为重要的部分,serviceEntitlementService又是如何启动的呢?

通过查看/vendor/tct/source/apps/serviceEntitlement/AndroidManifest.xml文件,发现在该文件中注册了一个广播serviceEntitlementReceiver。

在serviceEntitlementReceiver.java中接收ACTION_BOOT_COMPLETED广播时,将开启服务serviceEntitlementService。

1.1.7 总结

  1. 在手机开机后,发出广播ACTION_BOOT_COMPLETED,serviceEntitlementReceiver接收到该广播,开启服务serviceEntitlementService。
  2. serviceEntitlementService的onCreate方法中注册广播TetherChangeReceiver,onDestroy方法中注销。
  3. TetherChangeReceiver中主要处理action为ACTION_SERVICE_ENTITLEMENT广播,最终创建entitlementHandle,并调用process方法,开启线程(entitlementHandle实现了Runnable接口)
  4. entitlementHandle中的run方法调用checkPermission,得到response,发送Intent(ACTION_SERVICE_ENTITLEMENT_RESULT)

 

1.1.8 serviceEntitlementService与Tethering模块交互

通过两个类型Intent:

ACTION_SERVICE_ENTITLEMENT

ACTION_SERVICE_ENTITLEMENT_RESULT

第一个Intent发送的方法为checkPermission,调用该方法的 tether,调用tether的方法为tetherMatchingInterfaces,最终调用的地方也是StateReceiver广播

第二个Intent接收的方法为StateReceiver广播内接收。

 

总结:两个模块之间的通信机制使用的是android里面的广播,两个之间处理流程是在开启网络共享功能时,会发生状态的改变,StateReceiver专门接收这类型的广播,最终调用对应的方法去做验证。

 

1.1.9 Tethering选择

Tethering构造方法中调用 updateConfiguration()去新建TetheringConfiguration对象,该对象保存分享配置的信息,其中有关apn选择的操作在 TetheringConfiguration的构造方法中.

    通过checkDunRequired最终调用TelephonyManager类中的方法getTetherApnRequired.

    在PhoneInterfaceManager中具体实现,调用phone.hasMatchedTetherApnSetting然后通过DcTracker对象的hasMatchedTetherApnSetting方法去获取有无DUN APN

 

        当 StateReceiver广播接收器收到ConnectivityManager.CONNECTIVITY_ACTION广播时,调用handleConnectivityAction.

在handleConnectivityAction发出消息mTetherMasterSM.sendMessage(TetherMasterSM.CMD_UPSTREAM_CHANGED)

TetherModeAliveState中processMessage调用chooseUpstreamType.

chooseUpstreamType中调用maybeUpdateConfiguration去更新TetheringConfiguration的信息,然后UpstreamNetworkMonitor中的selectPreferredUpstreamType根据传进来的参数选择网络类型去请求建立对应的网络.

具体实现在registerMobileNetworkRequest中,调用ConnectivityService中的requestNetwork去请求对应的网络

3. setWifiTethering说明举例:

484                mWifiTetherRequested = enable;

//使用用已存在的wifi配置

485                final WifiManager mgr = getWifiManager();

1.1.5 WifiManager

1)/frameworks/base/wifi/java/android/net/wifi/WifiManager.java

startSoftAp --》mService.startSoftAp(wifiConfig)

IWifiManager mService;

WifiServiceImpl对IWifiManager.Stub进行实现

2)WifiServiceImpl.startSoftAp—》WifiServiceImpl.startSoftApInternal

3)WifiServiceImpl.startSoftApInternal:

SoftApModeConfiguration softApConfig = new SoftApModeConfiguration(mode, wifiConfig);

mWifiController.sendMessage(CMD_SET_AP, 1, 0, softApConfig);

转变对空的wifi config 包装成了SoftApModeConfiguration 接下来有WifiController 处理。

4WifiController.java

WifiController类继承自StateMachine 里面,采用的机制是android实现的状态机,它的创建和开启工作都在WifiServiceImpl中。

 

 

 

<think>好的,用户想了解随身WiFi的工作原理。我需要先回忆相关知识,确保准确。随身WiFi通常指便携式无线路由器,通过移动网络转WiFi。 首先,得明确它的组成部分。通常包括调制解调器模块、SIM卡、电池、WiFi芯片和天线。这些部件如何协作呢?移动网络信号接收是关键,可能涉及4G或5G。然后转换成WiFi信号,让多设备连接。 接下来要考虑网络转换过程。数据从移动网络到设备间的传输流程,可能需要解释NAT转换,或者路由功能。还要提到运营商网络的作用,比如SIM卡,数据流量等。 然后,用户可能关心的是与手机热点的区别。随身WiFi作为独立设备,可能有更好的续航和信号稳定性。这里需要强调专用性,可能使用更高增益的天线。 另外,供电方式也很重要,内置电池让它可以随身携带,不需要外接电源。这也影响了使用场景,比如旅行或移动办公。 安全方面,可能需要提及加密方式,如WPA2/WPA3,防止未授访问。设置界面可能通过网页或APP管理,这也需要简要说明。 最后,总结工作原理时,要分步骤清晰列出,从接收移动信号到转换成WiFi,再到多设备连接。确保语言通俗易懂,避免过于技术化,但保持准确性。 检查是否有遗漏点,比如支持的网络频段,运营商兼容性,或者数据共享功能。这些可能也是用户关心的,但核心是工作原理,所以可能简要提及即可。 需要确保回答结构清晰,分点解释,符合用户要求的中文回答,同时注意使用正确的LaTeX格式,不过这个问题可能涉及较少的数学公式,但如果有参数或方程式可能需要使用,比如信号频率或功率计算,但可能这里不太需要,所以重点放在工作原理的步骤和组件上。 确认每个部分逻辑连贯,没有技术错误。比如调制解调器负责移动网络连接,WiFi芯片生成热点,电池供电,天线增强信号。整个流程是否正确,是否需要补充数据流程的步骤? 可能需要提到数据如何从移动网络通过调制解调器,经过处理转换成WiFi信号,由天线发射,设备连接后实现上网。这样流程更清晰。 检查是否覆盖所有关键点,确保用户理解随身WiFi如何将移动数据转化为共享的WiFi网络,以及其与手机热点的不同之处。可能还要提到便携性和续航优势。 完成这些思考后,组织成结构化的回答,分步骤或分部分,帮助用户逐步理解。</think>### 随身WiFi工作原理分步解析 #### 1. **硬件组成** - **调制解调器(Modem)**:核心部件,负责通过内置的**SIM卡**接收移动网络信号(如4G/5G)。 - **WiFi芯片**:将移动网络数据转换为WiFi信号,支持多设备接入。 - **天线**:增强信号接收与发射能力(部分设备含外置天线)。 - **电池**:提供独立供电,确保便携性。 #### 2. **移动网络连接** - **SIM卡**:插入SIM卡后,设备通过运营商网络完成身份验证,获取IP地址。 - **数据接收**:调制解调器从基站接收移动数据(如下载速率可达$150\text{Mbps}$的4G网络)。 #### 3. **网络转换与分发** - **协议转换**:调制解调器将移动数据(如LTE协议)转换为TCP/IP协议。 - **NAT(网络地址转换)**:通过路由器功能,将单一移动IP分配给多个设备(例如同时连接手机、平板、笔记本)。 - **WiFi热点生成**:WiFi芯片以$2.4\text{GHz}$或$5\text{GHz}$频段发射信号,支持WPA3加密。 #### 4. **设备连接** - 用户设备(如手机)搜索WiFi信号并输入密码,通过DHCP协议自动获取局域网IP(如$192.168.1.x$)。 - 数据流向:设备请求 → WiFi信号 → 随身WiFi → 移动网络 → 互联网。 #### 5. **与手机热点的区别** - **专用硬件**:天线增益更高(如$5\text{dBi}$),信号覆盖更广。 - **续航优化**:大容量电池(如$5000\text{mAh}$)支持长时间使用。 - **多设备负载**:专用芯片可稳定连接更多设备(如10台以上)。 #### 6. **典型应用场景** - 户外旅行:通过移动网络覆盖盲区(如山区、野外)。 - 临时办公:为团队提供共享网络,避免手机热点发热或耗电过快。 ### 总结 随身WiFi本质是**便携式无线路由器**,通过“接收移动信号→协议转换→生成WiFi热点”的流程,实现多设备共享高速网络。其优势在于专用硬件设计,解决了手机热点的信号弱、续航短等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值