android wifi设置dhcp,如何在Android上配置WIFI共享(热点)的DHCP设置?

注意:根是必需的。

默认的DHCP IP地址范围是硬编码的(1),如果不使用修改后的源代码重建ROM,就无法更改它。或使用一点技巧。

开启网络共享时,至少会发生以下情况:

hostapd -管理访问点的守护程序-已启动。

网络接口设置,IP地址被添加到Wi-Fi接口(Android的饼图之前硬编码(2,3),然后随机化(4)),并加入路由表(5)用于本地网络(6)。

dnsmasq-DHCP / DNS服务器(最多Pie)-从硬编码的命令行参数(7)启动(否则可以通过/etc/dnsmasq.conf (8)设置)。

因此,我们可以/system/bin/dnsmasq用一个自定义的shell脚本替换它,从而控制两者之间的过程。将原始二进制文件重命名为其他名称:

# mv /system/bin/dnsmasq /system/bin/dnsmasq.bin

创建脚本/system/bin/dnsmasq:

#!/system/bin/sh

OLD_SUBNET='192.168.43'

NEW_SUBNET='192.168.1'

WIFI_INTERFACE='wlan0'

LOCAL_TABLE='97'

export PATH=/system/bin

# delete old route, add new

ip route del ${OLD_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE

ip route add ${NEW_SUBNET}.0/24 dev ${WIFI_INTERFACE} table $LOCAL_TABLE

# set new IP address on Wi-Fi interface

ip address add ${NEW_SUBNET}.1/24 dev $WIFI_INTERFACE

# inject new subnet in hard-coded arguments received from netd

set -- $(printf '%s' "$*" | sed 's/'${OLD_SUBNET}'/'${NEW_SUBNET}'/g')

unset OLD_SUBNET NEW_SUBNET WIFI_INTERFACE LOCAL_TABLE

# execute original binary with new arguments

exec dnsmasq.bin $*

确认您的Wi-Fi接口的名称(wlan0通常)。用ip link或检查ls /sys/class/net/。

另外,请确认您的本地网络的路由表是97:grep local_network /data/misc/net/rt_tables。Android的路由非常混乱,每个新版本都变得更加复杂。因此,我不确定这是否一直存在。同样,在进行任何更改之前,请检查您的路由策略和表以弄清楚应在脚本中添加的内容:

~# RULES="$(ip rule | grep -vE 'unreachable|local')"

~# echo "$RULES"

~# for t in $(echo "$RULES" | awk '{print $NF}' | uniq); do ip r s table $t; done

如果(全部或部分)尚未定义并且status为,则还需要定义SELinux规则enforcing。使用Magisk suploicy或其他类似工具sepolicy-inject:

# execute binaries from /system/bin

allow netd system_file dir { read open getattr search }

allow netd system_file file { read gettattr open execute execute_no_trans }

# execute /system/bin/sh

allow netd shell_exec file { read getattr open execute execute_no_trans }

# execute /system/bin/toolbox and its applets

allow netd toolbox_exec file { read gettattr open execute execute_no_trans }

# configure RPDB rules / routing tables

allow netd netd capability { sys_admin }

*重新启动后无法永久使用,使用某些init.d脚本或替换/sepolicy为ramdisk

设置文件权限:

~# chown 0.0 /system/bin/dnsmasq*

~# chmod 0755 /system/bin/dnsmasq*

~# chcon u:object_r:dnsmasq_exec:s0 /system/bin/dnsmasq*

请享用!

或者,您可以从命令行设置完整的网络共享,运行自己的进程。该答案包括说明,尽管问题有所不同。

有关:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值