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】:不,抱歉。
事实上,如果他们开始认为 <domain>
指的是实际域名而不是任意主机值(例如 IP 地址),我怀疑支持 <domain includeSubdomains="true">192.168.1.1</domain>
是偶然的,并且随着时间的推移可能会变得不可靠。
【讨论】:
感谢您的回答!如果我可以问,你是如何得出这个结论的?您是否通过反复试验或仅通过语义和 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地址范围的网络安全配置?的主要内容,如果未能解决你的问题,请参考以下文章