- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想了解我的事件网络接口(interface) ip 版本是什么 - IPv4 或 IPv6。我正在使用下一个说明 http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/测试我的应用程序的 IPv6 兼容性。
我检查了此处可用的所有资源(例如 Swift - Get device's IP Address、how to get ip address of iphone programmatically、What exactly means iOS networking interface name? what's pdp_ip ? what's ap?),它有助于获取可用接口(interface)的列表。当我的 iPhone 连接到 IPv4 WiFi 网络时,列表如下:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "192.168.1.190";
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
当连接到IPv6 WiFi网络时,列表如下:
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df";
"en0/ipv4" = "169.254.127.94";
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678";
"lo0/ipv4" = "127.0.0.1";
"lo0/ipv6" = "fe80::1";
"pdp_ip0/ipv4" = "100.83.148.33";
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded";
在这两种情况下,我都有 en0/ipv4 和 en0/ipv6,所以我不清楚如何以编程方式决定我的网络实际是什么 ip 版本。
非常感谢任何帮助。提前致谢。
最佳答案
首先,也是最重要的一点是,您几乎总是同时“使用”IPv4 和 IPv6 网络(除非其中一个已被禁用)。未能收到 DHCP 地址并不意味着您不在网络上。这只是意味着没有 DHCP 服务器与您通信(拥有没有 DHCP 服务器的网络是完全合法的)。没有其他人与您一起在该网络上这一事实并不意味着您也不在网络上。你可以独自在网络上。而你是。
迂腐,但对于理解正在发生的事情很重要。你通常的意思是“我在这个网络上有一个'公开'的可路由地址吗?”大多数人真正的意思(这是一个完全不同的问题,通常很难回答)是“我的‘主要’网络是什么?” (这特别困难,因为您的“主要”网络可能因您尝试访问的地址而异。)
但对于您可能想要回答的实际问题,即“我是否有分配的且可能可路由的 IPv4/6 地址?”为此,您必须查看您拥有的地址,并查看它分配给了什么。我的首选列表是维基百科的 Reserved IP addresses .看看那个,我们可以考虑上面的每个地址。
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df"; # fe80 => Link local (not routable)
"en0/ipv4" = "192.168.1.190"; # 192.168 => Private network (but *probably* NAT)
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e"; # fdba => Unique local address (not routable)
"lo0/ipv4" = "127.0.0.1"; # 127 => Host loopback (not routable)
"lo0/ipv6" = "fe80::1"; # fe80 => Host loopback (not routable)
"pdp_ip0/ipv4" = "100.83.148.33"; # 100.83 => Service provider (not useful to you)
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded"; # fe80 => Host loopback (not routable)
"awdl0/ipv6" = "fe80::14ce:f9ff:fe2a:44df"; # Loopback
"en0/ipv4" = "169.254.127.94"; # Link local (not routable)
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678"; # 2001 => "Teredo tunnel" (IPv6 routable over IPv4)
"lo0/ipv4" = "127.0.0.1"; # loopback
"lo0/ipv6" = "fe80::1"; # loopback
"pdp_ip0/ipv4" = "100.83.148.33"; # Service provider
"utun0/ipv6" = "fe80::e94e:c3b6:ff73:1ded"; # loopback
特别是您通常希望查看 en0
(第一个以太网接口(interface),在 iPhone 上是 WiFi)。你可以在第一种情况下看到:
"en0/ipv4" = "192.168.1.190"; # 192.168 => Private network (but *probably* NAT)
"en0/ipv6" = "fdba:ae3c:c993::19cd:be51:e41b:632e"; # fdba => Unique local address (not routable)
在第二种情况下你有:
"en0/ipv4" = "169.254.127.94"; # Link local (not routable)
"en0/ipv6" = "2001:2::aab1:7dd5:c5dc:16dd:b678"; # 2001 => "Teredo tunnel" (IPv6 routable over IPv4)
这就是您知道哪一个是可路由的方式。你必须检查它在什么范围内。(对于这个问题:“为什么它不能只说'你在互联网上?',答案的主要部分是规范没有定义“互联网。 “Internet 只是一个恰好非常大的特定网络。此外,您看到的大多数 IPv4 地址无论如何都是私有(private)的,从技术上讲不在“Internet”上。网卡不知道是否有一个从私有(private)网络桥接到公共(public)网络的某个地方的 NAT。)
顺便说一句,当我说“不可路由”时,并不意味着它不是您的主要地址。例如,您可以拥有基于链接本地地址的整个网络(我已经做过很多次)。但是这些地址不会路由(即它们不会被转发到当前网段),因此对于大多数常见用途来说,可以将它们视为“不是真实地址”。类似地,我完全使用仅主机地址构建了“网络”,但由于它们不会路由到当前机器,因此它们通常不是人们所说的“网络”。
关于ios - 检查网络接口(interface)ip版本ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42160174/
编写一个仅用于集中其他接口(interface)的接口(interface)是好的做法还是坏的做法? interface InterfaceA : InterfaceB, InterfaceC { }
有没有一种方法可以确定具体类型从任意接口(interface)列表?我知道类型转换,但我想知道所有满意的接口(interface)。 例如,给定: type Mover interface { Mo
我正在尝试制作斐波那契堆。 (在我正在上的算法课中多次提到它们,我想检查一下。)我希望堆使用任何类型的节点,所以我定义了一个 Node 接口(interface): package node type
这是我的代码: type IA interface { FB() IB } type IB interface { Bar() string } type A struct {
示例 A: // pseudo code interface IFoo { void bar(); } class FooPlatformA : IFoo { void bar() {
合并它编译的 leppies 反馈 - 但 IMO 有一些缺点,我希望编译器强制每个子类定义它们自己的 Uri 属性。现在的代码: [] type UriUserControl() = inh
我正在构建一个项目,该项目从用户那里获取一个术语,然后执行谷歌搜索并返回一个 json 格式的标题列表。 我正在使用 serpwow API 来执行谷歌搜索并试图解析响应。 但是我收到的错误是: pa
我只想在其他接口(interface)中实现某些接口(interface),我不希望它们能够被类直接继承。 提前致谢! 最佳答案 您不能在 C# 中执行此操作 - 任何类都可以实现它有权访问的任何接口
我是 Go 的新手,还有一些我还没有掌握的技巧 例如,我有一个可以这样调用的函数: myVar.InitOperation("foo",Operator.EQUAL,"bar") myVar.Init
我有一个通用接口(interface)来描述对输出流的访问,如下所示: interface IOutput { function writeInteger(aValue:Int):Void;
我正在做一个项目,我想通过某种接口(interface)(最好是 USB)将光电探测器电路安装到计算机上。但是,由于我是新手,所以我不知道应该朝哪个方向处理这个问题。假设我有一个带有 USB 连接的光
背景 我正在尝试创建一个简单的应用程序,以真正理解DDD + TDD + etc的整个堆栈。我的目标是在运行时动态注入DAL存储库类。这让我 域和应用程序服务层可测试。我打算用“穷人的DI”来完成 现
在 Java 中,接口(interface)扩展接口(interface)是完全合法的。 UML 中的这种关系看起来像“扩展”关系(实线、闭合、未填充的箭头)还是“实现”关系(虚线、闭合、未填充的箭头
我想创建一个具有相等和比较函数默认实现的接口(interface)。 如果我从类型 IKeyable 中删除所有内容除了Key成员,只要我不添加默认实现,它就是一个有效的接口(interface)。从
COM 中的双接口(interface)是能够通过 DispInterface 或 VTable 方法访问的接口(interface)。 现在有人可以告诉我这两种方法之间到底有什么区别吗? 我认为 V
我有一个类方法,它返回一个可以迭代的员工列表。返回列表的最佳方式是什么?通常我只返回一个 ArrayList。然而,据我了解,界面更适合这种类型的操作。哪个是最好使用的界面?另外,为什么返回接口(in
我想从包装类外部实例化一个内部非静态接口(interface)。 这可能吗? 考虑以下代码: shared class AOuterClass() { Integer val = 3; shared
我为一个类编写了一个接口(interface),如下所示: public interface IGenericMultipleRepository { Lazy> addresses { ge
我是 UML 的初学者,现在我正在创建一个序列图,问题是我想根据用户输入实现 DAO 接口(interface)。如何在时序图中正确绘制以实现接口(interface)。 最佳答案 您不会在 SD 上
要使用 jsr 303 验证创建有条件验证的组,请将接口(interface)类传递给注释,如下所示: @NotEmpty (groups={UpdateValue.class}) 我有很多不同的接口
我是一名优秀的程序员,十分优秀!