Android便携式WLAN热点分析
Android便携式WLAN热点分析
Platform: RK3368
OS: Android 6.0
Kernel: 3.10.0
文章目录
- Android便携式WLAN热点分析
- 分析Android开启WLAN热点的路由策略和防火墙
- 便携式WLAN热点开启流程
- 路由表
- 路由策略
- iptables(防火墙)
- 用hostapd命令手动开启WLAN热点
- 1.加载驱动
- 2.配置wlan0 IP地址
- 3.运行hostapd
- 4.配置IP路由
- 5.使能ip forward
- 6.配置iptables
分析Android开启WLAN热点的路由策略和防火墙
在Android系统中,开启便携式WLAN热点(也称为Wi-Fi热点)涉及多个组件和层之间的交互。
便携式WLAN热点开启流程
-
应用层请求:
- 用户通过系统设置或其他应用请求开启Wi-Fi热点。
- 应用通过
WifiManager的setWifiApEnabled()方法发送请求。
-
Framework层处理:
WifiManager接收请求后,调用WifiServiceImpl的setWifiApEnabled()方法。WifiServiceImpl进一步将请求传递给WifiController。WifiController通过WifiStateMachine(状态机)来处理热点开启的逻辑。WifiStateMachine决定需要进行的操作,包括配置热点参数(SSID、密码等)并调用NetworkManagementService来执行具体的网络操作。
-
与Native层的交互:
NetworkManagementService通过NativeDaemonConnector与本地守护进程netd进行通信。- NativeDaemonConnector通过UNIX socket(例如
/dev/socket/netd)向netd发送命令和数据。 netd接收命令后,解析并执行相应的操作。
-
配置文件生成:
netd将接收到的热点配置(SSID、密码、加密方式等)写入到/data/misc/wifi/hostapd.conf文件中。- 这个配置文件是hostapd服务启动时用于配置Wi-Fi热点的关键文件。
-
启动hostapd服务:
netd通过执行/system/bin/hostapd命令来启动hostapd守护进程。- hostapd是一个开源的、用户空间的IEEE 802.11接入点(AP)和认证服务器。
- hostapd读取
/data/misc/wifi/hostapd.conf配置文件,并根据其中的配置来启动和管理Wi-Fi热点。
-
状态更新和反馈:
- 一旦hostapd成功启动并配置好热点,
netd会通过socket将状态更新回传给Framework层。 - Framework层更新其内部状态,并通过系统通知或其他方式告知用户热点已成功开启。
- 一旦hostapd成功启动并配置好热点,
路由表
用ip route show table all命令查看显示所有路由表中的路由信息,对比打开热点前新增了以下:
10.0.0.0/16 dev wlan0 table local_network proto static scope link
10.0.0.0/16 dev wlan0 proto kernel scope link src 10.0.254.1
broadcast 10.0.0.0 dev wlan0 table local proto kernel scope link src 10.0.254.1
local 10.0.254.1 dev wlan0 table local proto kernel scope host src 10.0.254.1
broadcast 10.0.255.255 dev wlan0 table local proto kernel scope link src 10.0.254.1
fe80::/64 dev wlan0 table 1004 proto kernel metric 256
unreachable default dev lo table 0 proto kernel metric 4294967295 error -101
local fe80:: dev lo table local proto none metric 0
local fe80:: dev lo table local proto none metric 0
local fe80::2250:e7ff:fe53:6c8a dev lo table local proto none metric 0
ff00::/8 dev wlan0 table local metric 256
android是通过netd发送netlink请求添加这些路由;也可以手动用 ip route 命令添加:
ip route add table local_network dev wlan0 10.0.0.0/16
命令功能:向指定的路由表 local_network 中添加一条路由规则,使所有发往 10.0.0.0/16 网段的数据包都通过 wlan0 接口发送。
路由策略
用ip rule list命令查看,对比打开热点前新增了以下规则:
10500: from all oif wlan0 uidrange 0-0 lookup local_network
14000: from all oif wlan0 lookup local_network
18000: from all iif wlan0 lookup eth0
android是通过netd发送netlink请求添加这些规则;也可以手动用 ip rule 命令添加:
ip rule add priority 10500 from all oif wlan0 uidrange 0-0 table local_network
ip rule add priority 14000 from all oif wlan0 table local_network
ip rule add priority 18000 from all iif wlan0 table eth0
第一条命令:为从接口wlan0发出且用户ID范围为0的数据包添加优先级10500的规则,指定这些数据包使用名为local_network的路由表。
第二条命令:同样对wlan0接口的数据包设置规则,但未指定UID范围,默认所有UID;优先级设为14000,并使用local_network表。
第三条命令:对于通过wlan0接口接收的数据包设置规则,优先级18000,指向eth0路由表。
iptables(防火墙)
查看日志,看到netd执行了以下iptables命令:
iptables -w -D natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
iptables -w -F natctrl_FORWARD
iptables -w -A natctrl_FORWARD -j DROP
iptables -w -t nat -F natctrl_nat_POSTROUTING
iptables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
iptables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
iptables -w -t nat -A natctrl_nat_POSTROUTING -o eth0 -j MASQUERADE
iptables -w -A natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
iptables -w -D natctrl_FORWARD -j DROP
iptables -w -A natctrl_FORWARD -j DROP
这些iptables命令,主要用于配置和管理网络流量,实现共享上网、提高网络安全等目的:
1. 删除和刷新规则:
删除nat表natctrl_FORWARD链中特定的规则:
iptables -w -D natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
删除允许从eth0到wlan0接口、状态为ESTABLISHED或RELATED的连接计数规则。
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
删除丢弃从wlan0到eth0接口、状态为INVALID的连接规则。
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
删除从wlan0到eth0接口的连接计数规则。
清空nat表natctrl_FORWARD链中的所有规则:
iptables -w -F natctrl_FORWARD
删除nat表natctrl_FORWARD链中的DROP动作规则:
iptables -w -D natctrl_FORWARD -j DROP
2. 配置数据包过滤:
在nat表natctrl_FORWARD链中添加DROP动作规则:
iptables -w -A natctrl_FORWARD -j DROP
在nat表natctrl_FORWARD链中添加允许从eth0到wlan0接口、状态为ESTABLISHED或RELATED的连接计数规则:
iptables -w -A natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
在nat表natctrl_FORWARD链中添加丢弃从wlan0到eth0接口、状态为INVALID的连接规则:
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
在nat表natctrl_FORWARD链中添加从wlan0到eth0接口的连接计数规则:
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
3. 配置NAT规则:
清空nat表natctrl_nat_POSTROUTING链中的所有规则:
iptables -w -t nat -F natctrl_nat_POSTROUTING
在nat表natctrl_nat_POSTROUTING链中添加MASQUERADE规则,将从eth0接口发出的所有数据包进行源地址伪装:
iptables -w -t nat -A natctrl_nat_POSTROUTING -o eth0 -j MASQUERADE
4. 配置数据包标记:
删除mangle表INPUT链中对从wlan0接口流入的数据包进行标记的规则:
iptables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
在mangle表INPUT链中添加对从wlan0接口流入的数据包进行标记的规则:
iptables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
用hostapd命令手动开启WLAN热点
1.加载驱动
手上的设备wifi驱动不是编译为模块,而是buildin方式, 所以不用insmod, 用以下命令打开驱动:
# echo '1'> /sys/class/rkwifi/driver
2.配置wlan0 IP地址
# ifconfig wlan0 192.168.43.1 netmask 255.255.0.0
3.运行hostapd
# /system/bin/hostapd -e /data/misc/wifi/entropy.bin /data/misc/wifi/hostapd.conf
/data/misc/wifi/hostapd.conf文件内容:
interface=wlan0
driver=nl80211
ctrl_interface=/data/misc/wifi/hostapd
ssid=MyAP
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wowlan_triggers=any
4.配置IP路由
# ip route add table local_network dev wlan0 192.168.43.0/24
5.使能ip forward
# echo "1">/proc/sys/net/ipv4/ip_forward
6.配置iptables
iptables -w -D natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
iptables -w -D natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
iptables -w -F natctrl_FORWARD
iptables -w -A natctrl_FORWARD -j DROP
iptables -w -t nat -F natctrl_nat_POSTROUTING
iptables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -D INPUT -i wlan0 -j MARK --set-mark 0x30063
iptables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
ip6tables -w -t mangle -A INPUT -i wlan0 -j MARK --set-mark 0x30063
iptables -w -t nat -A natctrl_nat_POSTROUTING -o eth0 -j MASQUERADE
iptables -w -A natctrl_FORWARD -i eth0 -o wlan0 -m state --state ESTABLISHED,RELATED -g natctrl_tether_counters
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -m state --state INVALID -j DROP
iptables -w -A natctrl_FORWARD -i wlan0 -o eth0 -g natctrl_tether_counters
iptables -w -D natctrl_FORWARD -j DROP
iptables -w -A natctrl_FORWARD -j DROP
相关文章:
Android便携式WLAN热点分析
Android便携式WLAN热点分析 Platform: RK3368 OS: Android 6.0 Kernel: 3.10.0 文章目录 Android便携式WLAN热点分析分析Android开启WLAN热点的路由策略和防火墙便携式WLAN热点开启流程路由表路由策略iptables(防火墙) 用hostapd命令手动开启WLAN热点1.加载驱动2.配置wlan0 …...
从经济学原理看团队分工合作
最近我接触到一个经济学概念叫"比较优势"。学过经济学的同学应该很熟悉,但为了让不了解经济学的朋友们也能明白,我们先来解释下什么是比较优势,然后再谈谈为什么我认为这个原理应当被用在团队合作的分工当中。 比较优势是19世纪初…...
企业一级流程架构规划方法
在之前关于企业业务流程规划的系列文章中,我们已经分别对企业业务流程规划的价值和原则、企业的业务流程架构的应用、两种常见的企业总体业务流程架构模式等进行了比较深入的分析和阐述,相信大多数企业同仁,已经对企业的业务流程规划…...
用ESP32驱动stt7735 TFT屏幕
操作流程: 1 在esp32项目中搜索TFT库 2 找到对应TFT_eSPI库,添加进所在项目中(这里可能下载很久) 3 找到对应屏幕文件下的User_Setup.h 修改,将驱动换成ST7735_DRIVER,并修改对应屏幕引脚和屏幕尺寸&…...
Yolo目标检测:Yolo v1简介
一、Yolo系列介绍 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,由Joseph Redmon等人于2016年提出。它的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测目标的类别和位置。YOLO算法将输入图…...
Java動態轉發代理IP詳解
Java中實現動態轉發代理IP 在Java中實現動態轉發代理IP並不複雜,通常可以通過一些開源庫和框架來實現。下麵是一個簡單的實現思路: 設置HTTP請求:在Java中,可以使用HttpURLConnection或Apache HttpClient來發送HTTP請求。在發送…...
Android15之解决gdb:Remote register badly formatted问题(二百三十六)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
【Router】路由器中NAT、NAPT、NPT是什么?
参考链接 NAT vs. NAPT: What’s the Difference? IPv6 Network Prefix Translation (NPt) | pfSense Documentation (netgate.com) 趣谈NAT/NAPT的原理,这篇不可不读! - 知乎 (zhihu.com) NAT (Network Address Translation) NAT说明 NAT&#x…...
代码随想录算法训练营第三十九天|背包问题,416. 分割等和子集
背包问题,416. 分割等和子集 背包问题416. 分割等和子集 背包问题 有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 卡玛网的…...
可调用对象和Lambda
可调用对象: 函数 函数指针 函数对象 Lambda表达式(匿名函数) 01 函数对象 如果一个类实现了"函数调用运算符()"的重载,那么这个类的对象称为函数对象(仿函数) 函数对象的行为,类似于函数,可以被调用 #include …...
华为认证HCIE存储考啥?未来发展方向在哪?一个月就能轻松拿下?
说起HCIE,很多人第一反应都是路由交换、网络安全那些“热门”方向,而存储方向反而成了小众的存在。 其实,存储的江湖地位一点不低,尤其在数据爆炸的时代。 今天咱们就聊聊HCIE存储考什么、为什么要学,以及未来的可能…...
如何让自己的网站,被更多的人搜索到(免费方案)
文章目录 一、要做时间的朋友二、需要独立IP的服务器三、SEO信息如何设置设置网站TDK生成网站地图设置搜索引擎自动提交部署SSL证书加分项:定期更新文章 引言: 许多人都有这样一个问题:做好自己的网站,如何让这个网站被更多的人浏…...
Modbus 协议:工业自动化领域的通信脊梁
一、引言 在当今工业自动化的舞台上,数据的准确传输和设备间的有效通信是实现高效生产、精准控制的关键。Modbus 协议作为一种应用广泛、历史悠久的通信协议,在工业领域发挥着举足轻重的作用。从工厂的生产线到智能建筑的控制系统,从能源管理…...
函数的力量:掌握C语言的基石
目录 前言 标准库:C语言的百宝箱 头文件:库函数的藏宝图 实例分析:计算平方根的sqrt函数 功能描述 头文件包含的重要性 库函数文档的一般格式 自定义函数:释放你的编程创造力 函数的语法形式 函数的比喻 函数的举例 简化…...
U-Boot的移植流程
U-Boot的简化版启动流程: 1、设置状态寄存器 cpsr ,使CPU进入 SVC 特权模式,并且禁止 FIQ 和 IRQ; 2、关闭看门狗、中断、MMU、Cache; 3、初始化部分寄存器和外设(时钟、串口、Flash、内存)&…...
xRDP – 在 Ubuntu 18.04、20.04、22.04、22.10、23.04(脚本版本 1.4.7)上轻松安装 xRDP
最新脚本Repository | c-nergy.be 概述 到目前为止,您应该知道 xrdp-installer 脚本旨在简化 xRDP 在 Ubuntu 操作系统上的安装和配置后操作。xRDP 是一款在 Linux 上启用远程桌面服务的软件。这意味着 Windows 用户可以使用他们的远程桌面客户端 (mst…...
[Linux网络编程]04-多进程/多线程并发服务器思路分析及实现(进程,信号,socket,线程...)
一.思路 实现一个服务器可以连接多个客户端,每当accept函数等待到客户端进行连接时 就创建一个子进程; 核心思路:让accept循环阻塞等待客户端,每当有客户端连接时就fork子进程,让子进程去和客户端进行通信,父进程用于…...
《OpenCV计算机视觉》—— 年龄与性别预测
结合以下链接中的文章有助于理解此篇案例: OpenCV中的 cnn 模块 https://blog.csdn.net/weixin_73504499/article/details/142965441?spm1001.2014.3001.5501 此案例是通过使用OpenCV中的cnn模块来调用别人已经训练好的深度学习模型,此篇案例中用到了…...
详解23种设计模式——第一部分:概述+创建型模式
目录 1. 概述 2. 创建型模式 2.1 简单(静态)工厂模式 2.1.1 介绍 2.1.2 实现 2.2 工厂模式 2.3 抽象工厂模式 2.4 单例模式 2.4.1 饿汉模式 2.4.2 懒汉模式 2.4.3 线程安全的懒汉式 2.4.4 DCL单例 - 高性能的懒汉式 2.5 建造者模式 2.6 原…...
semi-Naive Bayesian(半朴素贝叶斯)
semi-Naive Bayesian(半朴素贝叶斯) 引言 朴素贝叶斯算法是基于特征是相互独立这个假设开展的(为了降低贝叶斯公式: P ( c ∣ x ) P ( c ) P ( x ∣ c ) P ( x ) P(c|x) \frac {P(c)P(x|c)}{P(x)} P(c∣x)P(x)P(c)P(x∣c)中后验概率 P …...
毕业设计作品精选【芳芯科技】酒驾检测座椅设计
实物效果图:实现功能:有人的情况下,单片机实时采集周围的酒精浓度,如果超出,蜂鸣器报警,LED闪烁。检测座位重量和检测人体发射的红外,两者都满足认为座位有人,否则无人。配有显示屏进…...
OFA图像描述模型商业应用:自动生成产品图片描述,提升电商效率
OFA图像描述模型商业应用:自动生成产品图片描述,提升电商效率 1. 电商图片描述的痛点与解决方案 在电商运营中,产品图片描述是一个既重要又繁琐的工作。传统方式需要人工撰写每张产品图片的说明文字,这不仅效率低下,…...
告别重复劳动,用快马平台ai高效生成openclaw自动化脚本
最近在折腾一些文件批量处理的自动化任务,发现OpenClaw这个命令行工具特别适合做这类工作。但每次都要手动敲命令实在太费时间了,特别是需要组合多个命令的时候,调试起来特别麻烦。后来发现了InsCode(快马)平台,用它来编写OpenCla…...
GHelper终极指南:免费解放华硕笔记本性能的完整解决方案
GHelper终极指南:免费解放华硕笔记本性能的完整解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...
AI 学习笔记:LLM 的部署与测试
关于 LLM 的本地部署 正如我之前在《[[关于 AI 的学习路线图]]》一文中所提到的,从学习的角度来说,如果我们要想切实了解 LLM 在计算机软件系统中所处的位置,以及它在生产环境中所扮演的角色,最直接的方式就是尝试将其部署到我们…...
证书配置与资源拦截全攻略:res-downloader高效使用指南
证书配置与资源拦截全攻略:res-downloader高效使用指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader res-downl…...
Jedi-vim与其他Vim插件的终极兼容性指南:避免冲突的10个技巧
Jedi-vim与其他Vim插件的终极兼容性指南:避免冲突的10个技巧 【免费下载链接】jedi-vim Using the jedi autocompletion library for VIM. 项目地址: https://gitcode.com/gh_mirrors/je/jedi-vim Jedi-vim是Vim编辑器中最强大的Python自动补全插件之一&…...
提升中文编辑效率:notepad--本土化配置指南
提升中文编辑效率:notepad--本土化配置指南 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 作为中文用户&a…...
PyTorch 3.0静态图分布式训练全链路解析(含NCCL拓扑感知、Graph Partitioning与梯度同步优化)
第一章:PyTorch 3.0静态图分布式训练概览与演进脉络PyTorch 3.0标志着框架在可扩展性与编译优化方向的重大跃迁——其核心变化之一是将TorchDynamo Inductor后端深度整合为默认的静态图编译通道,并原生支持跨设备、跨节点的分布式静态图训练。这一演进并…...
MongoDB中大型文本字段怎么存_GridFS切分与外部存储对比
会。MongoDB单文档上限16MB,但超2MB字符串易致客户端OOM或超时;GridFS非自动魔法,需手动管理分块、拼接与清理;大文本应优先存OSS/S3,Mongo仅存元数据。大文本存MongoDB会撑爆内存吗?会。MongoDB单文档上限…...
