网络安全配置的IP地址范围?

时间:2018-11-15 10:17:30

标签: android android-security android-9.0-pie

在Android P中,cleartext communication is disabled by default。相反,有两个选项:

  • 需要明确声明清单文件中允许使用明文进行通信,
  • 或者需要声明允许通过网络安全配置进行明文通信的域。

我的问题与第二种方法有关。我可以在network_security_config.xml

中将这样的特定IP地址列入白名单。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">192.168.1.1</domain>
    </domain-config>
</network-security-config>

但是,我想将所有私有IP地址列入白名单。我有一些反复试验的案例,但无法使其正常工作。

从本质上讲,是否提供了在网络安全配置中定义IP地址的范围的选项?

3 个答案:

答案 0 :(得分:0)

不,对不起。

实际上,我怀疑支持<domain includeSubdomains="true">192.168.1.1</domain>是偶然的,并且如果他们开始认为<domain>指的是实际域名而不是诸如IP之类的任意主机值,那么支持{{1}}可能是不可靠的地址。

答案 1 :(得分:0)

要获取计算机的IP,有解决方案

这是我的网络配置文件,位于res / xml:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">
            <!-- YOUR LOCAL IP -->
        </domain>
    </domain-config>
</network-security-config>

这是我的功课代码:

static def getLocalIP() {
    def ip4s = []
    NetworkInterface.getNetworkInterfaces()
        .findAll { it.isUp() && !it.isLoopback() && !it.isVirtual() }
        .each {
            if (it.name.startsWith("wlan")) {
                it.getInetAddresses()
                    .findAll { !it.isLoopbackAddress() && it instanceof Inet4Address }
                    .each { ip4s << it }
            }
        }
    return ip4s.first().toString().substring(1)
}

task ipNetwork(type: Copy) {
    from ('src/main/res/xml/network_security_config.xml')
    into ('src/debug/res/xml')
    filter {
        String line -> line.replaceAll("<!-- YOUR LOCAL IP -->", getLocalIP())
    }
}

这只会更改调试文件,因此将调试应用程序指向本地计算机很有用。该脚本可适用于针对IP的每个变体生成一堆域标签。这是我的第一个想法,为每个192.168。添加一个域。,但这会导致文件包含65536个域,这似乎有点糟糕

答案 2 :(得分:0)

如果您正在寻找一种方法来允许特定范围的IP地址,但是这似乎不可能,那么您可以允许所有IP地址并通过以下配置来消除错误消息:

config.xml

<platform name="android">
...
        <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
            <application android:networkSecurityConfig="@xml/network_security_config" />
        </edit-config>
        <resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
...
</platform>

资源/android/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>