草庐IT

在 Android 设备上查找 IPv6 全局范围地址

codeneng 2023-03-28 原文

Find IPv6 global scope address on Android device

我正在寻找一种方法来确定我的 android 设备上的全局 IPv6 地址以进行测试。现在,我从 Android API 获得了一个接口列表,代码如下:

1
NetworkInterface netInt: NetworkInterface.getNetworkInterfaces()

netInt 实际上包含设备上所有接口的列表。例如,您可以从以下列表中看到..(只是列表的一部分)

1
2
3
[dummy0][2][/fe80::d878:d9ff:fe94:eeae%dummy0%2]
[rmnet_data0][7][/fe80::e03:fac6:8232:95d6%rmnet_data0%7]
                [/2607:fb90:543:e9dd:e03:fac6:8232:95d6%7%7]

我使用了一些公共 IPv6 站点并意识到我的公共 IPv6 地址是 2607:fb90:543:e9dd:e03:fac6:8232:95d6。我想看看是否有一种可靠的方法可以从数组中提取 2607:fb90:543:e9dd:e03:fac6:8232:95d6%7%7 因为数组的索引一直在变化并且从设备到设备。

感谢您的帮助。


你需要检查的是第一个地址字是4个字符,第一个字符是2还是3。如果数组元素满足这两个条件,它就是一个全局地址。然后你可以清理周围的垃圾以获得一个有效的地址。

注意:IPv6 允许将多个全局地址分配给一个接口。事实上,一些操作系统是为了安全而故意这样做的。

编辑:
IPv6 全球单播地址的定义是 2000::/3。这会产生 2000::3ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff。请参阅:IPv6 全球单播地址分配

1
2
3
4
5
Note
The assignable Global Unicast Address space is defined in [RFC4291] as
being the address block defined by the prefix 2000::/3. All address
space in this block not listed in the table below is reserved by IANA
for future allocation.

IPv6 允许在一个接口上使用任意数量的 IPv6 地址,您可以将它们用作传入或传出地址。

  • 谢谢你的帮助。你能告诉我在哪里可以找到指示地址以 2 或 3 开头作为全局地址的文档吗?另外,如果我们确实有多个公共 IP,我们怎么知道哪个是用于 OUTGOING 的?我假设只有一个用于传出。谢谢。
  • 再次感谢您的帮助。我确实看到了单播地址的范围。现在我发现了两个非常相似的 ipv6 地址,分别是 2600:1010:b022:1349:d25c:f9bf:2881:d30c%3%32600:1010:8043"3aba:67ca:ac76:4a8f:dbdb%9%9。我查看了公共 ipv6 站点,它告诉我第一个是公共 ipv6 地址。我如何识别彼此?
  • 我不完全确定您的 Android 版本或如何判断 Android 上正在使用哪个地址,但 Android 支持 Privacy Extensions.since 4.0 版。基本上,您会得到地址的随机接口(主机)ID,并且地址会定期更改。旧地址可能会保留一段时间。 RFC 4941 描述了隐私扩展:tools.ietf.org/html/rfc4941

有关在 Android 设备上查找 IPv6 全局范围地址的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  3. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

  4. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  5. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  6. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  7. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  8. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  9. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  10. Ruby 日期参数超出范围 - 2

    我正在尝试使用在我的代码中是动态的Time.local来安排时间。在每个月的第一天,我传递的值是Time.local(2009,9,-1,0)。在PHP中,这会将时间设置为上个月的最后一天。在ruby​​中,我只是得到“ArgumentError:参数超出范围”。是我用错了方法还是什么?谢谢。 最佳答案 您应该使用DateTime类而不是Time。(您可能需要先require'date'并安装activesupportgem。)它比Time更通用,并且可以用DateTime.civil(2009,9-1,-1,0)做你想做的事。为天

随机推荐