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

Posted

技术标签:

【中文标题】IP地址范围的网络安全配置?【英文标题】:Network security config for range of ip addresses? 【发布时间】:2019-04-18 10:03:27 【问题描述】:

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地址?

【问题讨论】:

【参考方案1】:

不,抱歉。

事实上,如果他们开始认为 &lt;domain&gt; 指的是实际域名而不是任意主机值(例如 IP 地址),我怀疑支持 &lt;domain includeSubdomains="true"&gt;192.168.1.1&lt;/domain&gt; 是偶然的,并且随着时间的推移可能会变得不可靠。

【讨论】:

感谢您的回答!如果我可以问,你是如何得出这个结论的?您是否通过反复试验或仅通过语义和 android 文档在源代码中看到了什么? @user10293922:我将网络安全配置代码移植到了一个独立的库,该库可以回溯到 Android 4.2。话虽如此,我的陈述更多地基于语义和 Android 文档。 @CommonsWare 你能看看这个***.com/questions/53798484/… - 也许你知道是什么问题......谢谢!【参考方案2】:

为了获取你机器的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个域的文件,看起来有点糟糕

【讨论】:

【参考方案3】:

您认为您正在寻找一种方法来允许特定范围的 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>

resources/android/xml/network_security_config.xml

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

【讨论】:

以上是关于IP地址范围的网络安全配置?的主要内容,如果未能解决你的问题,请参考以下文章

Linux基础网络设置

linux 网络配置中BOOTPROTO=none 是啥意思, 使用这样的配置后对网络有啥影响

ip地址分几类,它们的范围是多少

网络安全学习--NAT

网络基础入门整理

第13章:Linux实操篇 网络配置