将我的电脑连接到Android Wi-Fi热点时,它为我的电脑分配了一个192.168.42.x地址。我真的需要更改它,因为它与我们的工作子网之一冲突-这可能吗?

评论

我的手机已经扎根。如果需要,我不介意更改系统文件。

就像上面的一些好答案中对细微差别的回应一样,在我的实践中,192.168.43.0 / 24范围是由Android /供应商默认分配给WiFi绑定,而192.168.42.0/24则是针对USB绑定。

如何更改默认的DHCP IP地址范围?

#1 楼

不幸的是,即使在CyanogenMod中,也无法更改内置网络共享支持的IP地址范围。 Wi-Fi热点IP被硬编码在android.net.wifi.WifiStateMachine.startTethering();中。 USB共享IP硬编码在com.android.server.connectivity.Tethering中。
但是,如果您的手机已扎根,您可以尝试使用第三方应用进行共享,这些应用可以更改IP地址范围。例如,当三星Galaxy W的CyanogenMod alpha中内置的USB绑定中断时,我使用了适用于root用户的有线绑定。对于Wi-Fi网络共享,您可以尝试使用同一作者的“无线Root用户”应用程序,该应用程序还可以更改IP地址范围。

由于Google Code已关闭,因此上述链接不再工作。有些人将这些存储库中的源代码导出到GitHub:

https://github.com/luftreich/android-wired-tether
https://github.com/mmorciegov/android -wifi-tether

但是,没有进一步的开发活动,并且这些应用可能不再能在最新的Android版本上运行。
如果有人要尝试使用那些过时的应用,我有能够在Google代码存档中找到一些APK文件:

wired_tether_1_4.apk
wifi_tether_v3_4-experimental1.apk


评论


+1的信息。我的设备已扎根,但“根用户无线束缚”应用程序无法在我的手机上运行。应该有一些方法可以更改植根电话C'Mon Man!上的IP范围,毕竟Android是开放式操作系统。

–VVK
13年4月4日在5:18

@VVK有办法。只需重新编译源即可。

– Syakur Ra​​hman
16年11月29日在10:51

您提到的应用似乎不再存在。您知道发布者的名字,可以在网上找到任何新版本吗?我找到了一些其他人,但没有一个是免费的...

– pgr
17-10-27在17:53

@pgr找到了一些有效的链接,但没有更新的版本。

–谢尔盖·弗拉索夫(Sergey Vlasov)
17-10-30在7:17

在Android 11上,每次禁用并启用热点后,热点的网关IP似乎都在更改。因此,对于最新的Android,此答案已过时。现在的问题是,最终是否有解决方案?

–马丁·布劳恩
20-10-10在0:28

#2 楼

Android内置的wifi网络共享设计为使用192.168.43.1/24作为服务器,netd使用dnsmasq处理网络共享。第一个DNS范围是192.168.42.1-254,第二个DNS范围是192.168.43.1-254

Netd很难更改。它需要一个套接字才能与其通信,并且该套接字是在android开始绑定时使用的。但是遍历Tethering.java(我使用的是Froyo)的源文件,我们看到:

// usb client will be provided 192.168.42.129
private static final String USB_NEAR_IFACE_ADDR      = "192.168.42.129";
private static final String USB_NETMASK              = "255.255.255.0";

// FYI - the default wifi is 192.168.43.1 and 255.255.255.0

private String[] mDhcpRange;
private static final String DHCP_DEFAULT_RANGE1_START = "192.168.42.2";
private static final String DHCP_DEFAULT_RANGE1_STOP  = "192.168.42.254";
private static final String DHCP_DEFAULT_RANGE2_START = "192.168.43.2";
private static final String DHCP_DEFAULT_RANGE2_STOP  = "192.168.43.254";


随后我们看到使用的那些范围,例如BACKUPS。 dhcp范围的主要来源不是硬编码的42和43,而是从内部字符串数组array.config_tether_dhcp_range读取的。但目前为空。

您可以编辑android框架。在我的手机上是/system/framework/framework-res.apk。在线上有大量用于编辑framework-res.apk的教程,从简单的字符串到完整的主题。为您的手机和Android版本找到一个。

要更改的主要内容是/res/values/arrays.xml

查找<array name="config_tether_dhcp_range" />

更改为:

    mDhcpRange = context.getResources().getStringArray(
            com.android.internal.R.array.config_tether_dhcp_range);
    if ((mDhcpRange.length == 0) || (mDhcpRange.length % 2 ==1)) {
        mDhcpRange = new String[4];
        mDhcpRange[0] = DHCP_DEFAULT_RANGE1_START;
        mDhcpRange[1] = DHCP_DEFAULT_RANGE1_STOP;
        mDhcpRange[2] = DHCP_DEFAULT_RANGE2_START;
        mDhcpRange[3] = DHCP_DEFAULT_RANGE2_STOP;
    }


根据需要进行编译/压缩/签名(按照教程操作),然后重新安装。

如果要多个范围,只需复制一遍又两遍。您始终需要为每个范围提供起点和终点。尝试将其保持在相同的/ 24中,即192.168.50. 5和192.168.50.99或其他值。您可以确认它与busybox ps | grep dnsmasq一起使用,或者如果您没有忙碌箱ps dnsmasq,请在cat /proc/pid/cmdline中使用pid。您应该得到(或类似的结果):


/ system / bin / dnsmasq --no-daemon --no-poll -no-resolv --dhcp-range = 192.168.50.5, 192.168.50.99,1h


FWIW,我的WIFI绑定使用默认的dnsmasq范围,但为我的计算机分配了192.168.43.147/24和网关192.168.43.1/24。不确定为什么您的默认地址为42.x

评论


42用于USBNET 43用于WiFi

– Zibri
18年7月6日在15:19

很高兴找到您在哪里看到的?

–cde
18年7月6日在17:35

因为如果您通过usb进行连接,则得到42。如果您通过wifi进行连接,则得到43。

– Zibri
18年7月7日在18:57

#3 楼

我知道这是一篇旧文章,但以为我会提供更新。似乎有些制造商和Android版本现在确实允许在使用WiFi热点功能时通过UI更改DHCP服务器的IP子网范围。在运行Android 6.0的HTC One M8上可以找到它。 YMMV。

从“移动热点”屏幕中,单击3点图标(更多),转到“高级”,然后单击“ LAN设置”。
在“本地IP”下,将IP地址更改为所需的IP 。在“本地DHCP”下,更改起始IP以匹配您IP地址的子网。

Trent

评论


您知道新的HTC手机是否也有此选项吗?

– Arya
18年8月22日在2:05

#4 楼

默认的DHCP IP地址范围是硬编码的,因此,如果不使用修改后的源代码重建ROM,就无法更改它。或使用一点技巧。使用自定义外壳程序脚本替换/system/bin/dnsmasq(适用于Android 9的DHCP / DNS服务器),该脚本将在执行实际的dnsmasq二进制文件之前用新的子网掩码替换旧的子网。有关详细步骤,请参阅如何更改默认的DHCP IP。地址范围?

评论


Android 10现在使用什么?

– sudo
20/11/23在16:42

@sudo DHCP / DNS服务器的Java实现。但是至少有些ROM仍使用dnsmasq。

–艾尔凡·拉蒂夫(Irfan Latif)
20-11-23在18:38