我试图了解我的活动网络接口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?),这有助于获取可用接口列表。当我的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版本实际上是什么。
非常感谢任何帮助。提前致谢。
答案 0 :(得分:5)
要理解的第一个也是最重要的事情是,你几乎总是"在" IPv4和IPv6网络(除非其中一个已被禁用)。未能收到DHCP地址并不意味着您没有" on"一个网络。它只是意味着没有DHCP服务器与您交谈(拥有没有DHCP服务器的网络是完全合法的)。事实上,没有其他人与你在这个网络上并不意味着你不在网络上。你可以单独在网络上。你是。
迂腐,但对于了解正在发生的事情非常重要。你通常的意思是"我有一个公开的'此网络上的可路由地址。"大多数人真正意味着什么(并且是一个完全不同的问题,通常很难回答)是"什么是我的主要'互联&#34?; (这特别困难,因为您的"主要"网络可能会有所不同,具体取决于您尝试联系的地址。)
但是对于你可能想要回答的实际问题,这是"我是否已经分配了可能可路由的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
(第一个以太网接口,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)
这就是你怎么知道哪一个是可路由的。你必须检查它的范围。(对于问题:"为什么它只是说'你在互联网上?',a答案的主要部分是规范没有定义互联网。"互联网只是一个恰好非常大的特定网络。而且,你看到的大多数IPv4地址都会无论如何都是私人的,而且技术上并不是互联网。"网卡不知道在某个地方是否存在从私有网络到公共网络的NAT。 )
顺便说一句,当我说"不可路由时,"这并不意味着它不是您的主要地址。例如,您可以拥有基于链接本地地址的整个网络(我已经做了很多次)。但是这些地址不会路由(即它们不会被转发通过当前网段),因此对于大多数常见用途,可以考虑它们而不是真实地址。" #34;同样,我建立了网络"完全取决于仅限主机的地址,但由于它们不会通过当前的机器,因此它们通常不是人们对网络的意思。"