gpt4 book ai didi

ios - 检查网络接口(interface)ip版本ios

转载 作者:可可西里 更新时间:2023-11-01 03:12:24 26 4
gpt4 key购买 nike

我想了解我的事件网络接口(interface) ip 版本是什么 - IPv4 或 IPv6。我正在使用下一个说明 http://www.brianjcoleman.com/tutorial-how-to-test-your-app-for-ipv6-compatibility/测试我的应用程序的 IPv6 兼容性。

我检查了此处可用的所有资源(例如 Swift - Get device's IP Addresshow to get ip address of iphone programmaticallyWhat 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 .看看那个,我们可以考虑上面的每个地址。​​

IPv4网络

"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)

IPv6网络

"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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com