【问题标题】:Is there a way to programmatically determine if the android device is IPv6 enabled or not?有没有办法以编程方式确定 android 设备是否启用了 IPv6?
【发布时间】:2013-12-06 17:03:29
【问题描述】:

我使用 NetworkInterface 类来确定 IP 地址,但尽管设备仅启用了 IPv4,但我从 networkInterface 检索 IPv6 地址和 IPv4 地址,因为路由器也分配了 IPv6 地址。 有没有办法以编程方式确定 android 设备是否启用 IPv6?

【问题讨论】:

  • 我已经试过了。它在我的设备上也为我提供了 IPv6 地址,尽管我的设备不支持 IPv6,因为路由器在本地网络中分配了虚假的 ipv6 地址。我想找到一种方法来告诉我设备是否支持。
  • 这是否意味着设备支持它,但实际上是网络不支持?您真正关心的是设备本身,还是当前网络生态系统中的设备?
  • 我想了解设备本身
  • 在这种情况下很简单:如果您的设备有 IPv6 地址,则它支持 IPv6。它可能只有一个环回::1 或fe80: 链接本地地址。如果它有任何这些,则设备支持 IPv6。

标签: android ipv6


【解决方案1】:

这取决于您所说的“启用”是什么意思。

检查当前网络是否支持:

如果接口有一个 IPv6 地址,Inet6Address.isSiteLocal()、.isLinkLocal() 和 .isLoopback() 返回 false,则设备认为它在该接口上有一个上游路由器,并且该路由器认为有一个到通用网络的连接.当然,两者都可能是错误的,但他们认为自己的想法。

严格来说,这会测试设备是否连接到声称连接到 IPv6 世界的路由器。那个路由器可能有问题。

检查设备是否支持:

如果你想知道Android设备是否有任何v6支持,无论它是否能够访问其他v6设备,那么你可以遍历网络接口并检查它们是否有任何Inet6Address- es。我希望即使其他接口没有,环回接口也会有 v6 地址。

【讨论】:

  • 这只有在设备当前连接到 ipv6 网络时才有效,对吗?
  • 严格来说,它测试设备是否连接到声称连接到 IPv6 世界的路由器。那个路由器可能是错的。如果您想知道 Android 设备是否有任何 v6 支持,无论它是否能够访问其他 v6 设备,那么您可以遍历网络接口并检查其中是否有任何 Inet6Address-es。我无法测试(只有支持 v6 的网络),但我希望即使其他接口没有,环回接口也会有 v6 地址。
猜你喜欢
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2021-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
相关资源
最近更新 更多